From 3264cb8271b8fc4d53fbfb7ec155f09f196f1431 Mon Sep 17 00:00:00 2001 From: samrobinson Date: Tue, 7 Mar 2023 01:40:04 +0000 Subject: [PATCH] Pass Metadata to Muxer when adding a track. PiperOrigin-RevId: 514575400 --- .../assets/transformerdumps/mp4/sample.mp4.48000hz.dump | 1 + ...ample.mp4.concatenated_with_high_pitch_and_no_video.dump | 1 + .../transformerdumps/mp4/sample_sef_slow_motion.mp4.dump | 1 + .../androidx/media3/transformer/AudioSamplePipeline.java | 2 +- .../java/androidx/media3/transformer/SamplePipeline.java | 6 ++++++ 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample.mp4.48000hz.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample.mp4.48000hz.dump index c366457b5a..8a9b380e25 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample.mp4.48000hz.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample.mp4.48000hz.dump @@ -14,6 +14,7 @@ format 1: channelCount = 1 sampleRate = 48000 pcmEncoding = 2 + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]] sample: trackIndex = 1 dataHashCode = 1868041800 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated_with_high_pitch_and_no_video.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated_with_high_pitch_and_no_video.dump index 56ee4a8494..286f255ada 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated_with_high_pitch_and_no_video.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated_with_high_pitch_and_no_video.dump @@ -3,6 +3,7 @@ format 0: channelCount = 1 sampleRate = 44100 pcmEncoding = 2 + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]] sample: trackIndex = 0 dataHashCode = 915609509 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump index bdbbafc031..4b1421cf36 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump @@ -15,6 +15,7 @@ format 1: channelCount = 2 sampleRate = 12000 pcmEncoding = 2 + metadata = entries=[smta: captureFrameRate=240.0, svcTemporalLayerCount=4, SlowMotion: segments=[Segment: startTimeMs=88, endTimeMs=879, speedDivisor=2, Segment: startTimeMs=1255, endTimeMs=1970, speedDivisor=8]] sample: trackIndex = 1 dataHashCode = -212376212 diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioSamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioSamplePipeline.java index cab903f78c..4cf654a673 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioSamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioSamplePipeline.java @@ -70,7 +70,7 @@ import org.checkerframework.dataflow.qual.Pure; MuxerWrapper muxerWrapper, FallbackListener fallbackListener) throws ExportException { - super(firstPipelineInputFormat, /* streamStartPositionUs= */ streamOffsetUs, muxerWrapper); + super(firstAssetLoaderInputFormat, /* streamStartPositionUs= */ streamOffsetUs, muxerWrapper); silentAudioGenerator = new SilentAudioGenerator(firstPipelineInputFormat); availableInputBuffers = new ConcurrentLinkedDeque<>(); diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java index 52a663ee88..ff64e03ca5 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java @@ -27,6 +27,7 @@ import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.ColorInfo; import androidx.media3.common.Format; +import androidx.media3.common.Metadata; import androidx.media3.common.MimeTypes; import androidx.media3.decoder.DecoderInputBuffer; import com.google.common.collect.ImmutableList; @@ -49,6 +50,7 @@ import java.util.List; private final long streamStartPositionUs; private final MuxerWrapper muxerWrapper; private final @C.TrackType int outputTrackType; + @Nullable private final Metadata metadata; private boolean muxerWrapperTrackAdded; @@ -56,6 +58,7 @@ import java.util.List; Format firstInputFormat, long streamStartPositionUs, MuxerWrapper muxerWrapper) { this.streamStartPositionUs = streamStartPositionUs; this.muxerWrapper = muxerWrapper; + this.metadata = firstInputFormat.metadata; outputTrackType = getProcessedTrackType(firstInputFormat.sampleMimeType); } @@ -94,6 +97,9 @@ import java.util.List; if (inputFormat == null) { return false; } + if (metadata != null) { + inputFormat = inputFormat.buildUpon().setMetadata(metadata).build(); + } try { muxerWrapper.addTrackFormat(inputFormat); } catch (Muxer.MuxerException e) {