Skip to content

Commit

Permalink
Exclude Metadata from Format when bundling from TrackGroup
Browse files Browse the repository at this point in the history
#minor-release

PiperOrigin-RevId: 463062454
  • Loading branch information
marcbaechinger authored and tonihei committed Aug 8, 2022
1 parent 30e5bc9 commit 8ce3d4d
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 8 deletions.
17 changes: 13 additions & 4 deletions libraries/common/src/main/java/androidx/media3/common/Format.java
Original file line number Diff line number Diff line change
Expand Up @@ -1547,6 +1547,15 @@ public static String toLogString(@Nullable Format format) {
@UnstableApi
@Override
public Bundle toBundle() {
return toBundle(/* excludeMetadata= */ false);
}

/**
* Returns a {@link Bundle} representing the information stored in this object. If {@code
* excludeMetadata} is true, {@linkplain Format#metadata metadata} is excluded.
*/
@UnstableApi
public Bundle toBundle(boolean excludeMetadata) {
Bundle bundle = new Bundle();
bundle.putString(keyForField(FIELD_ID), id);
bundle.putString(keyForField(FIELD_LABEL), label);
Expand All @@ -1556,10 +1565,10 @@ public Bundle toBundle() {
bundle.putInt(keyForField(FIELD_AVERAGE_BITRATE), averageBitrate);
bundle.putInt(keyForField(FIELD_PEAK_BITRATE), peakBitrate);
bundle.putString(keyForField(FIELD_CODECS), codecs);
// Metadata is currently not Bundleable because Metadata.Entry is an Interface,
// which would be difficult to unbundle in a backward compatible way.
// The entries are additionally of limited usefulness to remote processes.
bundle.putParcelable(keyForField(FIELD_METADATA), metadata);
if (!excludeMetadata) {
// TODO (internal ref: b/239701618)
bundle.putParcelable(keyForField(FIELD_METADATA), metadata);
}
// Container specific.
bundle.putString(keyForField(FIELD_CONTAINER_MIME_TYPE), containerMimeType);
// Sample specific.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@
import androidx.media3.common.util.Log;
import androidx.media3.common.util.UnstableApi;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

Expand Down Expand Up @@ -179,8 +179,11 @@ public boolean equals(@Nullable Object obj) {
@Override
public Bundle toBundle() {
Bundle bundle = new Bundle();
bundle.putParcelableArrayList(
keyForField(FIELD_FORMATS), BundleableUtil.toBundleArrayList(Lists.newArrayList(formats)));
ArrayList<Bundle> arrayList = new ArrayList<>(formats.length);
for (Format format : formats) {
arrayList.add(format.toBundle(/* excludeMetadata= */ true));
}
bundle.putParcelableArrayList(keyForField(FIELD_FORMATS), arrayList);
bundle.putString(keyForField(FIELD_ID), id);
return bundle;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import static androidx.media3.common.MimeTypes.VIDEO_WEBM;
import static com.google.common.truth.Truth.assertThat;

import android.os.Bundle;
import androidx.media3.test.utils.FakeMetadataEntry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import java.util.ArrayList;
Expand All @@ -46,6 +47,16 @@ public void roundTripViaBundle_ofParameters_yieldsEqualInstance() {
assertThat(formatFromBundle).isEqualTo(formatToBundle);
}

@Test
public void roundTripViaBundle_excludeMetadata_hasMetadataExcluded() {
Format format = createTestFormat();

Bundle bundleWithMetadataExcluded = format.toBundle(/* excludeMetadata= */ true);

Format formatWithMetadataExcluded = Format.CREATOR.fromBundle(bundleWithMetadataExcluded);
assertThat(formatWithMetadataExcluded).isEqualTo(format.buildUpon().setMetadata(null).build());
}

private static Format createTestFormat() {
byte[] initData1 = new byte[] {1, 2, 3};
byte[] initData2 = new byte[] {4, 5, 6};
Expand All @@ -60,7 +71,6 @@ private static Format createTestFormat() {
DrmInitData drmInitData = new DrmInitData(drmData1, drmData2);

byte[] projectionData = new byte[] {1, 2, 3};

Metadata metadata = new Metadata(new FakeMetadataEntry("id1"), new FakeMetadataEntry("id2"));

ColorInfo colorInfo =
Expand Down

0 comments on commit 8ce3d4d

Please sign in to comment.