mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Do not bundle metadata when creating Format bundle
Metadata does not provide a `toBundle` method. It implements `Parcelable` which 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 as well, then the `Metadata` class needs to provide a `toBundle()` method. PiperOrigin-RevId: 705920231
This commit is contained in:
parent
36466cf883
commit
1326a92350
@ -3,6 +3,8 @@
|
|||||||
### Unreleased changes
|
### Unreleased changes
|
||||||
|
|
||||||
* Common Library:
|
* Common Library:
|
||||||
|
* Remove `Format.toBundle(boolean excludeMetadata)` method, use
|
||||||
|
`Format.toBundle()` instead.
|
||||||
* ExoPlayer:
|
* ExoPlayer:
|
||||||
* Consider language when selecting a video track. By default select a
|
* Consider language when selecting a video track. By default select a
|
||||||
'main' video track that matches the language of the selected audio
|
'main' video track that matches the language of the selected audio
|
||||||
|
@ -1496,7 +1496,8 @@ public final class Format {
|
|||||||
private static final String FIELD_AVERAGE_BITRATE = Util.intToStringMaxRadix(5);
|
private static final String FIELD_AVERAGE_BITRATE = Util.intToStringMaxRadix(5);
|
||||||
private static final String FIELD_PEAK_BITRATE = Util.intToStringMaxRadix(6);
|
private static final String FIELD_PEAK_BITRATE = Util.intToStringMaxRadix(6);
|
||||||
private static final String FIELD_CODECS = Util.intToStringMaxRadix(7);
|
private static final String FIELD_CODECS = Util.intToStringMaxRadix(7);
|
||||||
private static final String FIELD_METADATA = Util.intToStringMaxRadix(8);
|
// Do not reuse this key.
|
||||||
|
private static final String UNUSED_FIELD_METADATA = Util.intToStringMaxRadix(8);
|
||||||
private static final String FIELD_CONTAINER_MIME_TYPE = Util.intToStringMaxRadix(9);
|
private static final String FIELD_CONTAINER_MIME_TYPE = Util.intToStringMaxRadix(9);
|
||||||
private static final String FIELD_SAMPLE_MIME_TYPE = Util.intToStringMaxRadix(10);
|
private static final String FIELD_SAMPLE_MIME_TYPE = Util.intToStringMaxRadix(10);
|
||||||
private static final String FIELD_MAX_INPUT_SIZE = Util.intToStringMaxRadix(11);
|
private static final String FIELD_MAX_INPUT_SIZE = Util.intToStringMaxRadix(11);
|
||||||
@ -1523,21 +1524,12 @@ public final class Format {
|
|||||||
private static final String FIELD_LABELS = Util.intToStringMaxRadix(32);
|
private static final String FIELD_LABELS = Util.intToStringMaxRadix(32);
|
||||||
private static final String FIELD_AUXILIARY_TRACK_TYPE = Util.intToStringMaxRadix(33);
|
private static final String FIELD_AUXILIARY_TRACK_TYPE = Util.intToStringMaxRadix(33);
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use {@link #toBundle(boolean)} instead.
|
|
||||||
*/
|
|
||||||
@UnstableApi
|
|
||||||
@Deprecated
|
|
||||||
public Bundle toBundle() {
|
|
||||||
return toBundle(/* excludeMetadata= */ false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a {@link Bundle} representing the information stored in this object. If {@code
|
* Returns a {@link Bundle} representing the information stored in this object. If {@code
|
||||||
* excludeMetadata} is true, {@linkplain Format#metadata metadata} is excluded.
|
* excludeMetadata} is true, {@linkplain Format#metadata metadata} is excluded.
|
||||||
*/
|
*/
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public Bundle toBundle(boolean excludeMetadata) {
|
public Bundle toBundle() {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString(FIELD_ID, id);
|
bundle.putString(FIELD_ID, id);
|
||||||
bundle.putString(FIELD_LABEL, label);
|
bundle.putString(FIELD_LABEL, label);
|
||||||
@ -1552,10 +1544,7 @@ public final class Format {
|
|||||||
bundle.putInt(FIELD_AVERAGE_BITRATE, averageBitrate);
|
bundle.putInt(FIELD_AVERAGE_BITRATE, averageBitrate);
|
||||||
bundle.putInt(FIELD_PEAK_BITRATE, peakBitrate);
|
bundle.putInt(FIELD_PEAK_BITRATE, peakBitrate);
|
||||||
bundle.putString(FIELD_CODECS, codecs);
|
bundle.putString(FIELD_CODECS, codecs);
|
||||||
if (!excludeMetadata) {
|
// The metadata does not implement toBundle() method, hence can not be added.
|
||||||
// TODO (internal ref: b/239701618)
|
|
||||||
bundle.putParcelable(FIELD_METADATA, metadata);
|
|
||||||
}
|
|
||||||
// Container specific.
|
// Container specific.
|
||||||
bundle.putString(FIELD_CONTAINER_MIME_TYPE, containerMimeType);
|
bundle.putString(FIELD_CONTAINER_MIME_TYPE, containerMimeType);
|
||||||
// Sample specific.
|
// Sample specific.
|
||||||
@ -1618,7 +1607,6 @@ public final class Format {
|
|||||||
.setAverageBitrate(bundle.getInt(FIELD_AVERAGE_BITRATE, DEFAULT.averageBitrate))
|
.setAverageBitrate(bundle.getInt(FIELD_AVERAGE_BITRATE, DEFAULT.averageBitrate))
|
||||||
.setPeakBitrate(bundle.getInt(FIELD_PEAK_BITRATE, DEFAULT.peakBitrate))
|
.setPeakBitrate(bundle.getInt(FIELD_PEAK_BITRATE, DEFAULT.peakBitrate))
|
||||||
.setCodecs(defaultIfNull(bundle.getString(FIELD_CODECS), DEFAULT.codecs))
|
.setCodecs(defaultIfNull(bundle.getString(FIELD_CODECS), DEFAULT.codecs))
|
||||||
.setMetadata(defaultIfNull(bundle.getParcelable(FIELD_METADATA), DEFAULT.metadata))
|
|
||||||
// Container specific.
|
// Container specific.
|
||||||
.setContainerMimeType(
|
.setContainerMimeType(
|
||||||
defaultIfNull(bundle.getString(FIELD_CONTAINER_MIME_TYPE), DEFAULT.containerMimeType))
|
defaultIfNull(bundle.getString(FIELD_CONTAINER_MIME_TYPE), DEFAULT.containerMimeType))
|
||||||
|
@ -169,7 +169,7 @@ public final class TrackGroup {
|
|||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
ArrayList<Bundle> arrayList = new ArrayList<>(formats.length);
|
ArrayList<Bundle> arrayList = new ArrayList<>(formats.length);
|
||||||
for (Format format : formats) {
|
for (Format format : formats) {
|
||||||
arrayList.add(format.toBundle(/* excludeMetadata= */ true));
|
arrayList.add(format.toBundle());
|
||||||
}
|
}
|
||||||
bundle.putParcelableArrayList(FIELD_FORMATS, arrayList);
|
bundle.putParcelableArrayList(FIELD_FORMATS, arrayList);
|
||||||
bundle.putString(FIELD_ID, id);
|
bundle.putString(FIELD_ID, id);
|
||||||
|
@ -43,22 +43,10 @@ public final class FormatTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void roundTripViaBundle_includeMetadata_includesAllBundledFields() {
|
public void roundTripViaBundle_includesAllBundledFieldsExceptMetadata() {
|
||||||
Format formatToBundle = createTestFormat();
|
|
||||||
|
|
||||||
Format formatFromBundle =
|
|
||||||
Format.fromBundle(formatToBundle.toBundle(/* excludeMetadata= */ false));
|
|
||||||
|
|
||||||
// Expect all data to be bundled except the custom data.
|
|
||||||
Format expectedRoundTripFormat = formatToBundle.buildUpon().setCustomData(null).build();
|
|
||||||
assertThat(formatFromBundle).isEqualTo(expectedRoundTripFormat);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void roundTripViaBundle_excludeMetadata_includesAllBundledFieldsExceptMetadata() {
|
|
||||||
Format format = createTestFormat();
|
Format format = createTestFormat();
|
||||||
|
|
||||||
Format formatFromBundle = Format.fromBundle(format.toBundle(/* excludeMetadata= */ true));
|
Format formatFromBundle = Format.fromBundle(format.toBundle());
|
||||||
|
|
||||||
// Expect all data to be bundled except the custom data and metadata.
|
// Expect all data to be bundled except the custom data and metadata.
|
||||||
Format expectedRoundTripFormat =
|
Format expectedRoundTripFormat =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user