From dcb67102b93f5d854b659379cb2a223f5d59250e Mon Sep 17 00:00:00 2001 From: rohks Date: Wed, 19 Mar 2025 06:22:00 -0700 Subject: [PATCH] Parse `btrt` box in BoxParser to get bitrate information for Mp4 files PiperOrigin-RevId: 738370142 (cherry picked from commit 88da587b0a5742e31452d5b7609ef96c048095d0) --- .../androidx/media3/container/Mp4Box.java | 3 + .../media3/extractor/mp4/BoxParser.java | 43 ++- .../mp4/Mp4ExtractorParameterizedTest.java | 5 + .../mp4/h265_bframes.mp4.0.dump | 2 + .../mp4/h265_bframes.mp4.1.dump | 2 + .../mp4/h265_bframes.mp4.2.dump | 2 + .../mp4/h265_bframes.mp4.3.dump | 2 + ...ding_within_gop_sample_dependencies.0.dump | 2 + ...ding_within_gop_sample_dependencies.1.dump | 2 + ...ding_within_gop_sample_dependencies.2.dump | 2 + ...ding_within_gop_sample_dependencies.3.dump | 2 + ...op_sample_dependencies.unknown_length.dump | 2 + .../mp4/h265_bframes.mp4.unknown_length.dump | 2 + .../mp4/sample_18byte_nclx_colr.mp4.0.dump | 2 + .../mp4/sample_18byte_nclx_colr.mp4.1.dump | 2 + .../mp4/sample_18byte_nclx_colr.mp4.2.dump | 2 + .../mp4/sample_18byte_nclx_colr.mp4.3.dump | 2 + ...ding_within_gop_sample_dependencies.0.dump | 2 + ...ding_within_gop_sample_dependencies.1.dump | 2 + ...ding_within_gop_sample_dependencies.2.dump | 2 + ...ding_within_gop_sample_dependencies.3.dump | 2 + ...op_sample_dependencies.unknown_length.dump | 2 + ...e_18byte_nclx_colr.mp4.unknown_length.dump | 2 + ...ample_fragmented_large_bitrates.mp4.0.dump | 2 + ...ample_fragmented_large_bitrates.mp4.1.dump | 2 + ...ample_fragmented_large_bitrates.mp4.2.dump | 2 + ...ample_fragmented_large_bitrates.mp4.3.dump | 2 + ...ding_within_gop_sample_dependencies.0.dump | 2 + ...ding_within_gop_sample_dependencies.1.dump | 2 + ...ding_within_gop_sample_dependencies.2.dump | 2 + ...ding_within_gop_sample_dependencies.3.dump | 2 + ...op_sample_dependencies.unknown_length.dump | 2 + ...ted_large_bitrates.mp4.unknown_length.dump | 2 + .../mp4/sample_fragmented_seekable.mp4.0.dump | 2 + .../mp4/sample_fragmented_seekable.mp4.1.dump | 2 + .../mp4/sample_fragmented_seekable.mp4.2.dump | 2 + .../mp4/sample_fragmented_seekable.mp4.3.dump | 2 + ...ding_within_gop_sample_dependencies.0.dump | 2 + ...ding_within_gop_sample_dependencies.1.dump | 2 + ...ding_within_gop_sample_dependencies.2.dump | 2 + ...ding_within_gop_sample_dependencies.3.dump | 2 + ...op_sample_dependencies.unknown_length.dump | 2 + ...ragmented_seekable.mp4.unknown_length.dump | 2 + .../mp4/sample_with_av1c.mp4.0.dump | 2 + .../mp4/sample_with_av1c.mp4.1.dump | 2 + .../mp4/sample_with_av1c.mp4.2.dump | 2 + .../mp4/sample_with_av1c.mp4.3.dump | 2 + ...ding_within_gop_sample_dependencies.0.dump | 2 + ...ding_within_gop_sample_dependencies.1.dump | 2 + ...ding_within_gop_sample_dependencies.2.dump | 2 + ...ding_within_gop_sample_dependencies.3.dump | 2 + ...op_sample_dependencies.unknown_length.dump | 2 + .../sample_with_av1c.mp4.unknown_length.dump | 2 + .../mp4/sample_with_btrt.mp4.0.dump | 350 ++++++++++++++++++ .../mp4/sample_with_btrt.mp4.1.dump | 298 +++++++++++++++ .../mp4/sample_with_btrt.mp4.2.dump | 234 ++++++++++++ .../mp4/sample_with_btrt.mp4.3.dump | 174 +++++++++ ...ding_within_gop_sample_dependencies.0.dump | 350 ++++++++++++++++++ ...ding_within_gop_sample_dependencies.1.dump | 298 +++++++++++++++ ...ding_within_gop_sample_dependencies.2.dump | 234 ++++++++++++ ...ding_within_gop_sample_dependencies.3.dump | 174 +++++++++ ...op_sample_dependencies.unknown_length.dump | 350 ++++++++++++++++++ .../sample_with_btrt.mp4.unknown_length.dump | 350 ++++++++++++++++++ .../sample_with_colr_mdcv_and_clli.mp4.0.dump | 2 + .../sample_with_colr_mdcv_and_clli.mp4.1.dump | 2 + .../sample_with_colr_mdcv_and_clli.mp4.2.dump | 2 + .../sample_with_colr_mdcv_and_clli.mp4.3.dump | 2 + ...ding_within_gop_sample_dependencies.0.dump | 2 + ...ding_within_gop_sample_dependencies.1.dump | 2 + ...ding_within_gop_sample_dependencies.2.dump | 2 + ...ding_within_gop_sample_dependencies.3.dump | 2 + ...op_sample_dependencies.unknown_length.dump | 2 + ...colr_mdcv_and_clli.mp4.unknown_length.dump | 2 + .../mp4/sample_with_invalid_nalu.mp4.0.dump | 2 + .../mp4/sample_with_invalid_nalu.mp4.1.dump | 2 + .../mp4/sample_with_invalid_nalu.mp4.2.dump | 2 + .../mp4/sample_with_invalid_nalu.mp4.3.dump | 2 + ...ding_within_gop_sample_dependencies.0.dump | 2 + ...ding_within_gop_sample_dependencies.1.dump | 2 + ...ding_within_gop_sample_dependencies.2.dump | 2 + ...ding_within_gop_sample_dependencies.3.dump | 2 + ...op_sample_dependencies.unknown_length.dump | 2 + ..._with_invalid_nalu.mp4.unknown_length.dump | 2 + .../assets/media/mp4/sample_with_btrt.mp4 | Bin 0 -> 101916 bytes ...mixedWith_sample_18byte_nclx_colr.mp4.dump | 2 + .../transmuxed.dump | 2 + ...ng_mixedWith_test-cbr-info-header.mp3.dump | 2 + .../sample_18byte_nclx_colr.mp4/original.dump | 2 + .../sample_18byte_nclx_colr.mp4/silence.dump | 2 + .../clipped.dump | 2 + .../clipped_clipped_transmux.dump | 2 + .../clipped_to_empty.dump | 2 + 92 files changed, 3018 insertions(+), 1 deletion(-) create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/media/mp4/sample_with_btrt.mp4 diff --git a/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java b/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java index 9742307e5f..8f74cd6e3f 100644 --- a/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java +++ b/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java @@ -245,6 +245,9 @@ public abstract class Mp4Box { @SuppressWarnings("ConstantCaseForConstants") public static final int TYPE_esds = 0x65736473; + @SuppressWarnings("ConstantCaseForConstants") + public static final int TYPE_btrt = 0x62747274; + @SuppressWarnings("ConstantCaseForConstants") public static final int TYPE_moof = 0x6d6f6f66; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java index 3b2d17f88f..3bc998907a 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java @@ -1223,6 +1223,7 @@ public final class BoxParser { @Nullable byte[] projectionData = null; @C.StereoMode int stereoMode = Format.NO_VALUE; @Nullable EsdsData esdsData = null; + @Nullable BtrtData btrtData = null; int maxNumReorderSamples = Format.NO_VALUE; int maxSubLayers = Format.NO_VALUE; @Nullable NalUnitUtil.H265VpsData vpsData = null; @@ -1446,6 +1447,8 @@ public final class BoxParser { if (initializationDataBytes != null) { initializationData = ImmutableList.of(initializationDataBytes); } + } else if (childAtomType == Mp4Box.TYPE_btrt) { + btrtData = parseBtrtFromParent(parent, childStartPosition); } else if (childAtomType == Mp4Box.TYPE_pasp) { pixelWidthHeightRatio = parsePaspFromParent(parent, childStartPosition); pixelWidthHeightRatioFromPasp = true; @@ -1555,7 +1558,12 @@ public final class BoxParser { .setChromaBitdepth(bitdepthChroma) .build()); - if (esdsData != null) { + // Prefer btrtData over esdsData for video track. + if (btrtData != null) { + formatBuilder + .setAverageBitrate(Ints.saturatedCast(btrtData.avgBitrate)) + .setPeakBitrate(Ints.saturatedCast(btrtData.maxBitrate)); + } else if (esdsData != null) { formatBuilder .setAverageBitrate(Ints.saturatedCast(esdsData.bitrate)) .setPeakBitrate(Ints.saturatedCast(esdsData.peakBitrate)); @@ -1834,6 +1842,7 @@ public final class BoxParser { @C.PcmEncoding int pcmEncoding = Format.NO_VALUE; @Nullable String codecs = null; @Nullable EsdsData esdsData = null; + @Nullable BtrtData btrtData = null; if (quickTimeSoundDescriptionVersion == 0 || quickTimeSoundDescriptionVersion == 1) { channelCount = parent.readUnsignedShort(); @@ -2040,6 +2049,8 @@ public final class BoxParser { } } } + } else if (childAtomType == Mp4Box.TYPE_btrt) { + btrtData = parseBtrtFromParent(parent, childPosition); } else if (childAtomType == Mp4Box.TYPE_dac3) { parent.setPosition(Mp4Box.HEADER_SIZE + childPosition); out.format = @@ -2127,10 +2138,15 @@ public final class BoxParser { .setDrmInitData(drmInitData) .setLanguage(language); + // Prefer esdsData over btrtData for audio track. if (esdsData != null) { formatBuilder .setAverageBitrate(Ints.saturatedCast(esdsData.bitrate)) .setPeakBitrate(Ints.saturatedCast(esdsData.peakBitrate)); + } else if (btrtData != null) { + formatBuilder + .setAverageBitrate(Ints.saturatedCast(btrtData.avgBitrate)) + .setPeakBitrate(Ints.saturatedCast(btrtData.maxBitrate)); } out.format = formatBuilder.build(); @@ -2221,6 +2237,20 @@ public final class BoxParser { /* peakBitrate= */ peakBitrate > 0 ? peakBitrate : Format.NO_VALUE); } + /** + * Returns bitrate data contained in a btrt box, as specified by Section 8.5.2.2 in ISO/IEC + * 14496-12:2012(E). + */ + private static BtrtData parseBtrtFromParent(ParsableByteArray parent, int position) { + parent.setPosition(position + Mp4Box.HEADER_SIZE); + + parent.skipBytes(4); // bufferSizeDB + long maxBitrate = parent.readUnsignedInt(); + long avgBitrate = parent.readUnsignedInt(); + + return new BtrtData(avgBitrate, maxBitrate); + } + /** * Returns stereo video playback related meta data from the vexu box. See * https://developer.apple.com/av-foundation/Stereo-Video-ISOBMFF-Extensions.pdf for ref. @@ -2526,6 +2556,17 @@ public final class BoxParser { } } + /** Data parsed from btrt box. */ + private static final class BtrtData { + private final long avgBitrate; + private final long maxBitrate; + + public BtrtData(long avgBitrate, long maxBitrate) { + this.avgBitrate = avgBitrate; + this.maxBitrate = maxBitrate; + } + } + /** Data parsed from stri box. */ private static final class StriData { private final boolean hasLeftEyeView; diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java index eae5976675..9d18e4eecb 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java @@ -260,6 +260,11 @@ public final class Mp4ExtractorParameterizedTest { assertExtractorBehavior("media/mp4/sample_2_byte_NAL_length.mp4"); } + @Test + public void mp4SampleWithBtrt() throws Exception { + assertExtractorBehavior("media/mp4/sample_with_btrt.mp4"); + } + private void assertExtractorBehavior(String file) throws IOException { ExtractorAsserts.AssertionConfig.Builder assertionConfigBuilder = new ExtractorAsserts.AssertionConfig.Builder(); diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.0.dump index c3747ca083..d7e7866e05 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.1.dump index c3747ca083..d7e7866e05 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.2.dump index c3747ca083..d7e7866e05 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.3.dump index c3747ca083..d7e7866e05 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.0.dump index 7f2a42e0e9..cda16bc7a8 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.1.dump index 7f2a42e0e9..cda16bc7a8 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.2.dump index 7f2a42e0e9..cda16bc7a8 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.3.dump index 7f2a42e0e9..cda16bc7a8 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.unknown_length.dump index 7f2a42e0e9..cda16bc7a8 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.unknown_length.dump index c3747ca083..d7e7866e05 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/h265_bframes.mp4.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 155160 + peakBitrate = 155160 id = 1 containerMimeType = video/mp4 sampleMimeType = video/hevc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.0.dump index d1daf77470..544ea667ba 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.1.dump index d1daf77470..544ea667ba 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.2.dump index d1daf77470..544ea667ba 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.3.dump index d1daf77470..544ea667ba 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.0.dump index f0dc292eca..958250979b 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.1.dump index f0dc292eca..958250979b 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.2.dump index f0dc292eca..958250979b 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.3.dump index f0dc292eca..958250979b 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.unknown_length.dump index f0dc292eca..958250979b 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.unknown_length.dump index d1daf77470..544ea667ba 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_18byte_nclx_colr.mp4.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718288 + peakBitrate = 718288 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.0.dump index 1e8032c103..ecdaa15740 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.1.dump index 79f433eb3c..1e33608d2a 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.2.dump index 5c8e1457ae..650254843a 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.3.dump index 25eba08ffc..80bd0ce19a 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.0.dump index b35cd11501..7d579965e5 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.1.dump index 007dd01789..fe2113227d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.2.dump index 1499f36e22..da3cb84ee6 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.3.dump index c96ec212d1..ec32a25056 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.unknown_length.dump index b35cd11501..7d579965e5 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.unknown_length.dump index 1e8032c103..ecdaa15740 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_large_bitrates.mp4.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.0.dump index bd7f4a1e50..9b67dd3555 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.1.dump index ea2ffc8d83..ca5222da43 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.2.dump index 48f108a434..95f6630118 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.3.dump index feb56812d5..aaa5f5b969 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.0.dump index a992d16add..348ea639b2 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.1.dump index 3e7be9e082..ce895f82f1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.2.dump index e66acb5ade..5cb313a588 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.3.dump index cb4e5afce8..9db25a1211 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.unknown_length.dump index a992d16add..348ea639b2 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.unknown_length.dump index bd7f4a1e50..9b67dd3555 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1068000 format 0: + averageBitrate = 686776 + peakBitrate = 0 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.0.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.1.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.2.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.3.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.0.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.1.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.2.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.3.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.unknown_length.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.unknown_length.dump index 16692e6284..b6bb0fa25d 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_av1c.mp4.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1000000 format 0: + averageBitrate = 7536 + peakBitrate = 7536 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.0.dump new file mode 100644 index 0000000000..db9b2132fe --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.0.dump @@ -0,0 +1,350 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 0 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 0 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 0 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 0 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 0 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 0 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 0 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 0 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 0 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 0 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 0 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 0 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 0 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 536870912 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 9529 + sample count = 45 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 43000 + flags = 1 + data = length 23, hash 47DE9131 + sample 1: + time = 66219 + flags = 1 + data = length 6, hash 31EC5206 + sample 2: + time = 89439 + flags = 1 + data = length 148, hash 894A176B + sample 3: + time = 112659 + flags = 1 + data = length 189, hash CEF235A1 + sample 4: + time = 135879 + flags = 1 + data = length 205, hash BBF5F7B0 + sample 5: + time = 159099 + flags = 1 + data = length 210, hash F278B193 + sample 6: + time = 182319 + flags = 1 + data = length 210, hash 82DA1589 + sample 7: + time = 205539 + flags = 1 + data = length 207, hash 5BE231DF + sample 8: + time = 228759 + flags = 1 + data = length 225, hash 18819EE1 + sample 9: + time = 251979 + flags = 1 + data = length 215, hash CA7FA67B + sample 10: + time = 275199 + flags = 1 + data = length 211, hash 581A1C18 + sample 11: + time = 298419 + flags = 1 + data = length 216, hash ADB88187 + sample 12: + time = 321639 + flags = 1 + data = length 229, hash 2E8BA4DC + sample 13: + time = 344859 + flags = 1 + data = length 232, hash 22F0C510 + sample 14: + time = 368079 + flags = 1 + data = length 235, hash 867AD0DC + sample 15: + time = 391299 + flags = 1 + data = length 231, hash 84E823A8 + sample 16: + time = 414519 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 17: + time = 437739 + flags = 1 + data = length 216, hash EAA345AE + sample 18: + time = 460959 + flags = 1 + data = length 229, hash 6957411F + sample 19: + time = 484179 + flags = 1 + data = length 219, hash 41275022 + sample 20: + time = 507399 + flags = 1 + data = length 241, hash 6495DF96 + sample 21: + time = 530619 + flags = 1 + data = length 228, hash 63D95906 + sample 22: + time = 553839 + flags = 1 + data = length 238, hash 34F676F9 + sample 23: + time = 577058 + flags = 1 + data = length 234, hash E5CBC045 + sample 24: + time = 600278 + flags = 1 + data = length 231, hash 5FC43661 + sample 25: + time = 623498 + flags = 1 + data = length 217, hash 682708ED + sample 26: + time = 646718 + flags = 1 + data = length 239, hash D43780FC + sample 27: + time = 669938 + flags = 1 + data = length 243, hash C5E17980 + sample 28: + time = 693158 + flags = 1 + data = length 231, hash AC5837BA + sample 29: + time = 716378 + flags = 1 + data = length 230, hash 169EE895 + sample 30: + time = 739598 + flags = 1 + data = length 238, hash C48FF3F1 + sample 31: + time = 762818 + flags = 1 + data = length 225, hash 531E4599 + sample 32: + time = 786038 + flags = 1 + data = length 232, hash CB3C6B8D + sample 33: + time = 809258 + flags = 1 + data = length 243, hash F8C94C7 + sample 34: + time = 832478 + flags = 1 + data = length 232, hash A646A7D0 + sample 35: + time = 855698 + flags = 1 + data = length 237, hash E8B787A5 + sample 36: + time = 878918 + flags = 1 + data = length 228, hash 3FA7A29F + sample 37: + time = 902138 + flags = 1 + data = length 235, hash B9B33B0A + sample 38: + time = 925358 + flags = 1 + data = length 264, hash 71A4869E + sample 39: + time = 948578 + flags = 1 + data = length 257, hash D049B54C + sample 40: + time = 971798 + flags = 1 + data = length 227, hash 66757231 + sample 41: + time = 995018 + flags = 1 + data = length 227, hash BD374F1B + sample 42: + time = 1018238 + flags = 1 + data = length 235, hash 999477F6 + sample 43: + time = 1041458 + flags = 1 + data = length 229, hash FFF98DF0 + sample 44: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.1.dump new file mode 100644 index 0000000000..1ecc1ee320 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.1.dump @@ -0,0 +1,298 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 0 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 0 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 0 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 0 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 0 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 0 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 0 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 0 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 0 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 0 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 0 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 0 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 0 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 536870912 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 7235 + sample count = 32 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 344859 + flags = 1 + data = length 232, hash 22F0C510 + sample 1: + time = 368079 + flags = 1 + data = length 235, hash 867AD0DC + sample 2: + time = 391299 + flags = 1 + data = length 231, hash 84E823A8 + sample 3: + time = 414519 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 4: + time = 437739 + flags = 1 + data = length 216, hash EAA345AE + sample 5: + time = 460959 + flags = 1 + data = length 229, hash 6957411F + sample 6: + time = 484179 + flags = 1 + data = length 219, hash 41275022 + sample 7: + time = 507399 + flags = 1 + data = length 241, hash 6495DF96 + sample 8: + time = 530619 + flags = 1 + data = length 228, hash 63D95906 + sample 9: + time = 553839 + flags = 1 + data = length 238, hash 34F676F9 + sample 10: + time = 577058 + flags = 1 + data = length 234, hash E5CBC045 + sample 11: + time = 600278 + flags = 1 + data = length 231, hash 5FC43661 + sample 12: + time = 623498 + flags = 1 + data = length 217, hash 682708ED + sample 13: + time = 646718 + flags = 1 + data = length 239, hash D43780FC + sample 14: + time = 669938 + flags = 1 + data = length 243, hash C5E17980 + sample 15: + time = 693158 + flags = 1 + data = length 231, hash AC5837BA + sample 16: + time = 716378 + flags = 1 + data = length 230, hash 169EE895 + sample 17: + time = 739598 + flags = 1 + data = length 238, hash C48FF3F1 + sample 18: + time = 762818 + flags = 1 + data = length 225, hash 531E4599 + sample 19: + time = 786038 + flags = 1 + data = length 232, hash CB3C6B8D + sample 20: + time = 809258 + flags = 1 + data = length 243, hash F8C94C7 + sample 21: + time = 832478 + flags = 1 + data = length 232, hash A646A7D0 + sample 22: + time = 855698 + flags = 1 + data = length 237, hash E8B787A5 + sample 23: + time = 878918 + flags = 1 + data = length 228, hash 3FA7A29F + sample 24: + time = 902138 + flags = 1 + data = length 235, hash B9B33B0A + sample 25: + time = 925358 + flags = 1 + data = length 264, hash 71A4869E + sample 26: + time = 948578 + flags = 1 + data = length 257, hash D049B54C + sample 27: + time = 971798 + flags = 1 + data = length 227, hash 66757231 + sample 28: + time = 995018 + flags = 1 + data = length 227, hash BD374F1B + sample 29: + time = 1018238 + flags = 1 + data = length 235, hash 999477F6 + sample 30: + time = 1041458 + flags = 1 + data = length 229, hash FFF98DF0 + sample 31: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.2.dump new file mode 100644 index 0000000000..e5fb82301b --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.2.dump @@ -0,0 +1,234 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 0 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 0 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 0 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 0 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 0 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 0 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 0 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 0 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 0 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 0 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 0 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 0 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 0 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 536870912 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 3545 + sample count = 16 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 716378 + flags = 1 + data = length 230, hash 169EE895 + sample 1: + time = 739598 + flags = 1 + data = length 238, hash C48FF3F1 + sample 2: + time = 762818 + flags = 1 + data = length 225, hash 531E4599 + sample 3: + time = 786038 + flags = 1 + data = length 232, hash CB3C6B8D + sample 4: + time = 809258 + flags = 1 + data = length 243, hash F8C94C7 + sample 5: + time = 832478 + flags = 1 + data = length 232, hash A646A7D0 + sample 6: + time = 855698 + flags = 1 + data = length 237, hash E8B787A5 + sample 7: + time = 878918 + flags = 1 + data = length 228, hash 3FA7A29F + sample 8: + time = 902138 + flags = 1 + data = length 235, hash B9B33B0A + sample 9: + time = 925358 + flags = 1 + data = length 264, hash 71A4869E + sample 10: + time = 948578 + flags = 1 + data = length 257, hash D049B54C + sample 11: + time = 971798 + flags = 1 + data = length 227, hash 66757231 + sample 12: + time = 995018 + flags = 1 + data = length 227, hash BD374F1B + sample 13: + time = 1018238 + flags = 1 + data = length 235, hash 999477F6 + sample 14: + time = 1041458 + flags = 1 + data = length 229, hash FFF98DF0 + sample 15: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.3.dump new file mode 100644 index 0000000000..722633bf65 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.3.dump @@ -0,0 +1,174 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 0 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 0 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 0 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 0 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 0 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 0 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 0 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 0 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 0 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 0 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 0 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 0 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 0 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 536870912 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 6 + sample count = 1 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.0.dump new file mode 100644 index 0000000000..768f9f8e60 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.0.dump @@ -0,0 +1,350 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 67108864 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 67108864 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 67108864 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 67108864 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 67108864 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 67108864 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 67108864 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 67108864 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 67108864 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 67108864 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 67108864 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 67108864 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 67108864 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 603979776 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 9529 + sample count = 45 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 43000 + flags = 1 + data = length 23, hash 47DE9131 + sample 1: + time = 66219 + flags = 1 + data = length 6, hash 31EC5206 + sample 2: + time = 89439 + flags = 1 + data = length 148, hash 894A176B + sample 3: + time = 112659 + flags = 1 + data = length 189, hash CEF235A1 + sample 4: + time = 135879 + flags = 1 + data = length 205, hash BBF5F7B0 + sample 5: + time = 159099 + flags = 1 + data = length 210, hash F278B193 + sample 6: + time = 182319 + flags = 1 + data = length 210, hash 82DA1589 + sample 7: + time = 205539 + flags = 1 + data = length 207, hash 5BE231DF + sample 8: + time = 228759 + flags = 1 + data = length 225, hash 18819EE1 + sample 9: + time = 251979 + flags = 1 + data = length 215, hash CA7FA67B + sample 10: + time = 275199 + flags = 1 + data = length 211, hash 581A1C18 + sample 11: + time = 298419 + flags = 1 + data = length 216, hash ADB88187 + sample 12: + time = 321639 + flags = 1 + data = length 229, hash 2E8BA4DC + sample 13: + time = 344859 + flags = 1 + data = length 232, hash 22F0C510 + sample 14: + time = 368079 + flags = 1 + data = length 235, hash 867AD0DC + sample 15: + time = 391299 + flags = 1 + data = length 231, hash 84E823A8 + sample 16: + time = 414519 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 17: + time = 437739 + flags = 1 + data = length 216, hash EAA345AE + sample 18: + time = 460959 + flags = 1 + data = length 229, hash 6957411F + sample 19: + time = 484179 + flags = 1 + data = length 219, hash 41275022 + sample 20: + time = 507399 + flags = 1 + data = length 241, hash 6495DF96 + sample 21: + time = 530619 + flags = 1 + data = length 228, hash 63D95906 + sample 22: + time = 553839 + flags = 1 + data = length 238, hash 34F676F9 + sample 23: + time = 577058 + flags = 1 + data = length 234, hash E5CBC045 + sample 24: + time = 600278 + flags = 1 + data = length 231, hash 5FC43661 + sample 25: + time = 623498 + flags = 1 + data = length 217, hash 682708ED + sample 26: + time = 646718 + flags = 1 + data = length 239, hash D43780FC + sample 27: + time = 669938 + flags = 1 + data = length 243, hash C5E17980 + sample 28: + time = 693158 + flags = 1 + data = length 231, hash AC5837BA + sample 29: + time = 716378 + flags = 1 + data = length 230, hash 169EE895 + sample 30: + time = 739598 + flags = 1 + data = length 238, hash C48FF3F1 + sample 31: + time = 762818 + flags = 1 + data = length 225, hash 531E4599 + sample 32: + time = 786038 + flags = 1 + data = length 232, hash CB3C6B8D + sample 33: + time = 809258 + flags = 1 + data = length 243, hash F8C94C7 + sample 34: + time = 832478 + flags = 1 + data = length 232, hash A646A7D0 + sample 35: + time = 855698 + flags = 1 + data = length 237, hash E8B787A5 + sample 36: + time = 878918 + flags = 1 + data = length 228, hash 3FA7A29F + sample 37: + time = 902138 + flags = 1 + data = length 235, hash B9B33B0A + sample 38: + time = 925358 + flags = 1 + data = length 264, hash 71A4869E + sample 39: + time = 948578 + flags = 1 + data = length 257, hash D049B54C + sample 40: + time = 971798 + flags = 1 + data = length 227, hash 66757231 + sample 41: + time = 995018 + flags = 1 + data = length 227, hash BD374F1B + sample 42: + time = 1018238 + flags = 1 + data = length 235, hash 999477F6 + sample 43: + time = 1041458 + flags = 1 + data = length 229, hash FFF98DF0 + sample 44: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.1.dump new file mode 100644 index 0000000000..e1b7d16a54 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.1.dump @@ -0,0 +1,298 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 67108864 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 67108864 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 67108864 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 67108864 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 67108864 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 67108864 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 67108864 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 67108864 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 67108864 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 67108864 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 67108864 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 67108864 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 67108864 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 603979776 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 7235 + sample count = 32 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 344859 + flags = 1 + data = length 232, hash 22F0C510 + sample 1: + time = 368079 + flags = 1 + data = length 235, hash 867AD0DC + sample 2: + time = 391299 + flags = 1 + data = length 231, hash 84E823A8 + sample 3: + time = 414519 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 4: + time = 437739 + flags = 1 + data = length 216, hash EAA345AE + sample 5: + time = 460959 + flags = 1 + data = length 229, hash 6957411F + sample 6: + time = 484179 + flags = 1 + data = length 219, hash 41275022 + sample 7: + time = 507399 + flags = 1 + data = length 241, hash 6495DF96 + sample 8: + time = 530619 + flags = 1 + data = length 228, hash 63D95906 + sample 9: + time = 553839 + flags = 1 + data = length 238, hash 34F676F9 + sample 10: + time = 577058 + flags = 1 + data = length 234, hash E5CBC045 + sample 11: + time = 600278 + flags = 1 + data = length 231, hash 5FC43661 + sample 12: + time = 623498 + flags = 1 + data = length 217, hash 682708ED + sample 13: + time = 646718 + flags = 1 + data = length 239, hash D43780FC + sample 14: + time = 669938 + flags = 1 + data = length 243, hash C5E17980 + sample 15: + time = 693158 + flags = 1 + data = length 231, hash AC5837BA + sample 16: + time = 716378 + flags = 1 + data = length 230, hash 169EE895 + sample 17: + time = 739598 + flags = 1 + data = length 238, hash C48FF3F1 + sample 18: + time = 762818 + flags = 1 + data = length 225, hash 531E4599 + sample 19: + time = 786038 + flags = 1 + data = length 232, hash CB3C6B8D + sample 20: + time = 809258 + flags = 1 + data = length 243, hash F8C94C7 + sample 21: + time = 832478 + flags = 1 + data = length 232, hash A646A7D0 + sample 22: + time = 855698 + flags = 1 + data = length 237, hash E8B787A5 + sample 23: + time = 878918 + flags = 1 + data = length 228, hash 3FA7A29F + sample 24: + time = 902138 + flags = 1 + data = length 235, hash B9B33B0A + sample 25: + time = 925358 + flags = 1 + data = length 264, hash 71A4869E + sample 26: + time = 948578 + flags = 1 + data = length 257, hash D049B54C + sample 27: + time = 971798 + flags = 1 + data = length 227, hash 66757231 + sample 28: + time = 995018 + flags = 1 + data = length 227, hash BD374F1B + sample 29: + time = 1018238 + flags = 1 + data = length 235, hash 999477F6 + sample 30: + time = 1041458 + flags = 1 + data = length 229, hash FFF98DF0 + sample 31: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.2.dump new file mode 100644 index 0000000000..262c8795f2 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.2.dump @@ -0,0 +1,234 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 67108864 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 67108864 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 67108864 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 67108864 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 67108864 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 67108864 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 67108864 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 67108864 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 67108864 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 67108864 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 67108864 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 67108864 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 67108864 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 603979776 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 3545 + sample count = 16 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 716378 + flags = 1 + data = length 230, hash 169EE895 + sample 1: + time = 739598 + flags = 1 + data = length 238, hash C48FF3F1 + sample 2: + time = 762818 + flags = 1 + data = length 225, hash 531E4599 + sample 3: + time = 786038 + flags = 1 + data = length 232, hash CB3C6B8D + sample 4: + time = 809258 + flags = 1 + data = length 243, hash F8C94C7 + sample 5: + time = 832478 + flags = 1 + data = length 232, hash A646A7D0 + sample 6: + time = 855698 + flags = 1 + data = length 237, hash E8B787A5 + sample 7: + time = 878918 + flags = 1 + data = length 228, hash 3FA7A29F + sample 8: + time = 902138 + flags = 1 + data = length 235, hash B9B33B0A + sample 9: + time = 925358 + flags = 1 + data = length 264, hash 71A4869E + sample 10: + time = 948578 + flags = 1 + data = length 257, hash D049B54C + sample 11: + time = 971798 + flags = 1 + data = length 227, hash 66757231 + sample 12: + time = 995018 + flags = 1 + data = length 227, hash BD374F1B + sample 13: + time = 1018238 + flags = 1 + data = length 235, hash 999477F6 + sample 14: + time = 1041458 + flags = 1 + data = length 229, hash FFF98DF0 + sample 15: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.3.dump new file mode 100644 index 0000000000..4e0ce712d0 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.3.dump @@ -0,0 +1,174 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 67108864 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 67108864 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 67108864 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 67108864 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 67108864 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 67108864 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 67108864 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 67108864 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 67108864 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 67108864 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 67108864 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 67108864 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 67108864 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 603979776 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 6 + sample count = 1 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.unknown_length.dump new file mode 100644 index 0000000000..768f9f8e60 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -0,0 +1,350 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 67108864 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 67108864 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 67108864 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 67108864 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 67108864 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 67108864 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 67108864 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 67108864 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 67108864 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 67108864 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 67108864 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 67108864 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 67108864 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 603979776 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 9529 + sample count = 45 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 43000 + flags = 1 + data = length 23, hash 47DE9131 + sample 1: + time = 66219 + flags = 1 + data = length 6, hash 31EC5206 + sample 2: + time = 89439 + flags = 1 + data = length 148, hash 894A176B + sample 3: + time = 112659 + flags = 1 + data = length 189, hash CEF235A1 + sample 4: + time = 135879 + flags = 1 + data = length 205, hash BBF5F7B0 + sample 5: + time = 159099 + flags = 1 + data = length 210, hash F278B193 + sample 6: + time = 182319 + flags = 1 + data = length 210, hash 82DA1589 + sample 7: + time = 205539 + flags = 1 + data = length 207, hash 5BE231DF + sample 8: + time = 228759 + flags = 1 + data = length 225, hash 18819EE1 + sample 9: + time = 251979 + flags = 1 + data = length 215, hash CA7FA67B + sample 10: + time = 275199 + flags = 1 + data = length 211, hash 581A1C18 + sample 11: + time = 298419 + flags = 1 + data = length 216, hash ADB88187 + sample 12: + time = 321639 + flags = 1 + data = length 229, hash 2E8BA4DC + sample 13: + time = 344859 + flags = 1 + data = length 232, hash 22F0C510 + sample 14: + time = 368079 + flags = 1 + data = length 235, hash 867AD0DC + sample 15: + time = 391299 + flags = 1 + data = length 231, hash 84E823A8 + sample 16: + time = 414519 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 17: + time = 437739 + flags = 1 + data = length 216, hash EAA345AE + sample 18: + time = 460959 + flags = 1 + data = length 229, hash 6957411F + sample 19: + time = 484179 + flags = 1 + data = length 219, hash 41275022 + sample 20: + time = 507399 + flags = 1 + data = length 241, hash 6495DF96 + sample 21: + time = 530619 + flags = 1 + data = length 228, hash 63D95906 + sample 22: + time = 553839 + flags = 1 + data = length 238, hash 34F676F9 + sample 23: + time = 577058 + flags = 1 + data = length 234, hash E5CBC045 + sample 24: + time = 600278 + flags = 1 + data = length 231, hash 5FC43661 + sample 25: + time = 623498 + flags = 1 + data = length 217, hash 682708ED + sample 26: + time = 646718 + flags = 1 + data = length 239, hash D43780FC + sample 27: + time = 669938 + flags = 1 + data = length 243, hash C5E17980 + sample 28: + time = 693158 + flags = 1 + data = length 231, hash AC5837BA + sample 29: + time = 716378 + flags = 1 + data = length 230, hash 169EE895 + sample 30: + time = 739598 + flags = 1 + data = length 238, hash C48FF3F1 + sample 31: + time = 762818 + flags = 1 + data = length 225, hash 531E4599 + sample 32: + time = 786038 + flags = 1 + data = length 232, hash CB3C6B8D + sample 33: + time = 809258 + flags = 1 + data = length 243, hash F8C94C7 + sample 34: + time = 832478 + flags = 1 + data = length 232, hash A646A7D0 + sample 35: + time = 855698 + flags = 1 + data = length 237, hash E8B787A5 + sample 36: + time = 878918 + flags = 1 + data = length 228, hash 3FA7A29F + sample 37: + time = 902138 + flags = 1 + data = length 235, hash B9B33B0A + sample 38: + time = 925358 + flags = 1 + data = length 264, hash 71A4869E + sample 39: + time = 948578 + flags = 1 + data = length 257, hash D049B54C + sample 40: + time = 971798 + flags = 1 + data = length 227, hash 66757231 + sample 41: + time = 995018 + flags = 1 + data = length 227, hash BD374F1B + sample 42: + time = 1018238 + flags = 1 + data = length 235, hash 999477F6 + sample 43: + time = 1041458 + flags = 1 + data = length 229, hash FFF98DF0 + sample 44: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.unknown_length.dump new file mode 100644 index 0000000000..db9b2132fe --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_btrt.mp4.unknown_length.dump @@ -0,0 +1,350 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(544500) = [[timeUs=0, position=48]] + getPosition(1089000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 89876 + sample count = 30 + track duration = 1001000 + format 0: + averageBitrate = 718289 + peakBitrate = 718289 + id = 1 + containerMimeType = video/mp4 + sampleMimeType = video/avc + codecs = avc1.64001F + maxInputSize = 36722 + maxNumReorderSamples = 2 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 29, hash 4746B5D9 + data = length 10, hash 7A0D0F2B + sample 0: + time = 0 + flags = 1 + data = length 36692, hash D216076E + sample 1: + time = 66733 + flags = 0 + data = length 5312, hash D45D3CA0 + sample 2: + time = 33366 + flags = 0 + data = length 599, hash 1BE7812D + sample 3: + time = 200200 + flags = 0 + data = length 7735, hash 4490F110 + sample 4: + time = 133466 + flags = 0 + data = length 987, hash 560B5036 + sample 5: + time = 100100 + flags = 0 + data = length 673, hash ED7CD8C7 + sample 6: + time = 166833 + flags = 0 + data = length 523, hash 3020DF50 + sample 7: + time = 333666 + flags = 0 + data = length 6061, hash 736C72B2 + sample 8: + time = 266933 + flags = 0 + data = length 992, hash FE132F23 + sample 9: + time = 233566 + flags = 0 + data = length 623, hash 5B2C1816 + sample 10: + time = 300300 + flags = 0 + data = length 421, hash 742E69C1 + sample 11: + time = 433766 + flags = 0 + data = length 4899, hash F72F86A1 + sample 12: + time = 400400 + flags = 0 + data = length 568, hash 519A8E50 + sample 13: + time = 367033 + flags = 0 + data = length 620, hash 3990AA39 + sample 14: + time = 567233 + flags = 0 + data = length 5450, hash F06EC4AA + sample 15: + time = 500500 + flags = 0 + data = length 1051, hash 92DFA63A + sample 16: + time = 467133 + flags = 0 + data = length 874, hash 69587FB4 + sample 17: + time = 533866 + flags = 0 + data = length 781, hash 36BE495B + sample 18: + time = 700700 + flags = 0 + data = length 4725, hash AC0C8CD3 + sample 19: + time = 633966 + flags = 0 + data = length 1022, hash 5D8BFF34 + sample 20: + time = 600600 + flags = 0 + data = length 790, hash 99413A99 + sample 21: + time = 667333 + flags = 0 + data = length 610, hash 5E129290 + sample 22: + time = 834166 + flags = 0 + data = length 2751, hash 769974CB + sample 23: + time = 767433 + flags = 0 + data = length 745, hash B78A477A + sample 24: + time = 734066 + flags = 0 + data = length 621, hash CF741E7A + sample 25: + time = 800800 + flags = 0 + data = length 505, hash 1DB4894E + sample 26: + time = 967633 + flags = 0 + data = length 1268, hash C15348DC + sample 27: + time = 900900 + flags = 0 + data = length 880, hash C2DE85D0 + sample 28: + time = 867533 + flags = 0 + data = length 530, hash C98BC6A8 + sample 29: + time = 934266 + flags = 536870912 + data = length 568, hash 4FE5C8EA +track 1: + total output bytes = 9529 + sample count = 45 + track duration = 1089000 + format 0: + averageBitrate = 72956 + peakBitrate = 74502 + id = 2 + containerMimeType = video/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.7.100], Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 43000 + flags = 1 + data = length 23, hash 47DE9131 + sample 1: + time = 66219 + flags = 1 + data = length 6, hash 31EC5206 + sample 2: + time = 89439 + flags = 1 + data = length 148, hash 894A176B + sample 3: + time = 112659 + flags = 1 + data = length 189, hash CEF235A1 + sample 4: + time = 135879 + flags = 1 + data = length 205, hash BBF5F7B0 + sample 5: + time = 159099 + flags = 1 + data = length 210, hash F278B193 + sample 6: + time = 182319 + flags = 1 + data = length 210, hash 82DA1589 + sample 7: + time = 205539 + flags = 1 + data = length 207, hash 5BE231DF + sample 8: + time = 228759 + flags = 1 + data = length 225, hash 18819EE1 + sample 9: + time = 251979 + flags = 1 + data = length 215, hash CA7FA67B + sample 10: + time = 275199 + flags = 1 + data = length 211, hash 581A1C18 + sample 11: + time = 298419 + flags = 1 + data = length 216, hash ADB88187 + sample 12: + time = 321639 + flags = 1 + data = length 229, hash 2E8BA4DC + sample 13: + time = 344859 + flags = 1 + data = length 232, hash 22F0C510 + sample 14: + time = 368079 + flags = 1 + data = length 235, hash 867AD0DC + sample 15: + time = 391299 + flags = 1 + data = length 231, hash 84E823A8 + sample 16: + time = 414519 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 17: + time = 437739 + flags = 1 + data = length 216, hash EAA345AE + sample 18: + time = 460959 + flags = 1 + data = length 229, hash 6957411F + sample 19: + time = 484179 + flags = 1 + data = length 219, hash 41275022 + sample 20: + time = 507399 + flags = 1 + data = length 241, hash 6495DF96 + sample 21: + time = 530619 + flags = 1 + data = length 228, hash 63D95906 + sample 22: + time = 553839 + flags = 1 + data = length 238, hash 34F676F9 + sample 23: + time = 577058 + flags = 1 + data = length 234, hash E5CBC045 + sample 24: + time = 600278 + flags = 1 + data = length 231, hash 5FC43661 + sample 25: + time = 623498 + flags = 1 + data = length 217, hash 682708ED + sample 26: + time = 646718 + flags = 1 + data = length 239, hash D43780FC + sample 27: + time = 669938 + flags = 1 + data = length 243, hash C5E17980 + sample 28: + time = 693158 + flags = 1 + data = length 231, hash AC5837BA + sample 29: + time = 716378 + flags = 1 + data = length 230, hash 169EE895 + sample 30: + time = 739598 + flags = 1 + data = length 238, hash C48FF3F1 + sample 31: + time = 762818 + flags = 1 + data = length 225, hash 531E4599 + sample 32: + time = 786038 + flags = 1 + data = length 232, hash CB3C6B8D + sample 33: + time = 809258 + flags = 1 + data = length 243, hash F8C94C7 + sample 34: + time = 832478 + flags = 1 + data = length 232, hash A646A7D0 + sample 35: + time = 855698 + flags = 1 + data = length 237, hash E8B787A5 + sample 36: + time = 878918 + flags = 1 + data = length 228, hash 3FA7A29F + sample 37: + time = 902138 + flags = 1 + data = length 235, hash B9B33B0A + sample 38: + time = 925358 + flags = 1 + data = length 264, hash 71A4869E + sample 39: + time = 948578 + flags = 1 + data = length 257, hash D049B54C + sample 40: + time = 971798 + flags = 1 + data = length 227, hash 66757231 + sample 41: + time = 995018 + flags = 1 + data = length 227, hash BD374F1B + sample 42: + time = 1018238 + flags = 1 + data = length 235, hash 999477F6 + sample 43: + time = 1041458 + flags = 1 + data = length 229, hash FFF98DF0 + sample 44: + time = 1064678 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.0.dump index 82ce3d211d..d1db749549 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.1.dump index 6c51b45bd6..188e27ea0b 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.2.dump index c5482fbcbe..fa1dd07cd7 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.3.dump index 322d0da46d..3a7360ae08 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.0.dump index 82ce3d211d..d1db749549 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.1.dump index 6c51b45bd6..188e27ea0b 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.2.dump index c5482fbcbe..fa1dd07cd7 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.3.dump index 322d0da46d..3a7360ae08 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.unknown_length.dump index 82ce3d211d..d1db749549 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.unknown_length.dump index 82ce3d211d..d1db749549 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 60 track duration = 1001000 format 0: + averageBitrate = 2126601 + peakBitrate = 2514227 id = 1 containerMimeType = video/mp4 sampleMimeType = video/av01 diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.0.dump index a73a901d33..ef29c135fb 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.1.dump index a73a901d33..ef29c135fb 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.2.dump index a73a901d33..ef29c135fb 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.3.dump index a73a901d33..ef29c135fb 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.0.dump index 994a533ace..db2fc85ff1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.0.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.0.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.1.dump index 994a533ace..db2fc85ff1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.1.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.1.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.2.dump index 994a533ace..db2fc85ff1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.2.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.2.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.3.dump index 994a533ace..db2fc85ff1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.3.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.3.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.unknown_length.dump index 994a533ace..db2fc85ff1 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.unknown_length.dump index a73a901d33..ef29c135fb 100644 --- a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.unknown_length.dump +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_invalid_nalu.mp4.unknown_length.dump @@ -11,6 +11,8 @@ track 0: sample count = 30 track duration = 1001000 format 0: + averageBitrate = 718289 + peakBitrate = 718289 id = 1 containerMimeType = video/mp4 sampleMimeType = video/avc diff --git a/libraries/test_data/src/test/assets/media/mp4/sample_with_btrt.mp4 b/libraries/test_data/src/test/assets/media/mp4/sample_with_btrt.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..2c02ea80b1a30fbaf74facc15acd9ed9c6a5f37f GIT binary patch literal 101916 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 icu>D!m6F&P8&GlGLqgot|6Tn8%NVKxgyi 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:FTeJ4}cT5=J5 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