From d2105204e1f2344d6eff5bf3732f1becdf59c4eb Mon Sep 17 00:00:00 2001 From: samrobinson Date: Wed, 21 Jun 2023 09:43:05 +0000 Subject: [PATCH] Propagate `Metadata` from extracted `Format` to decoded `Format`. MediaCodec does not retain the `Metadata` of its input `Format`, so add it to the output `Format`. PiperOrigin-RevId: 542194322 --- .../java/androidx/media3/transformer/DefaultCodec.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java index dda340e855..08c3ec9ed5 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java @@ -34,6 +34,7 @@ import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; import androidx.media3.common.C; import androidx.media3.common.Format; +import androidx.media3.common.Metadata; import androidx.media3.common.MimeTypes; import androidx.media3.common.util.Log; import androidx.media3.common.util.MediaFormatUtil; @@ -344,7 +345,8 @@ public final class DefaultCodec implements Codec { } if (outputBufferIndex < 0) { if (outputBufferIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { - outputFormat = convertToFormat(mediaCodec.getOutputFormat(), isDecoder); + outputFormat = + convertToFormat(mediaCodec.getOutputFormat(), isDecoder, configurationFormat.metadata); } return false; } @@ -395,9 +397,10 @@ public final class DefaultCodec implements Codec { return ExportException.createForCodec(cause, errorCode, isVideo, isDecoder, codecDetails); } - private static Format convertToFormat(MediaFormat mediaFormat, boolean isDecoder) { + private static Format convertToFormat( + MediaFormat mediaFormat, boolean isDecoder, @Nullable Metadata metadata) { Format.Builder formatBuilder = - MediaFormatUtil.createFormatFromMediaFormat(mediaFormat).buildUpon(); + MediaFormatUtil.createFormatFromMediaFormat(mediaFormat).buildUpon().setMetadata(metadata); if (isDecoder) { // TODO(b/178685617): Restrict this to only set the PCM encoding for audio/raw once we have // a way to simulate more realistic codec input/output formats in tests.