Read arrays directly from Parcel

PiperOrigin-RevId: 286197990
This commit is contained in:
olly 2019-12-18 16:35:43 +00:00 committed by Oliver Woodman
parent 821d4fb13a
commit a8d39c1180
4 changed files with 48 additions and 7 deletions

View File

@ -18,6 +18,7 @@ package com.google.android.exoplayer2.metadata.scte35;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.ParsableByteArray;
import com.google.android.exoplayer2.util.Util;
/** /**
* Represents a private command as defined in SCTE35, Section 9.3.6. * Represents a private command as defined in SCTE35, Section 9.3.6.
@ -46,8 +47,7 @@ public final class PrivateCommand extends SpliceCommand {
private PrivateCommand(Parcel in) { private PrivateCommand(Parcel in) {
ptsAdjustment = in.readLong(); ptsAdjustment = in.readLong();
identifier = in.readLong(); identifier = in.readLong();
commandBytes = new byte[in.readInt()]; commandBytes = Util.castNonNull(in.createByteArray());
in.readByteArray(commandBytes);
} }
/* package */ static PrivateCommand parseFromSection(ParsableByteArray sectionData, /* package */ static PrivateCommand parseFromSection(ParsableByteArray sectionData,
@ -64,7 +64,6 @@ public final class PrivateCommand extends SpliceCommand {
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(ptsAdjustment); dest.writeLong(ptsAdjustment);
dest.writeLong(identifier); dest.writeLong(identifier);
dest.writeInt(commandBytes.length);
dest.writeByteArray(commandBytes); dest.writeByteArray(commandBytes);
} }

View File

@ -100,8 +100,7 @@ public final class DownloadRequest implements Parcelable {
} }
streamKeys = Collections.unmodifiableList(mutableStreamKeys); streamKeys = Collections.unmodifiableList(mutableStreamKeys);
customCacheKey = in.readString(); customCacheKey = in.readString();
data = new byte[in.readInt()]; data = castNonNull(in.createByteArray());
in.readByteArray(data);
} }
/** /**
@ -194,7 +193,6 @@ public final class DownloadRequest implements Parcelable {
dest.writeParcelable(streamKeys.get(i), /* parcelableFlags= */ 0); dest.writeParcelable(streamKeys.get(i), /* parcelableFlags= */ 0);
} }
dest.writeString(customCacheKey); dest.writeString(customCacheKey);
dest.writeInt(data.length);
dest.writeByteArray(data); dest.writeByteArray(data);
} }

View File

@ -12,7 +12,6 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*
*/ */
package com.google.android.exoplayer2.metadata; package com.google.android.exoplayer2.metadata;

View File

@ -0,0 +1,45 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.metadata;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.metadata.id3.BinaryFrame;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Tests for {@link Metadata}. */
@RunWith(AndroidJUnit4.class)
public class MetadataTest {
@Test
public void testParcelable() {
Metadata metadataToParcel =
new Metadata(
new BinaryFrame("id1", new byte[] {1}), new BinaryFrame("id2", new byte[] {2}));
Parcel parcel = Parcel.obtain();
metadataToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
Metadata metadataFromParcel = Metadata.CREATOR.createFromParcel(parcel);
assertThat(metadataFromParcel).isEqualTo(metadataToParcel);
parcel.recycle();
}
}