From 45c42ed3733bdb31bbaab0f63f207c2ddbb42f8b Mon Sep 17 00:00:00 2001 From: kimvde Date: Wed, 8 Feb 2023 11:13:37 +0000 Subject: [PATCH] Add an API entry point to pass a Composition PiperOrigin-RevId: 508031337 --- .../exoplayer2/transformer/Transformer.java | 98 +- .../transformer/TransformerEndToEndTest.java | 48 + .../mp4/sample.mp4.concatenated.dump | 924 ++++++++++++++++++ ...mple.mp4.silence_skipped_concatenated.dump | 546 +++++++++++ 4 files changed, 1592 insertions(+), 24 deletions(-) create mode 100644 testdata/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated.dump create mode 100644 testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silence_skipped_concatenated.dump diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java index 079bd286d8..2947d9f160 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java @@ -16,6 +16,7 @@ package com.google.android.exoplayer2.transformer; +import static com.google.android.exoplayer2.util.Assertions.checkArgument; import static com.google.android.exoplayer2.util.Assertions.checkState; import static java.lang.annotation.ElementType.TYPE_USE; @@ -674,38 +675,55 @@ public final class Transformer { } /** - * Starts an asynchronous operation to export the given {@link EditedMediaItem}. + * Starts an asynchronous operation to export the given {@link Composition}. + * + *

This method is under implementation. Concatenating audio/video inputs with the same format + * and the same {@link Effects} applied is the only supported use case. More precisely: + * + *

* *

The export state is notified through the {@linkplain Builder#addListener(Listener) * listener}. * *

Concurrent exports on the same Transformer object are not allowed. * - *

If no custom {@link Muxer.Factory} is specified, the output is an MP4 file. + *

If no custom {@link Transformer.Builder#setMuxerFactory(Muxer.Factory) Muxer.Factory} is + * specified, the output is an MP4 file. * *

The output can contain at most one video track and one audio track. Other track types are - * ignored. For adaptive bitrate, if no custom {@link AssetLoader.Factory} is specified, the - * highest bitrate video and audio streams are selected. + * ignored. For adaptive bitrate inputs, if no custom {@link + * Transformer.Builder#setAssetLoaderFactory(AssetLoader.Factory) AssetLoader.Factory} is + * specified, the highest bitrate video and audio streams are selected. * - *

If encoding the output's video track is needed, the output frames' dimensions will be - * swapped if the height is larger than the width. This is to improve compatibility among - * different device encoders. + *

If exporting the video track entails transcoding, the output frames' dimensions will be + * swapped if the output video's height is larger than the width. This is to improve compatibility + * among different device encoders. * - * @param editedMediaItem The {@link MediaItem} to export, with the transformations to apply to - * it. + * @param composition The {@link Composition} to export. * @param path The path to the output file. - * @throws IllegalArgumentException If the path is invalid. * @throws IllegalStateException If this method is called from the wrong thread. * @throws IllegalStateException If an export is already in progress. */ - public void start(EditedMediaItem editedMediaItem, String path) { + public void start(Composition composition, String path) { + checkArgument(composition.sequences.size() == 1); + checkArgument(composition.effects == Effects.EMPTY); verifyApplicationThread(); - if (transformerInternal != null) { - throw new IllegalStateException("There is already a export in progress."); - } - EditedMediaItemSequence sequence = - new EditedMediaItemSequence(ImmutableList.of(editedMediaItem)); - Composition composition = new Composition(ImmutableList.of(sequence), Effects.EMPTY); + checkState(transformerInternal == null, "There is already a export in progress."); + TransformerInternalListener transformerInternalListener = new TransformerInternalListener(composition); HandlerWrapper applicationHandler = clock.createHandler(looper, /* callback= */ null); @@ -729,6 +747,37 @@ public final class Transformer { transformerInternal.start(); } + /** + * Starts an asynchronous operation to export the given {@link EditedMediaItem}. + * + *

The export state is notified through the {@linkplain Builder#addListener(Listener) + * listener}. + * + *

Concurrent exports on the same Transformer object are not allowed. + * + *

If no custom {@link Transformer.Builder#setMuxerFactory(Muxer.Factory) Muxer.Factory} is + * specified, the output is an MP4 file. + * + *

The output can contain at most one video track and one audio track. Other track types are + * ignored. For adaptive bitrate inputs, if no custom {@link + * Transformer.Builder#setAssetLoaderFactory(AssetLoader.Factory) AssetLoader.Factory} is + * specified, the highest bitrate video and audio streams are selected. + * + *

If exporting the video track entails transcoding, the output frames' dimensions will be + * swapped if the output video's height is larger than the width. This is to improve compatibility + * among different device encoders. + * + * @param editedMediaItem The {@link EditedMediaItem} to export. + * @param path The path to the output file. + * @throws IllegalStateException If this method is called from the wrong thread. + * @throws IllegalStateException If an export is already in progress. + */ + public void start(EditedMediaItem editedMediaItem, String path) { + EditedMediaItemSequence sequence = + new EditedMediaItemSequence(ImmutableList.of(editedMediaItem)); + start(new Composition(ImmutableList.of(sequence), Effects.EMPTY), path); + } + /** * Starts an asynchronous operation to export the given {@link MediaItem}. * @@ -737,19 +786,20 @@ public final class Transformer { * *

Concurrent exports on the same Transformer object are not allowed. * - *

If no custom {@link Muxer.Factory} is specified, the output is an MP4 file. + *

If no custom {@link Transformer.Builder#setMuxerFactory(Muxer.Factory) Muxer.Factory} is + * specified, the output is an MP4 file. * *

The output can contain at most one video track and one audio track. Other track types are - * ignored. For adaptive bitrate, if no custom {@link AssetLoader.Factory} is specified, the - * highest bitrate video and audio streams are selected. + * ignored. For adaptive bitrate inputs, if no custom {@link + * Transformer.Builder#setAssetLoaderFactory(AssetLoader.Factory) AssetLoader.Factory} is + * specified, the highest bitrate video and audio streams are selected. * - *

If encoding the output's video track is needed, the output frames' dimensions will be - * swapped if the height is larger than the width. This is to improve compatibility among - * different device encoders. + *

If exporting the video track entails transcoding, the output frames' dimensions will be + * swapped if the output video's height is larger than the width. This is to improve compatibility + * among different device encoders. * * @param mediaItem The {@link MediaItem} to export. * @param path The path to the output file. - * @throws IllegalArgumentException If the path is invalid. * @throws IllegalArgumentException If the {@link MediaItem} is not supported. * @throws IllegalStateException If this method is called from the wrong thread. * @throws IllegalStateException If an export is already in progress. diff --git a/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java b/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java index 6b67725127..3ca9614e65 100644 --- a/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java +++ b/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java @@ -47,6 +47,7 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.audio.AudioProcessor; +import com.google.android.exoplayer2.audio.SilenceSkippingAudioProcessor; import com.google.android.exoplayer2.audio.SonicAudioProcessor; import com.google.android.exoplayer2.effect.Presentation; import com.google.android.exoplayer2.effect.ScaleToFitTransformation; @@ -375,6 +376,53 @@ public final class TransformerEndToEndTest { context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz")); } + @Test + public void startTransformation_concatenateMediaItemsWithSameFormat_completesSuccessfully() + throws Exception { + Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); + MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); + EditedMediaItem editedMediaItem = + new EditedMediaItem.Builder(mediaItem).setEffects(Effects.EMPTY).build(); + EditedMediaItemSequence editedMediaItemSequence = + new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem)); + Composition composition = + new Composition(ImmutableList.of(editedMediaItemSequence), Effects.EMPTY); + + transformer.start(composition, outputPath); + TransformerTestRunner.runLooper(transformer); + + DumpFileAsserts.assertOutput( + context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO + ".concatenated")); + } + + @Test + public void + startTransformation_concatenateMediaItemsWithSameFormatAndEffects_completesSuccessfully() + throws Exception { + Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); + MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); + AudioProcessor audioProcessor = new SilenceSkippingAudioProcessor(); + Effects effects = + new Effects(ImmutableList.of(audioProcessor), /* videoEffects= */ ImmutableList.of()); + // The video track must be removed in order for the export to end. Indeed, the + // Robolectric decoder just copies the input buffers to the output and the audio timestamps are + // therefore computed based on the encoded samples. As a result, the audio timestamps are much + // smaller than they should be and the muxer waits for more audio samples before writing video + // samples. + EditedMediaItem editedMediaItem = + new EditedMediaItem.Builder(mediaItem).setEffects(effects).setRemoveVideo(true).build(); + EditedMediaItemSequence editedMediaItemSequence = + new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem)); + Composition composition = + new Composition(ImmutableList.of(editedMediaItemSequence), Effects.EMPTY); + + transformer.start(composition, outputPath); + TransformerTestRunner.runLooper(transformer); + + DumpFileAsserts.assertOutput( + context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO + ".silence_skipped_concatenated")); + } + @Test public void startTransformation_withMultipleListeners_callsEachOnCompletion() throws Exception { Transformer.Listener mockListener1 = mock(Transformer.Listener.class); diff --git a/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated.dump b/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated.dump new file mode 100644 index 0000000000..218094d3b5 --- /dev/null +++ b/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated.dump @@ -0,0 +1,924 @@ +format 0: + peakBitrate = 200000 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]] + initializationData: + data = length 2, hash 5F7 +format 1: + id = 1 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + width = 1080 + height = 720 + frameRate = 29.970028 + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B +sample: + trackIndex = 1 + dataHashCode = -770308242 + size = 36692 + isKeyFrame = true + presentationTimeUs = 0 +sample: + trackIndex = 1 + dataHashCode = -732087136 + size = 5312 + isKeyFrame = false + presentationTimeUs = 66733 +sample: + trackIndex = 1 + dataHashCode = 468156717 + size = 599 + isKeyFrame = false + presentationTimeUs = 33366 +sample: + trackIndex = 1 + dataHashCode = 1150349584 + size = 7735 + isKeyFrame = false + presentationTimeUs = 200200 +sample: + trackIndex = 1 + dataHashCode = 1443582006 + size = 987 + isKeyFrame = false + presentationTimeUs = 133466 +sample: + trackIndex = 1 + dataHashCode = -310585145 + size = 673 + isKeyFrame = false + presentationTimeUs = 100100 +sample: + trackIndex = 1 + dataHashCode = 807460688 + size = 523 + isKeyFrame = false + presentationTimeUs = 166833 +sample: + trackIndex = 1 + dataHashCode = 1936487090 + size = 6061 + isKeyFrame = false + presentationTimeUs = 333666 +sample: + trackIndex = 1 + dataHashCode = -32297181 + size = 992 + isKeyFrame = false + presentationTimeUs = 266933 +sample: + trackIndex = 1 + dataHashCode = 1529616406 + size = 623 + isKeyFrame = false + presentationTimeUs = 233566 +sample: + trackIndex = 0 + dataHashCode = 1205768497 + size = 23 + isKeyFrame = true + presentationTimeUs = 44000 +sample: + trackIndex = 0 + dataHashCode = 837571078 + size = 6 + isKeyFrame = true + presentationTimeUs = 67219 +sample: + trackIndex = 0 + dataHashCode = -1991633045 + size = 148 + isKeyFrame = true + presentationTimeUs = 90439 +sample: + trackIndex = 0 + dataHashCode = -822987359 + size = 189 + isKeyFrame = true + presentationTimeUs = 113659 +sample: + trackIndex = 0 + dataHashCode = -1141508176 + size = 205 + isKeyFrame = true + presentationTimeUs = 136879 +sample: + trackIndex = 0 + dataHashCode = -226971245 + size = 210 + isKeyFrame = true + presentationTimeUs = 160099 +sample: + trackIndex = 0 + dataHashCode = -2099636855 + size = 210 + isKeyFrame = true + presentationTimeUs = 183319 +sample: + trackIndex = 0 + dataHashCode = 1541550559 + size = 207 + isKeyFrame = true + presentationTimeUs = 206539 +sample: + trackIndex = 0 + dataHashCode = 411148001 + size = 225 + isKeyFrame = true + presentationTimeUs = 229759 +sample: + trackIndex = 0 + dataHashCode = -897603973 + size = 215 + isKeyFrame = true + presentationTimeUs = 252979 +sample: + trackIndex = 1 + dataHashCode = 1949198785 + size = 421 + isKeyFrame = false + presentationTimeUs = 300300 +sample: + trackIndex = 1 + dataHashCode = -147880287 + size = 4899 + isKeyFrame = false + presentationTimeUs = 433766 +sample: + trackIndex = 1 + dataHashCode = 1369083472 + size = 568 + isKeyFrame = false + presentationTimeUs = 400400 +sample: + trackIndex = 1 + dataHashCode = 965782073 + size = 620 + isKeyFrame = false + presentationTimeUs = 367033 +sample: + trackIndex = 1 + dataHashCode = -261176150 + size = 5450 + isKeyFrame = false + presentationTimeUs = 567233 +sample: + trackIndex = 1 + dataHashCode = -1830836678 + size = 1051 + isKeyFrame = false + presentationTimeUs = 500500 +sample: + trackIndex = 1 + dataHashCode = 1767407540 + size = 874 + isKeyFrame = false + presentationTimeUs = 467133 +sample: + trackIndex = 1 + dataHashCode = 918440283 + size = 781 + isKeyFrame = false + presentationTimeUs = 533866 +sample: + trackIndex = 1 + dataHashCode = -1408463661 + size = 4725 + isKeyFrame = false + presentationTimeUs = 700700 +sample: + trackIndex = 1 + dataHashCode = 1569455924 + size = 1022 + isKeyFrame = false + presentationTimeUs = 633966 +sample: + trackIndex = 0 + dataHashCode = 1478106136 + size = 211 + isKeyFrame = true + presentationTimeUs = 276199 +sample: + trackIndex = 0 + dataHashCode = -1380417145 + size = 216 + isKeyFrame = true + presentationTimeUs = 299419 +sample: + trackIndex = 0 + dataHashCode = 780903644 + size = 229 + isKeyFrame = true + presentationTimeUs = 322639 +sample: + trackIndex = 0 + dataHashCode = 586204432 + size = 232 + isKeyFrame = true + presentationTimeUs = 345859 +sample: + trackIndex = 0 + dataHashCode = -2038771492 + size = 235 + isKeyFrame = true + presentationTimeUs = 369079 +sample: + trackIndex = 0 + dataHashCode = -2065161304 + size = 231 + isKeyFrame = true + presentationTimeUs = 392299 +sample: + trackIndex = 0 + dataHashCode = 468662933 + size = 226 + isKeyFrame = true + presentationTimeUs = 415519 +sample: + trackIndex = 0 + dataHashCode = -358398546 + size = 216 + isKeyFrame = true + presentationTimeUs = 438739 +sample: + trackIndex = 0 + dataHashCode = 1767325983 + size = 229 + isKeyFrame = true + presentationTimeUs = 461959 +sample: + trackIndex = 0 + dataHashCode = 1093095458 + size = 219 + isKeyFrame = true + presentationTimeUs = 485179 +sample: + trackIndex = 1 + dataHashCode = -1723778407 + size = 790 + isKeyFrame = false + presentationTimeUs = 600600 +sample: + trackIndex = 1 + dataHashCode = 1578275472 + size = 610 + isKeyFrame = false + presentationTimeUs = 667333 +sample: + trackIndex = 1 + dataHashCode = 1989768395 + size = 2751 + isKeyFrame = false + presentationTimeUs = 834166 +sample: + trackIndex = 1 + dataHashCode = -1215674502 + size = 745 + isKeyFrame = false + presentationTimeUs = 767433 +sample: + trackIndex = 1 + dataHashCode = -814473606 + size = 621 + isKeyFrame = false + presentationTimeUs = 734066 +sample: + trackIndex = 1 + dataHashCode = 498370894 + size = 505 + isKeyFrame = false + presentationTimeUs = 800800 +sample: + trackIndex = 1 + dataHashCode = -1051506468 + size = 1268 + isKeyFrame = false + presentationTimeUs = 967633 +sample: + trackIndex = 1 + dataHashCode = -1025604144 + size = 880 + isKeyFrame = false + presentationTimeUs = 900900 +sample: + trackIndex = 1 + dataHashCode = -913586520 + size = 530 + isKeyFrame = false + presentationTimeUs = 867533 +sample: + trackIndex = 1 + dataHashCode = 1340459242 + size = 568 + isKeyFrame = false + presentationTimeUs = 934266 +sample: + trackIndex = 0 + dataHashCode = 1687543702 + size = 241 + isKeyFrame = true + presentationTimeUs = 508399 +sample: + trackIndex = 0 + dataHashCode = 1675188486 + size = 228 + isKeyFrame = true + presentationTimeUs = 531619 +sample: + trackIndex = 0 + dataHashCode = 888567545 + size = 238 + isKeyFrame = true + presentationTimeUs = 554839 +sample: + trackIndex = 0 + dataHashCode = -439631803 + size = 234 + isKeyFrame = true + presentationTimeUs = 578058 +sample: + trackIndex = 0 + dataHashCode = 1606694497 + size = 231 + isKeyFrame = true + presentationTimeUs = 601278 +sample: + trackIndex = 0 + dataHashCode = 1747388653 + size = 217 + isKeyFrame = true + presentationTimeUs = 624498 +sample: + trackIndex = 0 + dataHashCode = -734560004 + size = 239 + isKeyFrame = true + presentationTimeUs = 647718 +sample: + trackIndex = 0 + dataHashCode = -975079040 + size = 243 + isKeyFrame = true + presentationTimeUs = 670938 +sample: + trackIndex = 0 + dataHashCode = -1403504710 + size = 231 + isKeyFrame = true + presentationTimeUs = 694158 +sample: + trackIndex = 0 + dataHashCode = 379512981 + size = 230 + isKeyFrame = true + presentationTimeUs = 717378 +sample: + trackIndex = 0 + dataHashCode = -997198863 + size = 238 + isKeyFrame = true + presentationTimeUs = 740598 +sample: + trackIndex = 0 + dataHashCode = 1394492825 + size = 225 + isKeyFrame = true + presentationTimeUs = 763818 +sample: + trackIndex = 0 + dataHashCode = -885232755 + size = 232 + isKeyFrame = true + presentationTimeUs = 787038 +sample: + trackIndex = 0 + dataHashCode = 260871367 + size = 243 + isKeyFrame = true + presentationTimeUs = 810258 +sample: + trackIndex = 0 + dataHashCode = -1505318960 + size = 232 + isKeyFrame = true + presentationTimeUs = 833478 +sample: + trackIndex = 0 + dataHashCode = -390625371 + size = 237 + isKeyFrame = true + presentationTimeUs = 856698 +sample: + trackIndex = 0 + dataHashCode = 1067950751 + size = 228 + isKeyFrame = true + presentationTimeUs = 879918 +sample: + trackIndex = 0 + dataHashCode = -1179436278 + size = 235 + isKeyFrame = true + presentationTimeUs = 903138 +sample: + trackIndex = 0 + dataHashCode = 1906607774 + size = 264 + isKeyFrame = true + presentationTimeUs = 926358 +sample: + trackIndex = 0 + dataHashCode = -800475828 + size = 257 + isKeyFrame = true + presentationTimeUs = 949578 +sample: + trackIndex = 0 + dataHashCode = 1718972977 + size = 227 + isKeyFrame = true + presentationTimeUs = 972798 +sample: + trackIndex = 1 + dataHashCode = -770308242 + size = 36692 + isKeyFrame = true + presentationTimeUs = 1024000 +sample: + trackIndex = 1 + dataHashCode = -732087136 + size = 5312 + isKeyFrame = false + presentationTimeUs = 1090733 +sample: + trackIndex = 1 + dataHashCode = 468156717 + size = 599 + isKeyFrame = false + presentationTimeUs = 1057366 +sample: + trackIndex = 1 + dataHashCode = 1150349584 + size = 7735 + isKeyFrame = false + presentationTimeUs = 1224200 +sample: + trackIndex = 1 + dataHashCode = 1443582006 + size = 987 + isKeyFrame = false + presentationTimeUs = 1157466 +sample: + trackIndex = 1 + dataHashCode = -310585145 + size = 673 + isKeyFrame = false + presentationTimeUs = 1124100 +sample: + trackIndex = 1 + dataHashCode = 807460688 + size = 523 + isKeyFrame = false + presentationTimeUs = 1190833 +sample: + trackIndex = 1 + dataHashCode = 1936487090 + size = 6061 + isKeyFrame = false + presentationTimeUs = 1357666 +sample: + trackIndex = 1 + dataHashCode = -32297181 + size = 992 + isKeyFrame = false + presentationTimeUs = 1290933 +sample: + trackIndex = 1 + dataHashCode = 1529616406 + size = 623 + isKeyFrame = false + presentationTimeUs = 1257566 +sample: + trackIndex = 0 + dataHashCode = -1120448741 + size = 227 + isKeyFrame = true + presentationTimeUs = 996018 +sample: + trackIndex = 0 + dataHashCode = -1718323210 + size = 235 + isKeyFrame = true + presentationTimeUs = 1019238 +sample: + trackIndex = 0 + dataHashCode = -422416 + size = 229 + isKeyFrame = true + presentationTimeUs = 1042458 +sample: + trackIndex = 0 + dataHashCode = 833757830 + size = 6 + isKeyFrame = true + presentationTimeUs = 1065678 +sample: + trackIndex = 0 + dataHashCode = 1205768497 + size = 23 + isKeyFrame = true + presentationTimeUs = 1068000 +sample: + trackIndex = 0 + dataHashCode = 837571078 + size = 6 + isKeyFrame = true + presentationTimeUs = 1091219 +sample: + trackIndex = 0 + dataHashCode = -1991633045 + size = 148 + isKeyFrame = true + presentationTimeUs = 1114439 +sample: + trackIndex = 0 + dataHashCode = -822987359 + size = 189 + isKeyFrame = true + presentationTimeUs = 1137659 +sample: + trackIndex = 0 + dataHashCode = -1141508176 + size = 205 + isKeyFrame = true + presentationTimeUs = 1160879 +sample: + trackIndex = 0 + dataHashCode = -226971245 + size = 210 + isKeyFrame = true + presentationTimeUs = 1184099 +sample: + trackIndex = 1 + dataHashCode = 1949198785 + size = 421 + isKeyFrame = false + presentationTimeUs = 1324300 +sample: + trackIndex = 1 + dataHashCode = -147880287 + size = 4899 + isKeyFrame = false + presentationTimeUs = 1457766 +sample: + trackIndex = 1 + dataHashCode = 1369083472 + size = 568 + isKeyFrame = false + presentationTimeUs = 1424400 +sample: + trackIndex = 1 + dataHashCode = 965782073 + size = 620 + isKeyFrame = false + presentationTimeUs = 1391033 +sample: + trackIndex = 1 + dataHashCode = -261176150 + size = 5450 + isKeyFrame = false + presentationTimeUs = 1591233 +sample: + trackIndex = 1 + dataHashCode = -1830836678 + size = 1051 + isKeyFrame = false + presentationTimeUs = 1524500 +sample: + trackIndex = 1 + dataHashCode = 1767407540 + size = 874 + isKeyFrame = false + presentationTimeUs = 1491133 +sample: + trackIndex = 1 + dataHashCode = 918440283 + size = 781 + isKeyFrame = false + presentationTimeUs = 1557866 +sample: + trackIndex = 0 + dataHashCode = -2099636855 + size = 210 + isKeyFrame = true + presentationTimeUs = 1207319 +sample: + trackIndex = 0 + dataHashCode = 1541550559 + size = 207 + isKeyFrame = true + presentationTimeUs = 1230539 +sample: + trackIndex = 0 + dataHashCode = 411148001 + size = 225 + isKeyFrame = true + presentationTimeUs = 1253759 +sample: + trackIndex = 0 + dataHashCode = -897603973 + size = 215 + isKeyFrame = true + presentationTimeUs = 1276979 +sample: + trackIndex = 0 + dataHashCode = 1478106136 + size = 211 + isKeyFrame = true + presentationTimeUs = 1300199 +sample: + trackIndex = 0 + dataHashCode = -1380417145 + size = 216 + isKeyFrame = true + presentationTimeUs = 1323419 +sample: + trackIndex = 0 + dataHashCode = 780903644 + size = 229 + isKeyFrame = true + presentationTimeUs = 1346639 +sample: + trackIndex = 0 + dataHashCode = 586204432 + size = 232 + isKeyFrame = true + presentationTimeUs = 1369859 +sample: + trackIndex = 0 + dataHashCode = -2038771492 + size = 235 + isKeyFrame = true + presentationTimeUs = 1393079 +sample: + trackIndex = 0 + dataHashCode = -2065161304 + size = 231 + isKeyFrame = true + presentationTimeUs = 1416299 +sample: + trackIndex = 1 + dataHashCode = -1408463661 + size = 4725 + isKeyFrame = false + presentationTimeUs = 1724700 +sample: + trackIndex = 1 + dataHashCode = 1569455924 + size = 1022 + isKeyFrame = false + presentationTimeUs = 1657966 +sample: + trackIndex = 1 + dataHashCode = -1723778407 + size = 790 + isKeyFrame = false + presentationTimeUs = 1624600 +sample: + trackIndex = 1 + dataHashCode = 1578275472 + size = 610 + isKeyFrame = false + presentationTimeUs = 1691333 +sample: + trackIndex = 1 + dataHashCode = 1989768395 + size = 2751 + isKeyFrame = false + presentationTimeUs = 1858166 +sample: + trackIndex = 1 + dataHashCode = -1215674502 + size = 745 + isKeyFrame = false + presentationTimeUs = 1791433 +sample: + trackIndex = 1 + dataHashCode = -814473606 + size = 621 + isKeyFrame = false + presentationTimeUs = 1758066 +sample: + trackIndex = 1 + dataHashCode = 498370894 + size = 505 + isKeyFrame = false + presentationTimeUs = 1824800 +sample: + trackIndex = 0 + dataHashCode = 468662933 + size = 226 + isKeyFrame = true + presentationTimeUs = 1439519 +sample: + trackIndex = 0 + dataHashCode = -358398546 + size = 216 + isKeyFrame = true + presentationTimeUs = 1462739 +sample: + trackIndex = 0 + dataHashCode = 1767325983 + size = 229 + isKeyFrame = true + presentationTimeUs = 1485959 +sample: + trackIndex = 0 + dataHashCode = 1093095458 + size = 219 + isKeyFrame = true + presentationTimeUs = 1509179 +sample: + trackIndex = 0 + dataHashCode = 1687543702 + size = 241 + isKeyFrame = true + presentationTimeUs = 1532399 +sample: + trackIndex = 0 + dataHashCode = 1675188486 + size = 228 + isKeyFrame = true + presentationTimeUs = 1555619 +sample: + trackIndex = 0 + dataHashCode = 888567545 + size = 238 + isKeyFrame = true + presentationTimeUs = 1578839 +sample: + trackIndex = 0 + dataHashCode = -439631803 + size = 234 + isKeyFrame = true + presentationTimeUs = 1602058 +sample: + trackIndex = 0 + dataHashCode = 1606694497 + size = 231 + isKeyFrame = true + presentationTimeUs = 1625278 +sample: + trackIndex = 0 + dataHashCode = 1747388653 + size = 217 + isKeyFrame = true + presentationTimeUs = 1648498 +sample: + trackIndex = 1 + dataHashCode = -1051506468 + size = 1268 + isKeyFrame = false + presentationTimeUs = 1991633 +sample: + trackIndex = 1 + dataHashCode = -1025604144 + size = 880 + isKeyFrame = false + presentationTimeUs = 1924900 +sample: + trackIndex = 1 + dataHashCode = -913586520 + size = 530 + isKeyFrame = false + presentationTimeUs = 1891533 +sample: + trackIndex = 1 + dataHashCode = 1340459242 + size = 568 + isKeyFrame = false + presentationTimeUs = 1958266 +sample: + trackIndex = 0 + dataHashCode = -734560004 + size = 239 + isKeyFrame = true + presentationTimeUs = 1671718 +sample: + trackIndex = 0 + dataHashCode = -975079040 + size = 243 + isKeyFrame = true + presentationTimeUs = 1694938 +sample: + trackIndex = 0 + dataHashCode = -1403504710 + size = 231 + isKeyFrame = true + presentationTimeUs = 1718158 +sample: + trackIndex = 0 + dataHashCode = 379512981 + size = 230 + isKeyFrame = true + presentationTimeUs = 1741378 +sample: + trackIndex = 0 + dataHashCode = -997198863 + size = 238 + isKeyFrame = true + presentationTimeUs = 1764598 +sample: + trackIndex = 0 + dataHashCode = 1394492825 + size = 225 + isKeyFrame = true + presentationTimeUs = 1787818 +sample: + trackIndex = 0 + dataHashCode = -885232755 + size = 232 + isKeyFrame = true + presentationTimeUs = 1811038 +sample: + trackIndex = 0 + dataHashCode = 260871367 + size = 243 + isKeyFrame = true + presentationTimeUs = 1834258 +sample: + trackIndex = 0 + dataHashCode = -1505318960 + size = 232 + isKeyFrame = true + presentationTimeUs = 1857478 +sample: + trackIndex = 0 + dataHashCode = -390625371 + size = 237 + isKeyFrame = true + presentationTimeUs = 1880698 +sample: + trackIndex = 0 + dataHashCode = 1067950751 + size = 228 + isKeyFrame = true + presentationTimeUs = 1903918 +sample: + trackIndex = 0 + dataHashCode = -1179436278 + size = 235 + isKeyFrame = true + presentationTimeUs = 1927138 +sample: + trackIndex = 0 + dataHashCode = 1906607774 + size = 264 + isKeyFrame = true + presentationTimeUs = 1950358 +sample: + trackIndex = 0 + dataHashCode = -800475828 + size = 257 + isKeyFrame = true + presentationTimeUs = 1973578 +sample: + trackIndex = 0 + dataHashCode = 1718972977 + size = 227 + isKeyFrame = true + presentationTimeUs = 1996798 +sample: + trackIndex = 0 + dataHashCode = -1120448741 + size = 227 + isKeyFrame = true + presentationTimeUs = 2020018 +sample: + trackIndex = 0 + dataHashCode = -1718323210 + size = 235 + isKeyFrame = true + presentationTimeUs = 2043238 +sample: + trackIndex = 0 + dataHashCode = -422416 + size = 229 + isKeyFrame = true + presentationTimeUs = 2066458 +sample: + trackIndex = 0 + dataHashCode = 833757830 + size = 6 + isKeyFrame = true + presentationTimeUs = 2089678 +released = true diff --git a/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silence_skipped_concatenated.dump b/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silence_skipped_concatenated.dump new file mode 100644 index 0000000000..89b1001002 --- /dev/null +++ b/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silence_skipped_concatenated.dump @@ -0,0 +1,546 @@ +format 0: + sampleMimeType = audio/mp4a-latm + channelCount = 1 + sampleRate = 44100 + pcmEncoding = 2 +sample: + trackIndex = 0 + dataHashCode = 1205768497 + size = 23 + isKeyFrame = true + presentationTimeUs = 0 +sample: + trackIndex = 0 + dataHashCode = 837571078 + size = 6 + isKeyFrame = true + presentationTimeUs = 261 +sample: + trackIndex = 0 + dataHashCode = -1991633045 + size = 148 + isKeyFrame = true + presentationTimeUs = 329 +sample: + trackIndex = 0 + dataHashCode = -822987359 + size = 189 + isKeyFrame = true + presentationTimeUs = 2007 +sample: + trackIndex = 0 + dataHashCode = -1141508176 + size = 205 + isKeyFrame = true + presentationTimeUs = 4150 +sample: + trackIndex = 0 + dataHashCode = -226971245 + size = 210 + isKeyFrame = true + presentationTimeUs = 6474 +sample: + trackIndex = 0 + dataHashCode = -2099636855 + size = 210 + isKeyFrame = true + presentationTimeUs = 8855 +sample: + trackIndex = 0 + dataHashCode = 1541550559 + size = 207 + isKeyFrame = true + presentationTimeUs = 11236 +sample: + trackIndex = 0 + dataHashCode = 411148001 + size = 225 + isKeyFrame = true + presentationTimeUs = 13583 +sample: + trackIndex = 0 + dataHashCode = -897603973 + size = 215 + isKeyFrame = true + presentationTimeUs = 16134 +sample: + trackIndex = 0 + dataHashCode = 1478106136 + size = 211 + isKeyFrame = true + presentationTimeUs = 18572 +sample: + trackIndex = 0 + dataHashCode = -1380417145 + size = 216 + isKeyFrame = true + presentationTimeUs = 20964 +sample: + trackIndex = 0 + dataHashCode = 780903644 + size = 229 + isKeyFrame = true + presentationTimeUs = 23413 +sample: + trackIndex = 0 + dataHashCode = 586204432 + size = 232 + isKeyFrame = true + presentationTimeUs = 26010 +sample: + trackIndex = 0 + dataHashCode = -2038771492 + size = 235 + isKeyFrame = true + presentationTimeUs = 28640 +sample: + trackIndex = 0 + dataHashCode = -2065161304 + size = 231 + isKeyFrame = true + presentationTimeUs = 31304 +sample: + trackIndex = 0 + dataHashCode = 468662933 + size = 226 + isKeyFrame = true + presentationTimeUs = 33923 +sample: + trackIndex = 0 + dataHashCode = -358398546 + size = 216 + isKeyFrame = true + presentationTimeUs = 36486 +sample: + trackIndex = 0 + dataHashCode = 1767325983 + size = 229 + isKeyFrame = true + presentationTimeUs = 38935 +sample: + trackIndex = 0 + dataHashCode = 1093095458 + size = 219 + isKeyFrame = true + presentationTimeUs = 41531 +sample: + trackIndex = 0 + dataHashCode = 1687543702 + size = 241 + isKeyFrame = true + presentationTimeUs = 44014 +sample: + trackIndex = 0 + dataHashCode = 1675188486 + size = 228 + isKeyFrame = true + presentationTimeUs = 46747 +sample: + trackIndex = 0 + dataHashCode = 888567545 + size = 238 + isKeyFrame = true + presentationTimeUs = 49332 +sample: + trackIndex = 0 + dataHashCode = -439631803 + size = 234 + isKeyFrame = true + presentationTimeUs = 52030 +sample: + trackIndex = 0 + dataHashCode = 1606694497 + size = 231 + isKeyFrame = true + presentationTimeUs = 54683 +sample: + trackIndex = 0 + dataHashCode = 1747388653 + size = 217 + isKeyFrame = true + presentationTimeUs = 57302 +sample: + trackIndex = 0 + dataHashCode = -734560004 + size = 239 + isKeyFrame = true + presentationTimeUs = 59762 +sample: + trackIndex = 0 + dataHashCode = -975079040 + size = 243 + isKeyFrame = true + presentationTimeUs = 62472 +sample: + trackIndex = 0 + dataHashCode = -1403504710 + size = 231 + isKeyFrame = true + presentationTimeUs = 65227 +sample: + trackIndex = 0 + dataHashCode = 379512981 + size = 230 + isKeyFrame = true + presentationTimeUs = 67846 +sample: + trackIndex = 0 + dataHashCode = -997198863 + size = 238 + isKeyFrame = true + presentationTimeUs = 70454 +sample: + trackIndex = 0 + dataHashCode = 1394492825 + size = 225 + isKeyFrame = true + presentationTimeUs = 73152 +sample: + trackIndex = 0 + dataHashCode = -885232755 + size = 232 + isKeyFrame = true + presentationTimeUs = 75703 +sample: + trackIndex = 0 + dataHashCode = 260871367 + size = 243 + isKeyFrame = true + presentationTimeUs = 78334 +sample: + trackIndex = 0 + dataHashCode = -1505318960 + size = 232 + isKeyFrame = true + presentationTimeUs = 81089 +sample: + trackIndex = 0 + dataHashCode = -390625371 + size = 237 + isKeyFrame = true + presentationTimeUs = 83719 +sample: + trackIndex = 0 + dataHashCode = 1067950751 + size = 228 + isKeyFrame = true + presentationTimeUs = 86406 +sample: + trackIndex = 0 + dataHashCode = -1179436278 + size = 235 + isKeyFrame = true + presentationTimeUs = 88991 +sample: + trackIndex = 0 + dataHashCode = 1906607774 + size = 264 + isKeyFrame = true + presentationTimeUs = 91656 +sample: + trackIndex = 0 + dataHashCode = -800475828 + size = 257 + isKeyFrame = true + presentationTimeUs = 94649 +sample: + trackIndex = 0 + dataHashCode = 1718972977 + size = 227 + isKeyFrame = true + presentationTimeUs = 97563 +sample: + trackIndex = 0 + dataHashCode = -1120448741 + size = 227 + isKeyFrame = true + presentationTimeUs = 100137 +sample: + trackIndex = 0 + dataHashCode = -1718323210 + size = 235 + isKeyFrame = true + presentationTimeUs = 102710 +sample: + trackIndex = 0 + dataHashCode = -422416 + size = 229 + isKeyFrame = true + presentationTimeUs = 105375 +sample: + trackIndex = 0 + dataHashCode = 833757830 + size = 6 + isKeyFrame = true + presentationTimeUs = 107971 +sample: + trackIndex = 0 + dataHashCode = 1205768497 + size = 23 + isKeyFrame = true + presentationTimeUs = 108039 +sample: + trackIndex = 0 + dataHashCode = 837571078 + size = 6 + isKeyFrame = true + presentationTimeUs = 108300 +sample: + trackIndex = 0 + dataHashCode = -1991633045 + size = 148 + isKeyFrame = true + presentationTimeUs = 108368 +sample: + trackIndex = 0 + dataHashCode = -822987359 + size = 189 + isKeyFrame = true + presentationTimeUs = 110046 +sample: + trackIndex = 0 + dataHashCode = -1141508176 + size = 205 + isKeyFrame = true + presentationTimeUs = 112189 +sample: + trackIndex = 0 + dataHashCode = -226971245 + size = 210 + isKeyFrame = true + presentationTimeUs = 114513 +sample: + trackIndex = 0 + dataHashCode = -2099636855 + size = 210 + isKeyFrame = true + presentationTimeUs = 116894 +sample: + trackIndex = 0 + dataHashCode = 1541550559 + size = 207 + isKeyFrame = true + presentationTimeUs = 119275 +sample: + trackIndex = 0 + dataHashCode = 411148001 + size = 225 + isKeyFrame = true + presentationTimeUs = 121622 +sample: + trackIndex = 0 + dataHashCode = -897603973 + size = 215 + isKeyFrame = true + presentationTimeUs = 124173 +sample: + trackIndex = 0 + dataHashCode = 1478106136 + size = 211 + isKeyFrame = true + presentationTimeUs = 126610 +sample: + trackIndex = 0 + dataHashCode = -1380417145 + size = 216 + isKeyFrame = true + presentationTimeUs = 129003 +sample: + trackIndex = 0 + dataHashCode = 780903644 + size = 229 + isKeyFrame = true + presentationTimeUs = 131452 +sample: + trackIndex = 0 + dataHashCode = 586204432 + size = 232 + isKeyFrame = true + presentationTimeUs = 134048 +sample: + trackIndex = 0 + dataHashCode = -2038771492 + size = 235 + isKeyFrame = true + presentationTimeUs = 136679 +sample: + trackIndex = 0 + dataHashCode = -2065161304 + size = 231 + isKeyFrame = true + presentationTimeUs = 139343 +sample: + trackIndex = 0 + dataHashCode = 468662933 + size = 226 + isKeyFrame = true + presentationTimeUs = 141962 +sample: + trackIndex = 0 + dataHashCode = -358398546 + size = 216 + isKeyFrame = true + presentationTimeUs = 144524 +sample: + trackIndex = 0 + dataHashCode = 1767325983 + size = 229 + isKeyFrame = true + presentationTimeUs = 146973 +sample: + trackIndex = 0 + dataHashCode = 1093095458 + size = 219 + isKeyFrame = true + presentationTimeUs = 149570 +sample: + trackIndex = 0 + dataHashCode = 1687543702 + size = 241 + isKeyFrame = true + presentationTimeUs = 152053 +sample: + trackIndex = 0 + dataHashCode = 1675188486 + size = 228 + isKeyFrame = true + presentationTimeUs = 154785 +sample: + trackIndex = 0 + dataHashCode = 888567545 + size = 238 + isKeyFrame = true + presentationTimeUs = 157370 +sample: + trackIndex = 0 + dataHashCode = -439631803 + size = 234 + isKeyFrame = true + presentationTimeUs = 160069 +sample: + trackIndex = 0 + dataHashCode = 1606694497 + size = 231 + isKeyFrame = true + presentationTimeUs = 162722 +sample: + trackIndex = 0 + dataHashCode = 1747388653 + size = 217 + isKeyFrame = true + presentationTimeUs = 165341 +sample: + trackIndex = 0 + dataHashCode = -734560004 + size = 239 + isKeyFrame = true + presentationTimeUs = 167801 +sample: + trackIndex = 0 + dataHashCode = -975079040 + size = 243 + isKeyFrame = true + presentationTimeUs = 170511 +sample: + trackIndex = 0 + dataHashCode = -1403504710 + size = 231 + isKeyFrame = true + presentationTimeUs = 173266 +sample: + trackIndex = 0 + dataHashCode = 379512981 + size = 230 + isKeyFrame = true + presentationTimeUs = 175885 +sample: + trackIndex = 0 + dataHashCode = -997198863 + size = 238 + isKeyFrame = true + presentationTimeUs = 178493 +sample: + trackIndex = 0 + dataHashCode = 1394492825 + size = 225 + isKeyFrame = true + presentationTimeUs = 181191 +sample: + trackIndex = 0 + dataHashCode = -885232755 + size = 232 + isKeyFrame = true + presentationTimeUs = 183742 +sample: + trackIndex = 0 + dataHashCode = 260871367 + size = 243 + isKeyFrame = true + presentationTimeUs = 186372 +sample: + trackIndex = 0 + dataHashCode = -1505318960 + size = 232 + isKeyFrame = true + presentationTimeUs = 189127 +sample: + trackIndex = 0 + dataHashCode = -390625371 + size = 237 + isKeyFrame = true + presentationTimeUs = 191758 +sample: + trackIndex = 0 + dataHashCode = 1067950751 + size = 228 + isKeyFrame = true + presentationTimeUs = 194445 +sample: + trackIndex = 0 + dataHashCode = -1179436278 + size = 235 + isKeyFrame = true + presentationTimeUs = 197030 +sample: + trackIndex = 0 + dataHashCode = 1906607774 + size = 264 + isKeyFrame = true + presentationTimeUs = 199694 +sample: + trackIndex = 0 + dataHashCode = -800475828 + size = 257 + isKeyFrame = true + presentationTimeUs = 202688 +sample: + trackIndex = 0 + dataHashCode = 1718972977 + size = 227 + isKeyFrame = true + presentationTimeUs = 205601 +sample: + trackIndex = 0 + dataHashCode = -1120448741 + size = 227 + isKeyFrame = true + presentationTimeUs = 208175 +sample: + trackIndex = 0 + dataHashCode = -1718323210 + size = 235 + isKeyFrame = true + presentationTimeUs = 210749 +sample: + trackIndex = 0 + dataHashCode = -422416 + size = 229 + isKeyFrame = true + presentationTimeUs = 213413 +sample: + trackIndex = 0 + dataHashCode = 833757830 + size = 6 + isKeyFrame = true + presentationTimeUs = 216010 +released = true