Remove Parcelable interface from Metadata and Metadata.Entry

`Parcelable` is not safe for IPCs between binaries with potentially
different class definitions (e.g. two apps built from different versions
of media3).

If we get a use case to bundle metadata, then the `Metadata` and
`Metadata.Entry` classes needs to provide a `toBundle()` method.

PiperOrigin-RevId: 706678892
This commit is contained in:
sheenachhabra 2024-12-16 05:54:58 -08:00 committed by Copybara-Service
parent 1326a92350
commit 319ac2e5af
53 changed files with 5 additions and 2031 deletions

View File

@ -15,8 +15,6 @@
*/
package androidx.media3.common;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
@ -26,10 +24,10 @@ import java.util.List;
/** A collection of metadata entries. */
@UnstableApi
public final class Metadata implements Parcelable {
public final class Metadata {
/** A metadata entry. */
public interface Entry extends Parcelable {
public interface Entry {
/**
* Returns the {@link Format} that can be used to decode the wrapped metadata in {@link
@ -100,14 +98,6 @@ public final class Metadata implements Parcelable {
this(presentationTimeUs, entries.toArray(new Entry[0]));
}
/* package */ Metadata(Parcel in) {
entries = new Metadata.Entry[in.readInt()];
for (int i = 0; i < entries.length; i++) {
entries[i] = in.readParcelable(Entry.class.getClassLoader());
}
presentationTimeUs = in.readLong();
}
/** Returns the number of metadata entries. */
public int length() {
return entries.length;
@ -190,33 +180,4 @@ public final class Metadata implements Parcelable {
+ Arrays.toString(entries)
+ (presentationTimeUs == C.TIME_UNSET ? "" : ", presentationTimeUs=" + presentationTimeUs);
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(entries.length);
for (Entry entry : entries) {
dest.writeParcelable(entry, 0);
}
dest.writeLong(presentationTimeUs);
}
public static final Parcelable.Creator<Metadata> CREATOR =
new Parcelable.Creator<Metadata>() {
@Override
public Metadata createFromParcel(Parcel in) {
return new Metadata(in);
}
@Override
public Metadata[] newArray(int size) {
return new Metadata[size];
}
};
}

View File

@ -1,47 +0,0 @@
/*
* 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 androidx.media3.common;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.media3.test.utils.FakeMetadataEntry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Tests for {@link Metadata}. */
@RunWith(AndroidJUnit4.class)
public class MetadataTest {
@Test
public void parcelable() {
Metadata metadataToParcel =
new Metadata(
/* presentationTimeUs= */ 1_230_000,
new FakeMetadataEntry("id1"),
new FakeMetadataEntry("id2"));
Parcel parcel = Parcel.obtain();
metadataToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
Metadata metadataFromParcel = Metadata.CREATOR.createFromParcel(parcel);
assertThat(metadataFromParcel).isEqualTo(metadataToParcel);
parcel.recycle();
}
}

View File

@ -18,8 +18,6 @@ package androidx.media3.container;
import static androidx.media3.common.util.Assertions.checkArgument;
import static androidx.media3.common.util.Assertions.checkState;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.Metadata;
import androidx.media3.common.util.ParsableByteArray;
@ -111,14 +109,6 @@ public final class MdtaMetadataEntry implements Metadata.Entry {
this.typeIndicator = typeIndicator;
}
private MdtaMetadataEntry(Parcel in) {
key = Util.castNonNull(in.readString());
value = Util.castNonNull(in.createByteArray());
localeIndicator = in.readInt();
typeIndicator = in.readInt();
validateData(key, value, typeIndicator);
}
/**
* Returns the auxiliary track types from the {@linkplain #KEY_AUXILIARY_TRACKS_MAP auxiliary
* tracks map} metadata.
@ -191,35 +181,6 @@ public final class MdtaMetadataEntry implements Metadata.Entry {
return "mdta: key=" + key + ", value=" + formattedValue;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(key);
dest.writeByteArray(value);
dest.writeInt(localeIndicator);
dest.writeInt(typeIndicator);
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<MdtaMetadataEntry> CREATOR =
new Parcelable.Creator<MdtaMetadataEntry>() {
@Override
public MdtaMetadataEntry createFromParcel(Parcel in) {
return new MdtaMetadataEntry(in);
}
@Override
public MdtaMetadataEntry[] newArray(int size) {
return new MdtaMetadataEntry[size];
}
};
private static void validateData(String key, byte[] value, int typeIndicator) {
switch (key) {
case KEY_ANDROID_CAPTURE_FPS:

View File

@ -17,8 +17,6 @@ package androidx.media3.container;
import static androidx.media3.common.util.Assertions.checkArgument;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.FloatRange;
import androidx.annotation.Nullable;
import androidx.media3.common.Metadata;
@ -47,11 +45,6 @@ public final class Mp4LocationData implements Metadata.Entry {
this.longitude = longitude;
}
private Mp4LocationData(Parcel in) {
latitude = in.readFloat();
longitude = in.readFloat();
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -76,31 +69,4 @@ public final class Mp4LocationData implements Metadata.Entry {
public String toString() {
return "xyz: latitude=" + latitude + ", longitude=" + longitude;
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeFloat(latitude);
dest.writeFloat(longitude);
}
public static final Parcelable.Creator<Mp4LocationData> CREATOR =
new Parcelable.Creator<Mp4LocationData>() {
@Override
public Mp4LocationData createFromParcel(Parcel in) {
return new Mp4LocationData(in);
}
@Override
public Mp4LocationData[] newArray(int size) {
return new Mp4LocationData[size];
}
};
}

View File

@ -17,8 +17,6 @@ package androidx.media3.container;
import static androidx.media3.common.util.Assertions.checkArgument;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.Metadata;
import androidx.media3.common.util.UnstableApi;
@ -41,10 +39,6 @@ public final class Mp4OrientationData implements Metadata.Entry {
this.orientation = orientation;
}
private Mp4OrientationData(Parcel in) {
orientation = in.readInt();
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -68,30 +62,4 @@ public final class Mp4OrientationData implements Metadata.Entry {
public String toString() {
return "Orientation= " + orientation;
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(orientation);
}
public static final Parcelable.Creator<Mp4OrientationData> CREATOR =
new Parcelable.Creator<Mp4OrientationData>() {
@Override
public Mp4OrientationData createFromParcel(Parcel in) {
return new Mp4OrientationData(in);
}
@Override
public Mp4OrientationData[] newArray(int size) {
return new Mp4OrientationData[size];
}
};
}

View File

@ -15,8 +15,6 @@
*/
package androidx.media3.container;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.Metadata;
import androidx.media3.common.util.UnstableApi;
@ -76,12 +74,6 @@ public final class Mp4TimestampData implements Metadata.Entry {
this.timescale = timescale;
}
private Mp4TimestampData(Parcel in) {
this.creationTimestampSeconds = in.readLong();
this.modificationTimestampSeconds = in.readLong();
this.timescale = in.readLong();
}
/**
* Returns an MP4 timestamp (in seconds since midnight, January 1, 1904) from a Unix epoch
* timestamp (in milliseconds since midnight, January 1, 1970).
@ -124,32 +116,4 @@ public final class Mp4TimestampData implements Metadata.Entry {
+ ", timescale="
+ timescale;
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(creationTimestampSeconds);
dest.writeLong(modificationTimestampSeconds);
dest.writeLong(timescale);
}
public static final Parcelable.Creator<Mp4TimestampData> CREATOR =
new Parcelable.Creator<Mp4TimestampData>() {
@Override
public Mp4TimestampData createFromParcel(Parcel in) {
return new Mp4TimestampData(in);
}
@Override
public Mp4TimestampData[] newArray(int size) {
return new Mp4TimestampData[size];
}
};
}

View File

@ -15,8 +15,6 @@
*/
package androidx.media3.container;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.Metadata;
import androidx.media3.common.util.UnstableApi;
@ -33,10 +31,6 @@ public final class XmpData implements Metadata.Entry {
this.data = data;
}
private XmpData(Parcel in) {
this.data = Util.castNonNull(in.createByteArray());
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -58,30 +52,4 @@ public final class XmpData implements Metadata.Entry {
public String toString() {
return "XMP: " + Util.toHexString(data);
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByteArray(data);
}
public static final Parcelable.Creator<XmpData> CREATOR =
new Parcelable.Creator<XmpData>() {
@Override
public XmpData createFromParcel(Parcel in) {
return new XmpData(in);
}
@Override
public XmpData[] newArray(int size) {
return new XmpData[size];
}
};
}

View File

@ -1,48 +0,0 @@
/*
* 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 androidx.media3.container;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link MdtaMetadataEntry}. */
@RunWith(AndroidJUnit4.class)
public final class MdtaMetadataEntryTest {
@Test
public void parcelable() {
MdtaMetadataEntry mdtaMetadataEntryToParcel =
new MdtaMetadataEntry(
/* key= */ "test",
/* value= */ new byte[] {1, 2},
/* localeIndicator= */ 3,
/* typeIndicator= */ 4);
Parcel parcel = Parcel.obtain();
mdtaMetadataEntryToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
MdtaMetadataEntry mdtaMetadataEntryFromParcel =
MdtaMetadataEntry.CREATOR.createFromParcel(parcel);
assertThat(mdtaMetadataEntryFromParcel).isEqualTo(mdtaMetadataEntryToParcel);
parcel.recycle();
}
}

View File

@ -1,42 +0,0 @@
/*
* Copyright 2024 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 androidx.media3.container;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link Mp4OrientationData}. */
@RunWith(AndroidJUnit4.class)
public final class Mp4OrientationDataTest {
@Test
public void parcelable() {
Mp4OrientationData mp4OrientationData = new Mp4OrientationData(/* orientation= */ 90);
Parcel parcel = Parcel.obtain();
mp4OrientationData.writeToParcel(parcel, /* flags= */ 0);
parcel.setDataPosition(0);
Mp4OrientationData mp4OrientationDataFromParcel =
Mp4OrientationData.CREATOR.createFromParcel(parcel);
assertThat(mp4OrientationDataFromParcel).isEqualTo(mp4OrientationData);
parcel.recycle();
}
}

View File

@ -15,8 +15,6 @@
*/
package androidx.media3.exoplayer.hls;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import androidx.annotation.Nullable;
import androidx.media3.common.Format;
@ -31,7 +29,7 @@ import java.util.List;
public final class HlsTrackMetadataEntry implements Metadata.Entry {
/** Holds attributes defined in an EXT-X-STREAM-INF tag. */
public static final class VariantInfo implements Parcelable {
public static final class VariantInfo {
/**
* The average bitrate as declared by the AVERAGE-BANDWIDTH attribute of the EXT-X-STREAM-INF
@ -91,15 +89,6 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
this.captionGroupId = captionGroupId;
}
/* package */ VariantInfo(Parcel in) {
averageBitrate = in.readInt();
peakBitrate = in.readInt();
videoGroupId = in.readString();
audioGroupId = in.readString();
subtitleGroupId = in.readString();
captionGroupId = in.readString();
}
@Override
public boolean equals(@Nullable Object other) {
if (this == other) {
@ -127,36 +116,6 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
result = 31 * result + (captionGroupId != null ? captionGroupId.hashCode() : 0);
return result;
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(averageBitrate);
dest.writeInt(peakBitrate);
dest.writeString(videoGroupId);
dest.writeString(audioGroupId);
dest.writeString(subtitleGroupId);
dest.writeString(captionGroupId);
}
public static final Parcelable.Creator<VariantInfo> CREATOR =
new Parcelable.Creator<VariantInfo>() {
@Override
public VariantInfo createFromParcel(Parcel in) {
return new VariantInfo(in);
}
@Override
public VariantInfo[] newArray(int size) {
return new VariantInfo[size];
}
};
}
/**
@ -191,17 +150,6 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
this.variantInfos = Collections.unmodifiableList(new ArrayList<>(variantInfos));
}
/* package */ HlsTrackMetadataEntry(Parcel in) {
groupId = in.readString();
name = in.readString();
int variantInfoSize = in.readInt();
ArrayList<VariantInfo> variantInfos = new ArrayList<>(variantInfoSize);
for (int i = 0; i < variantInfoSize; i++) {
variantInfos.add(in.readParcelable(VariantInfo.class.getClassLoader()));
}
this.variantInfos = Collections.unmodifiableList(variantInfos);
}
@Override
public String toString() {
return "HlsTrackMetadataEntry" + (groupId != null ? (" [" + groupId + ", " + name + "]") : "");
@ -229,35 +177,4 @@ public final class HlsTrackMetadataEntry implements Metadata.Entry {
result = 31 * result + variantInfos.hashCode();
return result;
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(groupId);
dest.writeString(name);
int variantInfosSize = variantInfos.size();
dest.writeInt(variantInfosSize);
for (int i = 0; i < variantInfosSize; i++) {
dest.writeParcelable(variantInfos.get(i), /* parcelableFlags= */ 0);
}
}
public static final Parcelable.Creator<HlsTrackMetadataEntry> CREATOR =
new Parcelable.Creator<HlsTrackMetadataEntry>() {
@Override
public HlsTrackMetadataEntry createFromParcel(Parcel in) {
return new HlsTrackMetadataEntry(in);
}
@Override
public HlsTrackMetadataEntry[] newArray(int size) {
return new HlsTrackMetadataEntry[size];
}
};
}

View File

@ -1,50 +0,0 @@
/*
* Copyright (C) 2020 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 androidx.media3.exoplayer.hls;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.media3.exoplayer.hls.HlsTrackMetadataEntry.VariantInfo;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link HlsTrackMetadataEntry}. */
@RunWith(AndroidJUnit4.class)
public class HlsTrackMetadataEntryTest {
@Test
public void variantInfo_parcelRoundTrip_isEqual() {
VariantInfo variantInfoToParcel =
new VariantInfo(
/* averageBitrate= */ 1024,
/* peakBitrate= */ 2048,
"videoGroupId",
"audioGroupId",
"subtitleGroupId",
"captionGroupId");
Parcel parcel = Parcel.obtain();
variantInfoToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
VariantInfo variantInfoFromParcel = VariantInfo.CREATOR.createFromParcel(parcel);
assertThat(variantInfoFromParcel).isEqualTo(variantInfoToParcel);
parcel.recycle();
}
}

View File

@ -15,10 +15,7 @@
*/
package androidx.media3.extractor.metadata.dvbsi;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.media3.common.Metadata;
import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.UnstableApi;
/**
@ -54,30 +51,4 @@ public final class AppInfoTable implements Metadata.Entry {
public String toString() {
return "Ait(controlCode=" + controlCode + ",url=" + url + ")";
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(url);
parcel.writeInt(controlCode);
}
public static final Parcelable.Creator<AppInfoTable> CREATOR =
new Parcelable.Creator<AppInfoTable>() {
@Override
public AppInfoTable createFromParcel(Parcel in) {
String url = Assertions.checkNotNull(in.readString());
int controlCode = in.readInt();
return new AppInfoTable(controlCode, url);
}
@Override
public AppInfoTable[] newArray(int size) {
return new AppInfoTable[size];
}
};
}

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.extractor.metadata.emsg;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.media3.common.Format;
@ -90,14 +86,6 @@ public final class EventMessage implements Metadata.Entry {
this.messageData = messageData;
}
/* package */ EventMessage(Parcel in) {
schemeIdUri = castNonNull(in.readString());
value = castNonNull(in.readString());
durationMs = in.readLong();
id = in.readLong();
messageData = castNonNull(in.createByteArray());
}
@Override
@Nullable
public Format getWrappedMetadataFormat() {
@ -159,34 +147,4 @@ public final class EventMessage implements Metadata.Entry {
+ ", value="
+ value;
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(schemeIdUri);
dest.writeString(value);
dest.writeLong(durationMs);
dest.writeLong(id);
dest.writeByteArray(messageData);
}
public static final Parcelable.Creator<EventMessage> CREATOR =
new Parcelable.Creator<EventMessage>() {
@Override
public EventMessage createFromParcel(Parcel in) {
return new EventMessage(in);
}
@Override
public EventMessage[] newArray(int size) {
return new EventMessage[size];
}
};
}

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.extractor.metadata.flac;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Metadata;
@ -75,17 +71,6 @@ public final class PictureFrame implements Metadata.Entry {
this.pictureData = pictureData;
}
/* package */ PictureFrame(Parcel in) {
this.pictureType = in.readInt();
this.mimeType = castNonNull(in.readString());
this.description = castNonNull(in.readString());
this.width = in.readInt();
this.height = in.readInt();
this.depth = in.readInt();
this.colors = in.readInt();
this.pictureData = castNonNull(in.createByteArray());
}
@Override
public void populateMediaMetadata(MediaMetadata.Builder builder) {
builder.maybeSetArtworkData(pictureData, pictureType);
@ -129,23 +114,6 @@ public final class PictureFrame implements Metadata.Entry {
return result;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(pictureType);
dest.writeString(mimeType);
dest.writeString(description);
dest.writeInt(width);
dest.writeInt(height);
dest.writeInt(depth);
dest.writeInt(colors);
dest.writeByteArray(pictureData);
}
@Override
public int describeContents() {
return 0;
}
/**
* Parses a {@code METADATA_BLOCK_PICTURE} into a {@code PictureFrame} instance.
*
@ -176,18 +144,4 @@ public final class PictureFrame implements Metadata.Entry {
return new PictureFrame(
pictureType, mimeType, description, width, height, depth, colors, pictureData);
}
public static final Parcelable.Creator<PictureFrame> CREATOR =
new Parcelable.Creator<PictureFrame>() {
@Override
public PictureFrame createFromParcel(Parcel in) {
return new PictureFrame(in);
}
@Override
public PictureFrame[] newArray(int size) {
return new PictureFrame[size];
}
};
}

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.extractor.metadata.flac;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Metadata;
@ -52,11 +48,6 @@ public class VorbisComment implements Metadata.Entry {
this.value = value;
}
protected VorbisComment(Parcel in) {
this.key = castNonNull(in.readString());
this.value = castNonNull(in.readString());
}
@Override
public void populateMediaMetadata(MediaMetadata.Builder builder) {
// Vorbis comments can have duplicate keys, but all these fields are singular on MediaMetadata,
@ -134,31 +125,4 @@ public class VorbisComment implements Metadata.Entry {
result = 31 * result + value.hashCode();
return result;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(key);
dest.writeString(value);
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<VorbisComment> CREATOR =
new Parcelable.Creator<VorbisComment>() {
@Override
public VorbisComment createFromParcel(Parcel in) {
return new VorbisComment(in);
}
@Override
public VorbisComment[] newArray(int size) {
return new VorbisComment[size];
}
};
}

View File

@ -15,8 +15,6 @@
*/
package androidx.media3.extractor.metadata.icy;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.C;
import androidx.media3.common.Format;
@ -167,15 +165,6 @@ public final class IcyHeaders implements Metadata.Entry {
this.metadataInterval = metadataInterval;
}
/* package */ IcyHeaders(Parcel in) {
bitrate = in.readInt();
genre = in.readString();
name = in.readString();
url = in.readString();
isPublic = Util.readBoolean(in);
metadataInterval = in.readInt();
}
@Override
public void populateMediaMetadata(MediaMetadata.Builder builder) {
if (name != null) {
@ -226,35 +215,4 @@ public final class IcyHeaders implements Metadata.Entry {
+ ", metadataInterval="
+ metadataInterval;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(bitrate);
dest.writeString(genre);
dest.writeString(name);
dest.writeString(url);
Util.writeBoolean(dest, isPublic);
dest.writeInt(metadataInterval);
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<IcyHeaders> CREATOR =
new Parcelable.Creator<IcyHeaders>() {
@Override
public IcyHeaders createFromParcel(Parcel in) {
return new IcyHeaders(in);
}
@Override
public IcyHeaders[] newArray(int size) {
return new IcyHeaders[size];
}
};
}

View File

@ -15,12 +15,9 @@
*/
package androidx.media3.extractor.metadata.icy;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Metadata;
import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.UnstableApi;
import java.util.Arrays;
@ -51,12 +48,6 @@ public final class IcyInfo implements Metadata.Entry {
this.url = url;
}
/* package */ IcyInfo(Parcel in) {
rawMetadata = Assertions.checkNotNull(in.createByteArray());
title = in.readString();
url = in.readString();
}
@Override
public void populateMediaMetadata(MediaMetadata.Builder builder) {
if (title != null) {
@ -88,32 +79,4 @@ public final class IcyInfo implements Metadata.Entry {
return String.format(
"ICY: title=\"%s\", url=\"%s\", rawMetadata.length=\"%s\"", title, url, rawMetadata.length);
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByteArray(rawMetadata);
dest.writeString(title);
dest.writeString(url);
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<IcyInfo> CREATOR =
new Parcelable.Creator<IcyInfo>() {
@Override
public IcyInfo createFromParcel(Parcel in) {
return new IcyInfo(in);
}
@Override
public IcyInfo[] newArray(int size) {
return new IcyInfo[size];
}
};
}

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.MediaMetadata;
import androidx.media3.common.util.UnstableApi;
@ -45,14 +41,6 @@ public final class ApicFrame extends Id3Frame {
this.pictureData = pictureData;
}
/* package */ ApicFrame(Parcel in) {
super(ID);
mimeType = castNonNull(in.readString());
description = in.readString();
pictureType = in.readInt();
pictureData = castNonNull(in.createByteArray());
}
@Override
public void populateMediaMetadata(MediaMetadata.Builder builder) {
builder.maybeSetArtworkData(pictureData, pictureType);
@ -87,28 +75,4 @@ public final class ApicFrame extends Id3Frame {
public String toString() {
return id + ": mimeType=" + mimeType + ", description=" + description;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mimeType);
dest.writeString(description);
dest.writeInt(pictureType);
dest.writeByteArray(pictureData);
}
public static final Parcelable.Creator<ApicFrame> CREATOR =
new Parcelable.Creator<ApicFrame>() {
@Override
public ApicFrame createFromParcel(Parcel in) {
return new ApicFrame(in);
}
@Override
public ApicFrame[] newArray(int size) {
return new ApicFrame[size];
}
};
}

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import java.util.Arrays;
@ -34,11 +30,6 @@ public final class BinaryFrame extends Id3Frame {
this.data = data;
}
/* package */ BinaryFrame(Parcel in) {
super(castNonNull(in.readString()));
data = castNonNull(in.createByteArray());
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -58,24 +49,4 @@ public final class BinaryFrame extends Id3Frame {
result = 31 * result + Arrays.hashCode(data);
return result;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeByteArray(data);
}
public static final Parcelable.Creator<BinaryFrame> CREATOR =
new Parcelable.Creator<BinaryFrame>() {
@Override
public BinaryFrame createFromParcel(Parcel in) {
return new BinaryFrame(in);
}
@Override
public BinaryFrame[] newArray(int size) {
return new BinaryFrame[size];
}
};
}

View File

@ -15,9 +15,6 @@
*/
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import androidx.annotation.Nullable;
import androidx.media3.common.C;
import androidx.media3.common.util.UnstableApi;
@ -58,20 +55,6 @@ public final class ChapterFrame extends Id3Frame {
this.subFrames = subFrames;
}
/* package */ ChapterFrame(Parcel in) {
super(ID);
this.chapterId = castNonNull(in.readString());
this.startTimeMs = in.readInt();
this.endTimeMs = in.readInt();
this.startOffset = in.readLong();
this.endOffset = in.readLong();
int subFrameCount = in.readInt();
subFrames = new Id3Frame[subFrameCount];
for (int i = 0; i < subFrameCount; i++) {
subFrames[i] = in.readParcelable(Id3Frame.class.getClassLoader());
}
}
/** Returns the number of sub-frames. */
public int getSubFrameCount() {
return subFrames.length;
@ -109,36 +92,4 @@ public final class ChapterFrame extends Id3Frame {
result = 31 * result + (chapterId != null ? chapterId.hashCode() : 0);
return result;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(chapterId);
dest.writeInt(startTimeMs);
dest.writeInt(endTimeMs);
dest.writeLong(startOffset);
dest.writeLong(endOffset);
dest.writeInt(subFrames.length);
for (Id3Frame subFrame : subFrames) {
dest.writeParcelable(subFrame, 0);
}
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<ChapterFrame> CREATOR =
new Creator<ChapterFrame>() {
@Override
public ChapterFrame createFromParcel(Parcel in) {
return new ChapterFrame(in);
}
@Override
public ChapterFrame[] newArray(int size) {
return new ChapterFrame[size];
}
};
}

View File

@ -15,9 +15,6 @@
*/
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
@ -49,19 +46,6 @@ public final class ChapterTocFrame extends Id3Frame {
this.subFrames = subFrames;
}
/* package */ ChapterTocFrame(Parcel in) {
super(ID);
this.elementId = castNonNull(in.readString());
this.isRoot = in.readByte() != 0;
this.isOrdered = in.readByte() != 0;
this.children = castNonNull(in.createStringArray());
int subFrameCount = in.readInt();
subFrames = new Id3Frame[subFrameCount];
for (int i = 0; i < subFrameCount; i++) {
subFrames[i] = in.readParcelable(Id3Frame.class.getClassLoader());
}
}
/** Returns the number of sub-frames. */
public int getSubFrameCount() {
return subFrames.length;
@ -96,30 +80,4 @@ public final class ChapterTocFrame extends Id3Frame {
result = 31 * result + (elementId != null ? elementId.hashCode() : 0);
return result;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(elementId);
dest.writeByte((byte) (isRoot ? 1 : 0));
dest.writeByte((byte) (isOrdered ? 1 : 0));
dest.writeStringArray(children);
dest.writeInt(subFrames.length);
for (Id3Frame subFrame : subFrames) {
dest.writeParcelable(subFrame, 0);
}
}
public static final Creator<ChapterTocFrame> CREATOR =
new Creator<ChapterTocFrame>() {
@Override
public ChapterTocFrame createFromParcel(Parcel in) {
return new ChapterTocFrame(in);
}
@Override
public ChapterTocFrame[] newArray(int size) {
return new ChapterTocFrame[size];
}
};
}

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
@ -40,13 +36,6 @@ public final class CommentFrame extends Id3Frame {
this.text = text;
}
/* package */ CommentFrame(Parcel in) {
super(ID);
language = castNonNull(in.readString());
description = castNonNull(in.readString());
text = castNonNull(in.readString());
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -74,27 +63,4 @@ public final class CommentFrame extends Id3Frame {
public String toString() {
return id + ": language=" + language + ", description=" + description + ", text=" + text;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(language);
dest.writeString(text);
}
public static final Parcelable.Creator<CommentFrame> CREATOR =
new Parcelable.Creator<CommentFrame>() {
@Override
public CommentFrame createFromParcel(Parcel in) {
return new CommentFrame(in);
}
@Override
public CommentFrame[] newArray(int size) {
return new CommentFrame[size];
}
};
}

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
@ -43,14 +39,6 @@ public final class GeobFrame extends Id3Frame {
this.data = data;
}
/* package */ GeobFrame(Parcel in) {
super(ID);
mimeType = castNonNull(in.readString());
filename = castNonNull(in.readString());
description = castNonNull(in.readString());
data = castNonNull(in.createByteArray());
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -86,28 +74,4 @@ public final class GeobFrame extends Id3Frame {
+ ", description="
+ description;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mimeType);
dest.writeString(filename);
dest.writeString(description);
dest.writeByteArray(data);
}
public static final Parcelable.Creator<GeobFrame> CREATOR =
new Parcelable.Creator<GeobFrame>() {
@Override
public GeobFrame createFromParcel(Parcel in) {
return new GeobFrame(in);
}
@Override
public GeobFrame[] newArray(int size) {
return new GeobFrame[size];
}
};
}

View File

@ -33,9 +33,4 @@ public abstract class Id3Frame implements Metadata.Entry {
public String toString() {
return id;
}
@Override
public int describeContents() {
return 0;
}
}

View File

@ -15,9 +15,6 @@
*/
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
@ -39,13 +36,6 @@ public final class InternalFrame extends Id3Frame {
this.text = text;
}
/* package */ InternalFrame(Parcel in) {
super(ID);
domain = castNonNull(in.readString());
description = castNonNull(in.readString());
text = castNonNull(in.readString());
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -73,27 +63,4 @@ public final class InternalFrame extends Id3Frame {
public String toString() {
return id + ": domain=" + domain + ", description=" + description;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(domain);
dest.writeString(text);
}
public static final Creator<InternalFrame> CREATOR =
new Creator<InternalFrame>() {
@Override
public InternalFrame createFromParcel(Parcel in) {
return new InternalFrame(in);
}
@Override
public InternalFrame[] newArray(int size) {
return new InternalFrame[size];
}
};
}

View File

@ -15,10 +15,8 @@
*/
package androidx.media3.extractor.metadata.id3;
import android.os.Parcel;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
import java.util.Arrays;
/** MPEG location lookup table frame. */
@ -47,15 +45,6 @@ public final class MlltFrame extends Id3Frame {
this.millisecondsDeviations = millisecondsDeviations;
}
/* package */ MlltFrame(Parcel in) {
super(ID);
this.mpegFramesBetweenReference = in.readInt();
this.bytesBetweenReference = in.readInt();
this.millisecondsBetweenReference = in.readInt();
this.bytesDeviations = Util.castNonNull(in.createIntArray());
this.millisecondsDeviations = Util.castNonNull(in.createIntArray());
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -82,34 +71,4 @@ public final class MlltFrame extends Id3Frame {
result = 31 * result + Arrays.hashCode(millisecondsDeviations);
return result;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mpegFramesBetweenReference);
dest.writeInt(bytesBetweenReference);
dest.writeInt(millisecondsBetweenReference);
dest.writeIntArray(bytesDeviations);
dest.writeIntArray(millisecondsDeviations);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<MlltFrame> CREATOR =
new Creator<MlltFrame>() {
@Override
public MlltFrame createFromParcel(Parcel in) {
return new MlltFrame(in);
}
@Override
public MlltFrame[] newArray(int size) {
return new MlltFrame[size];
}
};
}

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
@ -39,12 +35,6 @@ public final class PrivFrame extends Id3Frame {
this.privateData = privateData;
}
/* package */ PrivFrame(Parcel in) {
super(ID);
owner = castNonNull(in.readString());
privateData = castNonNull(in.createByteArray());
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -69,26 +59,4 @@ public final class PrivFrame extends Id3Frame {
public String toString() {
return id + ": owner=" + owner;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(owner);
dest.writeByteArray(privateData);
}
public static final Parcelable.Creator<PrivFrame> CREATOR =
new Parcelable.Creator<PrivFrame>() {
@Override
public PrivFrame createFromParcel(Parcel in) {
return new PrivFrame(in);
}
@Override
public PrivFrame[] newArray(int size) {
return new PrivFrame[size];
}
};
}

View File

@ -16,10 +16,7 @@
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Assertions.checkArgument;
import static androidx.media3.common.util.Assertions.checkNotNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.MediaMetadata;
import androidx.media3.common.util.UnstableApi;
@ -66,13 +63,6 @@ public final class TextInformationFrame extends Id3Frame {
this(id, description, ImmutableList.of(value));
}
private TextInformationFrame(Parcel in) {
this(
checkNotNull(in.readString()),
in.readString(),
ImmutableList.copyOf(checkNotNull(in.createStringArray())));
}
/**
* Uses the first element in {@link #values} to set the relevant field in {@link MediaMetadata}
* (as determined by {@link #id}).
@ -221,29 +211,6 @@ public final class TextInformationFrame extends Id3Frame {
return id + ": description=" + description + ": values=" + values;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(description);
dest.writeStringArray(values.toArray(new String[0]));
}
public static final Parcelable.Creator<TextInformationFrame> CREATOR =
new Parcelable.Creator<TextInformationFrame>() {
@Override
public TextInformationFrame createFromParcel(Parcel in) {
return new TextInformationFrame(in);
}
@Override
public TextInformationFrame[] newArray(int size) {
return new TextInformationFrame[size];
}
};
// Private methods
private static List<Integer> parseId3v2point4TimestampFrameForDate(String value) {

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.extractor.metadata.id3;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
@ -36,12 +32,6 @@ public final class UrlLinkFrame extends Id3Frame {
this.url = url;
}
/* package */ UrlLinkFrame(Parcel in) {
super(castNonNull(in.readString()));
description = in.readString();
url = castNonNull(in.readString());
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -69,27 +59,4 @@ public final class UrlLinkFrame extends Id3Frame {
public String toString() {
return id + ": url=" + url;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(description);
dest.writeString(url);
}
public static final Parcelable.Creator<UrlLinkFrame> CREATOR =
new Parcelable.Creator<UrlLinkFrame>() {
@Override
public UrlLinkFrame createFromParcel(Parcel in) {
return new UrlLinkFrame(in);
}
@Override
public UrlLinkFrame[] newArray(int size) {
return new UrlLinkFrame[size];
}
};
}

View File

@ -16,8 +16,6 @@
package androidx.media3.extractor.metadata.mp4;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.C;
import androidx.media3.common.Metadata;
@ -59,14 +57,6 @@ public final class MotionPhotoMetadata implements Metadata.Entry {
this.videoSize = videoSize;
}
private MotionPhotoMetadata(Parcel in) {
photoStartPosition = in.readLong();
photoSize = in.readLong();
photoPresentationTimestampUs = in.readLong();
videoStartPosition = in.readLong();
videoSize = in.readLong();
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -107,34 +97,4 @@ public final class MotionPhotoMetadata implements Metadata.Entry {
+ ", videoSize="
+ videoSize;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(photoStartPosition);
dest.writeLong(photoSize);
dest.writeLong(photoPresentationTimestampUs);
dest.writeLong(videoStartPosition);
dest.writeLong(videoSize);
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<MotionPhotoMetadata> CREATOR =
new Parcelable.Creator<MotionPhotoMetadata>() {
@Override
public MotionPhotoMetadata createFromParcel(Parcel in) {
return new MotionPhotoMetadata(in);
}
@Override
public MotionPhotoMetadata[] newArray(int size) {
return new MotionPhotoMetadata[size];
}
};
}

View File

@ -17,15 +17,12 @@ package androidx.media3.extractor.metadata.mp4;
import static androidx.media3.common.util.Assertions.checkArgument;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.Metadata;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
import com.google.common.base.Objects;
import com.google.common.collect.ComparisonChain;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@ -34,7 +31,7 @@ import java.util.List;
public final class SlowMotionData implements Metadata.Entry {
/** Holds information about a single segment of slow motion playback within a track. */
public static final class Segment implements Parcelable {
public static final class Segment {
public static final Comparator<Segment> BY_START_THEN_END_THEN_DIVISOR =
(s1, s2) ->
@ -97,35 +94,6 @@ public final class SlowMotionData implements Metadata.Entry {
public int hashCode() {
return Objects.hashCode(startTimeMs, endTimeMs, speedDivisor);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(startTimeMs);
dest.writeLong(endTimeMs);
dest.writeInt(speedDivisor);
}
public static final Creator<Segment> CREATOR =
new Creator<Segment>() {
@Override
public Segment createFromParcel(Parcel in) {
long startTimeMs = in.readLong();
long endTimeMs = in.readLong();
int speedDivisor = in.readInt();
return new Segment(startTimeMs, endTimeMs, speedDivisor);
}
@Override
public Segment[] newArray(int size) {
return new Segment[size];
}
};
}
public final List<Segment> segments;
@ -163,31 +131,6 @@ public final class SlowMotionData implements Metadata.Entry {
return segments.hashCode();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(segments);
}
public static final Creator<SlowMotionData> CREATOR =
new Creator<SlowMotionData>() {
@Override
public SlowMotionData createFromParcel(Parcel in) {
List<Segment> slowMotionSegments = new ArrayList<>();
in.readList(slowMotionSegments, Segment.class.getClassLoader());
return new SlowMotionData(slowMotionSegments);
}
@Override
public SlowMotionData[] newArray(int size) {
return new SlowMotionData[size];
}
};
private static boolean doSegmentsOverlap(List<Segment> segments) {
if (segments.isEmpty()) {
return false;

View File

@ -15,8 +15,6 @@
*/
package androidx.media3.extractor.metadata.mp4;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.C;
import androidx.media3.common.Metadata;
@ -47,11 +45,6 @@ public final class SmtaMetadataEntry implements Metadata.Entry {
this.svcTemporalLayerCount = svcTemporalLayerCount;
}
private SmtaMetadataEntry(Parcel in) {
captureFrameRate = in.readFloat();
svcTemporalLayerCount = in.readInt();
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -80,31 +73,4 @@ public final class SmtaMetadataEntry implements Metadata.Entry {
+ ", svcTemporalLayerCount="
+ svcTemporalLayerCount;
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeFloat(captureFrameRate);
dest.writeInt(svcTemporalLayerCount);
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<SmtaMetadataEntry> CREATOR =
new Parcelable.Creator<SmtaMetadataEntry>() {
@Override
public SmtaMetadataEntry createFromParcel(Parcel in) {
return new SmtaMetadataEntry(in);
}
@Override
public SmtaMetadataEntry[] newArray(int size) {
return new SmtaMetadataEntry[size];
}
};
}

View File

@ -15,11 +15,8 @@
*/
package androidx.media3.extractor.metadata.scte35;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.media3.common.util.ParsableByteArray;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util;
/** Represents a private command as defined in SCTE35, Section 9.3.6. */
@UnstableApi
@ -40,12 +37,6 @@ public final class PrivateCommand extends SpliceCommand {
this.commandBytes = commandBytes;
}
private PrivateCommand(Parcel in) {
ptsAdjustment = in.readLong();
identifier = in.readLong();
commandBytes = Util.castNonNull(in.createByteArray());
}
/* package */ static PrivateCommand parseFromSection(
ParsableByteArray sectionData, int commandLength, long ptsAdjustment) {
long identifier = sectionData.readUnsignedInt();
@ -62,27 +53,4 @@ public final class PrivateCommand extends SpliceCommand {
+ identifier
+ " }";
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(ptsAdjustment);
dest.writeLong(identifier);
dest.writeByteArray(commandBytes);
}
public static final Parcelable.Creator<PrivateCommand> CREATOR =
new Parcelable.Creator<PrivateCommand>() {
@Override
public PrivateCommand createFromParcel(Parcel in) {
return new PrivateCommand(in);
}
@Override
public PrivateCommand[] newArray(int size) {
return new PrivateCommand[size];
}
};
}

View File

@ -26,11 +26,4 @@ public abstract class SpliceCommand implements Metadata.Entry {
public String toString() {
return "SCTE-35 splice command: type=" + getClass().getSimpleName();
}
// Parcelable implementation.
@Override
public int describeContents() {
return 0;
}
}

View File

@ -15,8 +15,6 @@
*/
package androidx.media3.extractor.metadata.scte35;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.media3.common.C;
import androidx.media3.common.util.ParsableByteArray;
import androidx.media3.common.util.TimestampAdjuster;
@ -119,27 +117,6 @@ public final class SpliceInsertCommand extends SpliceCommand {
this.availsExpected = availsExpected;
}
private SpliceInsertCommand(Parcel in) {
spliceEventId = in.readLong();
spliceEventCancelIndicator = in.readByte() == 1;
outOfNetworkIndicator = in.readByte() == 1;
programSpliceFlag = in.readByte() == 1;
spliceImmediateFlag = in.readByte() == 1;
programSplicePts = in.readLong();
programSplicePlaybackPositionUs = in.readLong();
int componentSpliceListSize = in.readInt();
List<ComponentSplice> componentSpliceList = new ArrayList<>(componentSpliceListSize);
for (int i = 0; i < componentSpliceListSize; i++) {
componentSpliceList.add(ComponentSplice.createFromParcel(in));
}
this.componentSpliceList = Collections.unmodifiableList(componentSpliceList);
autoReturn = in.readByte() == 1;
breakDurationUs = in.readLong();
uniqueProgramId = in.readInt();
availNum = in.readInt();
availsExpected = in.readInt();
}
/* package */ static SpliceInsertCommand parseFromSection(
ParsableByteArray sectionData, long ptsAdjustment, TimestampAdjuster timestampAdjuster) {
long spliceEventId = sectionData.readUnsignedInt();
@ -219,16 +196,6 @@ public final class SpliceInsertCommand extends SpliceCommand {
this.componentSplicePts = componentSplicePts;
this.componentSplicePlaybackPositionUs = componentSplicePlaybackPositionUs;
}
public void writeToParcel(Parcel dest) {
dest.writeInt(componentTag);
dest.writeLong(componentSplicePts);
dest.writeLong(componentSplicePlaybackPositionUs);
}
public static ComponentSplice createFromParcel(Parcel in) {
return new ComponentSplice(in.readInt(), in.readLong(), in.readLong());
}
}
@Override
@ -239,41 +206,4 @@ public final class SpliceInsertCommand extends SpliceCommand {
+ programSplicePlaybackPositionUs
+ " }";
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(spliceEventId);
dest.writeByte((byte) (spliceEventCancelIndicator ? 1 : 0));
dest.writeByte((byte) (outOfNetworkIndicator ? 1 : 0));
dest.writeByte((byte) (programSpliceFlag ? 1 : 0));
dest.writeByte((byte) (spliceImmediateFlag ? 1 : 0));
dest.writeLong(programSplicePts);
dest.writeLong(programSplicePlaybackPositionUs);
int componentSpliceListSize = componentSpliceList.size();
dest.writeInt(componentSpliceListSize);
for (int i = 0; i < componentSpliceListSize; i++) {
componentSpliceList.get(i).writeToParcel(dest);
}
dest.writeByte((byte) (autoReturn ? 1 : 0));
dest.writeLong(breakDurationUs);
dest.writeInt(uniqueProgramId);
dest.writeInt(availNum);
dest.writeInt(availsExpected);
}
public static final Parcelable.Creator<SpliceInsertCommand> CREATOR =
new Parcelable.Creator<SpliceInsertCommand>() {
@Override
public SpliceInsertCommand createFromParcel(Parcel in) {
return new SpliceInsertCommand(in);
}
@Override
public SpliceInsertCommand[] newArray(int size) {
return new SpliceInsertCommand[size];
}
};
}

View File

@ -15,31 +15,8 @@
*/
package androidx.media3.extractor.metadata.scte35;
import android.os.Parcel;
import androidx.media3.common.util.UnstableApi;
/** Represents a splice null command as defined in SCTE35, Section 9.3.1. */
@UnstableApi
public final class SpliceNullCommand extends SpliceCommand {
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
// Do nothing.
}
public static final Creator<SpliceNullCommand> CREATOR =
new Creator<SpliceNullCommand>() {
@Override
public SpliceNullCommand createFromParcel(Parcel in) {
return new SpliceNullCommand();
}
@Override
public SpliceNullCommand[] newArray(int size) {
return new SpliceNullCommand[size];
}
};
}
public final class SpliceNullCommand extends SpliceCommand {}

View File

@ -15,8 +15,6 @@
*/
package androidx.media3.extractor.metadata.scte35;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.media3.common.C;
import androidx.media3.common.util.ParsableByteArray;
import androidx.media3.common.util.UnstableApi;
@ -108,25 +106,6 @@ public final class SpliceScheduleCommand extends SpliceCommand {
this.availsExpected = availsExpected;
}
private Event(Parcel in) {
this.spliceEventId = in.readLong();
this.spliceEventCancelIndicator = in.readByte() == 1;
this.outOfNetworkIndicator = in.readByte() == 1;
this.programSpliceFlag = in.readByte() == 1;
int componentSpliceListLength = in.readInt();
ArrayList<ComponentSplice> componentSpliceList = new ArrayList<>(componentSpliceListLength);
for (int i = 0; i < componentSpliceListLength; i++) {
componentSpliceList.add(ComponentSplice.createFromParcel(in));
}
this.componentSpliceList = Collections.unmodifiableList(componentSpliceList);
this.utcSpliceTime = in.readLong();
this.autoReturn = in.readByte() == 1;
this.breakDurationUs = in.readLong();
this.uniqueProgramId = in.readInt();
this.availNum = in.readInt();
this.availsExpected = in.readInt();
}
private static Event parseFromSection(ParsableByteArray sectionData) {
long spliceEventId = sectionData.readUnsignedInt();
// splice_event_cancel_indicator(1), reserved(7).
@ -180,28 +159,6 @@ public final class SpliceScheduleCommand extends SpliceCommand {
availNum,
availsExpected);
}
private void writeToParcel(Parcel dest) {
dest.writeLong(spliceEventId);
dest.writeByte((byte) (spliceEventCancelIndicator ? 1 : 0));
dest.writeByte((byte) (outOfNetworkIndicator ? 1 : 0));
dest.writeByte((byte) (programSpliceFlag ? 1 : 0));
int componentSpliceListSize = componentSpliceList.size();
dest.writeInt(componentSpliceListSize);
for (int i = 0; i < componentSpliceListSize; i++) {
componentSpliceList.get(i).writeToParcel(dest);
}
dest.writeLong(utcSpliceTime);
dest.writeByte((byte) (autoReturn ? 1 : 0));
dest.writeLong(breakDurationUs);
dest.writeInt(uniqueProgramId);
dest.writeInt(availNum);
dest.writeInt(availsExpected);
}
private static Event createFromParcel(Parcel in) {
return new Event(in);
}
}
/** Holds splicing information for specific splice schedule command components. */
@ -214,15 +171,6 @@ public final class SpliceScheduleCommand extends SpliceCommand {
this.componentTag = componentTag;
this.utcSpliceTime = utcSpliceTime;
}
private static ComponentSplice createFromParcel(Parcel in) {
return new ComponentSplice(in.readInt(), in.readLong());
}
private void writeToParcel(Parcel dest) {
dest.writeInt(componentTag);
dest.writeLong(utcSpliceTime);
}
}
/** The list of scheduled events. */
@ -232,15 +180,6 @@ public final class SpliceScheduleCommand extends SpliceCommand {
this.events = Collections.unmodifiableList(events);
}
private SpliceScheduleCommand(Parcel in) {
int eventsSize = in.readInt();
ArrayList<Event> events = new ArrayList<>(eventsSize);
for (int i = 0; i < eventsSize; i++) {
events.add(Event.createFromParcel(in));
}
this.events = Collections.unmodifiableList(events);
}
/* package */ static SpliceScheduleCommand parseFromSection(ParsableByteArray sectionData) {
int spliceCount = sectionData.readUnsignedByte();
ArrayList<Event> events = new ArrayList<>(spliceCount);
@ -249,29 +188,4 @@ public final class SpliceScheduleCommand extends SpliceCommand {
}
return new SpliceScheduleCommand(events);
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
int eventsSize = events.size();
dest.writeInt(eventsSize);
for (int i = 0; i < eventsSize; i++) {
events.get(i).writeToParcel(dest);
}
}
public static final Parcelable.Creator<SpliceScheduleCommand> CREATOR =
new Parcelable.Creator<SpliceScheduleCommand>() {
@Override
public SpliceScheduleCommand createFromParcel(Parcel in) {
return new SpliceScheduleCommand(in);
}
@Override
public SpliceScheduleCommand[] newArray(int size) {
return new SpliceScheduleCommand[size];
}
};
}

View File

@ -15,7 +15,6 @@
*/
package androidx.media3.extractor.metadata.scte35;
import android.os.Parcel;
import androidx.media3.common.C;
import androidx.media3.common.util.ParsableByteArray;
import androidx.media3.common.util.TimestampAdjuster;
@ -72,26 +71,4 @@ public final class TimeSignalCommand extends SpliceCommand {
+ playbackPositionUs
+ " }";
}
// Parcelable implementation.
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(ptsTime);
dest.writeLong(playbackPositionUs);
}
public static final Creator<TimeSignalCommand> CREATOR =
new Creator<TimeSignalCommand>() {
@Override
public TimeSignalCommand createFromParcel(Parcel in) {
return new TimeSignalCommand(in.readLong(), in.readLong());
}
@Override
public TimeSignalCommand[] newArray(int size) {
return new TimeSignalCommand[size];
}
};
}

View File

@ -15,7 +15,6 @@
*/
package androidx.media3.extractor.metadata.vorbis;
import android.os.Parcel;
import androidx.media3.common.util.UnstableApi;
/** A vorbis comment, extracted from a FLAC or Ogg file. */
@ -30,22 +29,4 @@ public final class VorbisComment extends androidx.media3.extractor.metadata.flac
public VorbisComment(String key, String value) {
super(key, value);
}
/* package */ VorbisComment(Parcel in) {
super(in);
}
public static final Creator<VorbisComment> CREATOR =
new Creator<VorbisComment>() {
@Override
public VorbisComment createFromParcel(Parcel in) {
return new VorbisComment(in);
}
@Override
public VorbisComment[] newArray(int size) {
return new VorbisComment[size];
}
};
}

View File

@ -1,42 +0,0 @@
/*
* Copyright (C) 2017 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 androidx.media3.extractor.metadata.emsg;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link EventMessage}. */
@RunWith(AndroidJUnit4.class)
public final class EventMessageTest {
@Test
public void eventMessageParcelable() {
EventMessage eventMessage =
new EventMessage("urn:test", "123", 3000, 1000403, new byte[] {0, 1, 2, 3, 4});
// Write to parcel.
Parcel parcel = Parcel.obtain();
eventMessage.writeToParcel(parcel, 0);
// Create from parcel.
parcel.setDataPosition(0);
EventMessage fromParcelEventMessage = EventMessage.CREATOR.createFromParcel(parcel);
// Assert equals.
assertThat(fromParcelEventMessage).isEqualTo(eventMessage);
}
}

View File

@ -17,7 +17,6 @@ package androidx.media3.extractor.metadata.flac;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Metadata;
import androidx.media3.common.MimeTypes;
@ -28,21 +27,6 @@ import org.junit.runner.RunWith;
/** Test for {@link PictureFrame}. */
@RunWith(AndroidJUnit4.class)
public final class PictureFrameTest {
@Test
public void parcelable() {
PictureFrame pictureFrameToParcel = new PictureFrame(0, "", "", 0, 0, 0, 0, new byte[0]);
Parcel parcel = Parcel.obtain();
pictureFrameToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
PictureFrame pictureFrameFromParcel = PictureFrame.CREATOR.createFromParcel(parcel);
assertThat(pictureFrameFromParcel).isEqualTo(pictureFrameToParcel);
parcel.recycle();
}
@Test
public void populateMediaMetadata_setsBuilderValues() {
byte[] pictureData = new byte[] {-12, 52, 33, 85, 34, 22, 1, -55};

View File

@ -17,7 +17,6 @@ package androidx.media3.extractor.metadata.icy;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.media3.common.MediaMetadata;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
@ -26,27 +25,6 @@ import org.junit.runner.RunWith;
/** Test for {@link IcyHeaders}. */
@RunWith(AndroidJUnit4.class)
public final class IcyHeadersTest {
@Test
public void parcelEquals() {
IcyHeaders icyHeaders =
new IcyHeaders(
/* bitrate= */ 1234,
"genre",
"name",
"url",
/* isPublic= */ true,
/* metadataInterval= */ 5678);
// Write to parcel.
Parcel parcel = Parcel.obtain();
icyHeaders.writeToParcel(parcel, 0);
// Create from parcel.
parcel.setDataPosition(0);
IcyHeaders fromParcelIcyHeaders = IcyHeaders.CREATOR.createFromParcel(parcel);
// Assert equals.
assertThat(fromParcelIcyHeaders).isEqualTo(icyHeaders);
}
@Test
public void populateMediaMetadata() {
IcyHeaders headers =

View File

@ -1,43 +0,0 @@
/*
* Copyright (C) 2018 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 androidx.media3.extractor.metadata.icy;
import static com.google.common.truth.Truth.assertThat;
import static java.nio.charset.StandardCharsets.UTF_8;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link IcyInfo}. */
@RunWith(AndroidJUnit4.class)
public final class IcyInfoTest {
@Test
public void parcelEquals() {
IcyInfo streamInfo =
new IcyInfo("StreamName='name';StreamUrl='url'".getBytes(UTF_8), "name", "url");
// Write to parcel.
Parcel parcel = Parcel.obtain();
streamInfo.writeToParcel(parcel, 0);
// Create from parcel.
parcel.setDataPosition(0);
IcyInfo fromParcelStreamInfo = IcyInfo.CREATOR.createFromParcel(parcel);
// Assert equals.
assertThat(fromParcelStreamInfo).isEqualTo(streamInfo);
}
}

View File

@ -17,7 +17,6 @@ package androidx.media3.extractor.metadata.id3;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Metadata;
import androidx.media3.common.MimeTypes;
@ -28,21 +27,6 @@ import org.junit.runner.RunWith;
/** Unit test for {@link ApicFrame}. */
@RunWith(AndroidJUnit4.class)
public class ApicFrameTest {
@Test
public void parcelable() {
ApicFrame apicFrameToParcel = new ApicFrame("", "", 0, new byte[0]);
Parcel parcel = Parcel.obtain();
apicFrameToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
ApicFrame apicFrameFromParcel = ApicFrame.CREATOR.createFromParcel(parcel);
assertThat(apicFrameFromParcel).isEqualTo(apicFrameToParcel);
parcel.recycle();
}
@Test
public void populateMediaMetadata_setsBuilderValues() {
byte[] pictureData = new byte[] {-12, 52, 33, 85, 34, 22, 1, -55};

View File

@ -1,48 +0,0 @@
/*
* Copyright (C) 2017 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 androidx.media3.extractor.metadata.id3;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link ChapterFrame}. */
@RunWith(AndroidJUnit4.class)
public final class ChapterFrameTest {
@Test
public void parcelable() {
Id3Frame[] subFrames =
new Id3Frame[] {
new TextInformationFrame("TIT2", null, ImmutableList.of("title")),
new UrlLinkFrame("WXXX", "description", "url")
};
ChapterFrame chapterFrameToParcel = new ChapterFrame("id", 0, 1, 2, 3, subFrames);
Parcel parcel = Parcel.obtain();
chapterFrameToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
ChapterFrame chapterFrameFromParcel = ChapterFrame.CREATOR.createFromParcel(parcel);
assertThat(chapterFrameFromParcel).isEqualTo(chapterFrameToParcel);
parcel.recycle();
}
}

View File

@ -1,50 +0,0 @@
/*
* Copyright (C) 2017 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 androidx.media3.extractor.metadata.id3;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link ChapterTocFrame}. */
@RunWith(AndroidJUnit4.class)
public final class ChapterTocFrameTest {
@Test
public void parcelable() {
String[] children = new String[] {"child0", "child1"};
Id3Frame[] subFrames =
new Id3Frame[] {
new TextInformationFrame("TIT2", null, ImmutableList.of("title")),
new UrlLinkFrame("WXXX", "description", "url")
};
ChapterTocFrame chapterTocFrameToParcel =
new ChapterTocFrame("id", false, true, children, subFrames);
Parcel parcel = Parcel.obtain();
chapterTocFrameToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
ChapterTocFrame chapterTocFrameFromParcel = ChapterTocFrame.CREATOR.createFromParcel(parcel);
assertThat(chapterTocFrameFromParcel).isEqualTo(chapterTocFrameToParcel);
parcel.recycle();
}
}

View File

@ -1,48 +0,0 @@
/*
* Copyright (C) 2018 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 androidx.media3.extractor.metadata.id3;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link MlltFrame}. */
@RunWith(AndroidJUnit4.class)
public final class MlltFrameTest {
@Test
public void parcelable() {
MlltFrame mlltFrameToParcel =
new MlltFrame(
/* mpegFramesBetweenReference= */ 1,
/* bytesBetweenReference= */ 1,
/* millisecondsBetweenReference= */ 1,
/* bytesDeviations= */ new int[] {1, 2},
/* millisecondsDeviations= */ new int[] {1, 2});
Parcel parcel = Parcel.obtain();
mlltFrameToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
MlltFrame mlltFrameFromParcel = MlltFrame.CREATOR.createFromParcel(parcel);
assertThat(mlltFrameFromParcel).isEqualTo(mlltFrameToParcel);
parcel.recycle();
}
}

View File

@ -18,7 +18,6 @@ package androidx.media3.extractor.metadata.id3;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
import android.os.Parcel;
import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Metadata;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@ -30,23 +29,6 @@ import org.junit.runner.RunWith;
/** Unit test for {@link TextInformationFrame}. */
@RunWith(AndroidJUnit4.class)
public class TextInformationFrameTest {
@Test
public void parcelable() {
TextInformationFrame textInformationFrameToParcel =
new TextInformationFrame("", "", ImmutableList.of(""));
Parcel parcel = Parcel.obtain();
textInformationFrameToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
TextInformationFrame textInformationFrameFromParcel =
TextInformationFrame.CREATOR.createFromParcel(parcel);
assertThat(textInformationFrameFromParcel).isEqualTo(textInformationFrameToParcel);
parcel.recycle();
}
@Test
public void populateMediaMetadata_setsBuilderValues() {
String title = "the title";

View File

@ -1,51 +0,0 @@
/*
* Copyright 2020 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 androidx.media3.extractor.metadata.mp4;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.media3.common.C;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link MotionPhotoMetadata}. */
@RunWith(AndroidJUnit4.class)
public class MotionPhotoMetadataTest {
@Test
public void parcelable() {
MotionPhotoMetadata motionPhotoMetadataToParcel =
new MotionPhotoMetadata(
/* photoStartPosition= */ 0,
/* photoSize= */ 10,
/* photoPresentationTimestampUs= */ C.TIME_UNSET,
/* videoStartPosition= */ 15,
/* videoSize= */ 35);
Parcel parcel = Parcel.obtain();
motionPhotoMetadataToParcel.writeToParcel(parcel, /* flags= */ 0);
parcel.setDataPosition(0);
MotionPhotoMetadata motionPhotoMetadataFromParcel =
MotionPhotoMetadata.CREATOR.createFromParcel(parcel);
assertThat(motionPhotoMetadataFromParcel).isEqualTo(motionPhotoMetadataToParcel);
parcel.recycle();
}
}

View File

@ -1,44 +0,0 @@
/*
* Copyright 2020 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 androidx.media3.extractor.metadata.mp4;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Test for {@link SmtaMetadataEntry}. */
@RunWith(AndroidJUnit4.class)
public class SmtaMetadataEntryTest {
@Test
public void parcelable() {
SmtaMetadataEntry smtaMetadataEntryToParcel =
new SmtaMetadataEntry(/* captureFrameRate= */ 120, /* svcTemporalLayerCount= */ 4);
Parcel parcel = Parcel.obtain();
smtaMetadataEntryToParcel.writeToParcel(parcel, /* flags= */ 0);
parcel.setDataPosition(0);
SmtaMetadataEntry smtaMetadataEntryFromParcel =
SmtaMetadataEntry.CREATOR.createFromParcel(parcel);
assertThat(smtaMetadataEntryFromParcel).isEqualTo(smtaMetadataEntryToParcel);
parcel.recycle();
}
}

View File

@ -17,7 +17,6 @@ package androidx.media3.extractor.metadata.vorbis;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Metadata;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@ -29,21 +28,6 @@ import org.junit.runner.RunWith;
/** Test for {@link VorbisComment}. */
@RunWith(AndroidJUnit4.class)
public final class VorbisCommentTest {
@Test
public void parcelable() {
VorbisComment vorbisCommentFrameToParcel = new VorbisComment("key", "value");
Parcel parcel = Parcel.obtain();
vorbisCommentFrameToParcel.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
VorbisComment vorbisCommentFrameFromParcel = VorbisComment.CREATOR.createFromParcel(parcel);
assertThat(vorbisCommentFrameFromParcel).isEqualTo(vorbisCommentFrameToParcel);
parcel.recycle();
}
@Test
public void populateMediaMetadata_setsMediaMetadataValues() {
String title = "the title";

View File

@ -1,72 +0,0 @@
/*
* Copyright 2020 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 androidx.media3.extractor.mp4;
import static com.google.common.truth.Truth.assertThat;
import android.os.Parcel;
import androidx.media3.extractor.metadata.mp4.SlowMotionData;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
/** Unit test for {@link SlowMotionData} */
@RunWith(AndroidJUnit4.class)
public class SlowMotionDataTest {
@Test
public void parcelable() {
List<SlowMotionData.Segment> segments = new ArrayList<>();
segments.add(
new SlowMotionData.Segment(
/* startTimeMs= */ 1000, /* endTimeMs= */ 2000, /* speedDivisor= */ 4));
segments.add(
new SlowMotionData.Segment(
/* startTimeMs= */ 2600, /* endTimeMs= */ 4000, /* speedDivisor= */ 8));
segments.add(
new SlowMotionData.Segment(
/* startTimeMs= */ 8765, /* endTimeMs= */ 12485, /* speedDivisor= */ 16));
SlowMotionData slowMotionDataToParcel = new SlowMotionData(segments);
Parcel parcel = Parcel.obtain();
slowMotionDataToParcel.writeToParcel(parcel, /* flags= */ 0);
parcel.setDataPosition(0);
SlowMotionData slowMotionDataFromParcel = SlowMotionData.CREATOR.createFromParcel(parcel);
assertThat(slowMotionDataFromParcel).isEqualTo(slowMotionDataToParcel);
parcel.recycle();
}
@Test
public void segment_parcelable() {
SlowMotionData.Segment segmentToParcel =
new SlowMotionData.Segment(
/* startTimeMs= */ 1000, /* endTimeMs= */ 2000, /* speedDivisor= */ 4);
Parcel parcel = Parcel.obtain();
segmentToParcel.writeToParcel(parcel, /* flags= */ 0);
parcel.setDataPosition(0);
SlowMotionData.Segment segmentFromParcel =
SlowMotionData.Segment.CREATOR.createFromParcel(parcel);
assertThat(segmentFromParcel).isEqualTo(segmentToParcel);
parcel.recycle();
}
}

View File

@ -15,10 +15,6 @@
*/
package androidx.media3.test.utils;
import static androidx.media3.common.util.Util.castNonNull;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Nullable;
import androidx.media3.common.Metadata;
import androidx.media3.common.util.UnstableApi;
@ -33,15 +29,6 @@ public final class FakeMetadataEntry implements Metadata.Entry {
this.data = data;
}
/* package */ FakeMetadataEntry(Parcel in) {
data = castNonNull(in.readString());
}
@Override
public int describeContents() {
return 0;
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
@ -58,23 +45,4 @@ public final class FakeMetadataEntry implements Metadata.Entry {
public int hashCode() {
return data.hashCode();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(data);
}
public static final Parcelable.Creator<FakeMetadataEntry> CREATOR =
new Parcelable.Creator<FakeMetadataEntry>() {
@Override
public FakeMetadataEntry createFromParcel(Parcel in) {
return new FakeMetadataEntry(in);
}
@Override
public FakeMetadataEntry[] newArray(int size) {
return new FakeMetadataEntry[size];
}
};
}