From da05a1a66bc70686be5db0838aa10b89b5c8c6ce Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Wed, 11 Dec 2024 07:41:39 -0800 Subject: [PATCH] Fix handling of CBR audio in some AVI files Before this change, the value of the `dwLength` in the stream header was interpreted as the number of chunks in the file. Seeking and timestamp calculation use the media duration and total chunk count. However, in some files the `dwLength` field appears not to store the number of chunks. For example, there are CBR MP3 and AC3 files where this field seems to store the total number of bytes of compressed media instead. That caused seeking and timestamp calculation to give much smaller values than expected (because the `dwLength` is very large), which broke seeking. Work around this using the `idx1` index header if present. We only support audio formats where every audio sample is a sync sample in AVI, and all chunks should therefore be listed in this index. Based on testing on many sample AVI files this gives a reliable total chunk count and fixes seeking. The test media file is a transcoded version of Big Buck Bunny but manually edited to overwrite the length, rate and sample size header files to simulate the error case. PiperOrigin-RevId: 705103651 --- RELEASENOTES.md | 3 + .../media3/extractor/avi/AviExtractor.java | 4 +- .../extractor/avi/AviStreamHeaderChunk.java | 15 +- .../media3/extractor/avi/ChunkReader.java | 13 +- .../extractor/avi/AviExtractorTest.java | 8 + .../avi/sample-with-large-length.avi.0.dump | 573 ++++++++++++++++++ .../avi/sample-with-large-length.avi.1.dump | 569 +++++++++++++++++ .../avi/sample-with-large-length.avi.2.dump | 569 +++++++++++++++++ .../avi/sample-with-large-length.avi.3.dump | 569 +++++++++++++++++ ...-with-large-length.avi.unknown_length.dump | 573 ++++++++++++++++++ .../media/avi/sample-with-large-length.avi | Bin 0 -> 65658 bytes 11 files changed, 2889 insertions(+), 7 deletions(-) create mode 100644 libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/media/avi/sample-with-large-length.avi diff --git a/RELEASENOTES.md b/RELEASENOTES.md index fff06b960d..e3a0fdf715 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -40,6 +40,9 @@ * MP3: Don't stop playback early when a `VBRI` frame's table of contents doesn't cover all the MP3 data in a file ([#1904](https://github.com/androidx/media/issues/1904)). + * AVI: Fix handling of files with constant bitrate compressed audio where + the stream header stores the number of bytes instead of the number of + chunks. * DataSource: * Audio: * Fix `onAudioPositionAdvancing` to be called when playback resumes diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/avi/AviExtractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/avi/AviExtractor.java index 6b2e8358a2..d8dcb1f503 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/avi/AviExtractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/avi/AviExtractor.java @@ -406,7 +406,7 @@ public final class AviExtractor implements Extractor { int chunkId = body.readLittleEndianInt(); int flags = body.readLittleEndianInt(); long offset = body.readLittleEndianInt() + seekOffset; - body.readLittleEndianInt(); // We ignore the size. + body.skipBytes(4); // Ignore size. ChunkReader chunkReader = getChunkReader(chunkId); if (chunkReader == null) { // We ignore unknown chunk IDs. @@ -416,7 +416,7 @@ public final class AviExtractor implements Extractor { offset, /* isKeyFrame= */ (flags & AVIIF_KEYFRAME) == AVIIF_KEYFRAME); } for (ChunkReader chunkReader : chunkReaders) { - chunkReader.compactIndex(); + chunkReader.commitIndex(); } seekMapHasBeenOutput = true; if (chunkReaders.length == 0) { diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/avi/AviStreamHeaderChunk.java b/libraries/extractor/src/main/java/androidx/media3/extractor/avi/AviStreamHeaderChunk.java index 99f83e8824..7c499ed360 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/avi/AviStreamHeaderChunk.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/avi/AviStreamHeaderChunk.java @@ -34,9 +34,10 @@ import androidx.media3.common.util.Util; body.skipBytes(4); // dwStart (4 bytes). int length = body.readLittleEndianInt(); int suggestedBufferSize = body.readLittleEndianInt(); - body.skipBytes(8); // dwQuality (4 bytes), dwSampleSize (4 bytes). + body.skipBytes(4); // dwQuality (4 bytes). + int sampleSize = body.readLittleEndianInt(); return new AviStreamHeaderChunk( - streamType, initialFrames, scale, rate, length, suggestedBufferSize); + streamType, initialFrames, scale, rate, length, suggestedBufferSize, sampleSize); } public final int streamType; @@ -45,15 +46,23 @@ import androidx.media3.common.util.Util; public final int rate; public final int length; public final int suggestedBufferSize; + public final int sampleSize; private AviStreamHeaderChunk( - int streamType, int initialFrames, int scale, int rate, int length, int suggestedBufferSize) { + int streamType, + int initialFrames, + int scale, + int rate, + int length, + int suggestedBufferSize, + int sampleSize) { this.streamType = streamType; this.initialFrames = initialFrames; this.scale = scale; this.rate = rate; this.length = length; this.suggestedBufferSize = suggestedBufferSize; + this.sampleSize = sampleSize; } @Override diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/avi/ChunkReader.java b/libraries/extractor/src/main/java/androidx/media3/extractor/avi/ChunkReader.java index f171c77721..cbf82cf824 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/avi/ChunkReader.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/avi/ChunkReader.java @@ -64,6 +64,7 @@ import java.util.Arrays; private final long durationUs; + private int chunkCount; private int currentChunkSize; private int bytesRemainingInCurrentChunk; @@ -90,6 +91,7 @@ import java.util.Arrays; firstIndexChunkOffset = C.INDEX_UNSET; keyFrameOffsets = new long[INITIAL_INDEX_SIZE]; keyFrameIndices = new int[INITIAL_INDEX_SIZE]; + chunkCount = streamHeaderChunk.length; } public void appendIndexChunk(long offset, boolean isKeyFrame) { @@ -120,9 +122,16 @@ import java.util.Arrays; return getChunkTimestampUs(/* chunkIndex= */ 1); } - public void compactIndex() { + public void commitIndex() { keyFrameOffsets = Arrays.copyOf(keyFrameOffsets, indexSize); keyFrameIndices = Arrays.copyOf(keyFrameIndices, indexSize); + if (isAudio() && streamHeaderChunk.sampleSize != 0 && indexSize > 0) { + // In some files the AVI stream header chunk for audio has the number of bytes of audio in + // dwLength instead of the number of chunks. Overwrite the chunk size to use the size of the + // index, which should match the number of chunks because we only support formats where every + // audio sample is a sync sample, and every sync sample should be in the index. + chunkCount = indexSize; + } } public boolean handlesChunkId(int chunkId) { @@ -203,7 +212,7 @@ import java.util.Arrays; } private long getChunkTimestampUs(int chunkIndex) { - return durationUs * chunkIndex / streamHeaderChunk.length; + return durationUs * chunkIndex / chunkCount; } private SeekPoint getSeekPoint(int keyFrameIndex) { diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/avi/AviExtractorTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/avi/AviExtractorTest.java index d1bf169d23..eef899b1ea 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/avi/AviExtractorTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/avi/AviExtractorTest.java @@ -42,4 +42,12 @@ public final class AviExtractorTest { "media/avi/sample.avi", simulationConfig); } + + @Test + public void aviSampleWithLargeLength() throws Exception { + ExtractorAsserts.assertBehavior( + () -> new AviExtractor(/* extractorFlags= */ 0, SubtitleParser.Factory.UNSUPPORTED), + "media/avi/sample-with-large-length.avi", + simulationConfig); + } } diff --git a/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.0.dump b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.0.dump new file mode 100644 index 0000000000..49929884ce --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.0.dump @@ -0,0 +1,573 @@ +seekMap: + isSeekable = true + duration = 2037551 + getPosition(0) = [[timeUs=0, position=10192]] + getPosition(1) = [[timeUs=0, position=10192]] + getPosition(1018775) = [[timeUs=0, position=10618]] + getPosition(2037551) = [[timeUs=0, position=10618]] +numberOfTracks = 2 +track 0: + total output bytes = 19538 + sample count = 58 + track duration = 1966666 + format 0: + id = 0 + sampleMimeType = video/avc + maxInputSize = 1858 + width = 256 + height = 144 + sample 0: + time = 0 + flags = 1 + data = length 794, hash E51B392 + sample 1: + time = 66666 + flags = 0 + data = length 1269, hash F97B0D34 + sample 2: + time = 99999 + flags = 0 + data = length 1858, hash BF98E83E + sample 3: + time = 133333 + flags = 0 + data = length 12, hash 57B58178 + sample 4: + time = 166666 + flags = 0 + data = length 572, hash 6D29902A + sample 5: + time = 199999 + flags = 0 + data = length 321, hash 989CC24 + sample 6: + time = 233333 + flags = 0 + data = length 104, hash C85D189C + sample 7: + time = 266666 + flags = 0 + data = length 15, hash 54DD1283 + sample 8: + time = 299999 + flags = 0 + data = length 47, hash 19C0FB57 + sample 9: + time = 333333 + flags = 0 + data = length 871, hash A2E94A8E + sample 10: + time = 366666 + flags = 0 + data = length 83, hash B681B415 + sample 11: + time = 399999 + flags = 0 + data = length 50, hash 47CF138C + sample 12: + time = 433333 + flags = 0 + data = length 24, hash 60C537AA + sample 13: + time = 466666 + flags = 0 + data = length 1372, hash 7CD6E34D + sample 14: + time = 499999 + flags = 0 + data = length 79, hash FBD5B0AB + sample 15: + time = 533333 + flags = 0 + data = length 74, hash 834B3EED + sample 16: + time = 566666 + flags = 0 + data = length 59, hash FDD25EF3 + sample 17: + time = 599999 + flags = 0 + data = length 948, hash 66EE7B18 + sample 18: + time = 633333 + flags = 0 + data = length 146, hash 1A35D839 + sample 19: + time = 666666 + flags = 0 + data = length 52, hash E2BF7ECF + sample 20: + time = 699999 + flags = 0 + data = length 819, hash 2B961CBC + sample 21: + time = 733333 + flags = 0 + data = length 88, hash F5BC3699 + sample 22: + time = 766666 + flags = 0 + data = length 348, hash 66A236DA + sample 23: + time = 799999 + flags = 0 + data = length 174, hash 6AE36E16 + sample 24: + time = 833333 + flags = 0 + data = length 47, hash 3D24B5BF + sample 25: + time = 866666 + flags = 0 + data = length 90, hash 8EADE0DF + sample 26: + time = 899999 + flags = 0 + data = length 1052, hash 16A95E6A + sample 27: + time = 933333 + flags = 0 + data = length 174, hash 1F36339D + sample 28: + time = 966666 + flags = 0 + data = length 76, hash 10C85E1 + sample 29: + time = 999999 + flags = 0 + data = length 205, hash EABF2BD + sample 30: + time = 1033332 + flags = 0 + data = length 807, hash 42FAA50 + sample 31: + time = 1066666 + flags = 0 + data = length 243, hash 4B761AA4 + sample 32: + time = 1099999 + flags = 0 + data = length 139, hash C86B0369 + sample 33: + time = 1133332 + flags = 0 + data = length 78, hash 2BB2A65E + sample 34: + time = 1166666 + flags = 0 + data = length 825, hash 3E330796 + sample 35: + time = 1199999 + flags = 0 + data = length 584, hash BF3E78FF + sample 36: + time = 1233332 + flags = 0 + data = length 301, hash 29AD84AB + sample 37: + time = 1266666 + flags = 0 + data = length 232, hash DC364C13 + sample 38: + time = 1299999 + flags = 0 + data = length 144, hash 44500BAF + sample 39: + time = 1333332 + flags = 0 + data = length 739, hash EA2DBF29 + sample 40: + time = 1366666 + flags = 0 + data = length 412, hash 9A7299B6 + sample 41: + time = 1399999 + flags = 0 + data = length 597, hash 8BB4D193 + sample 42: + time = 1433332 + flags = 0 + data = length 297, hash A655FD4C + sample 43: + time = 1466666 + flags = 0 + data = length 212, hash A6A1DA37 + sample 44: + time = 1499999 + flags = 0 + data = length 223, hash 2C4CE2AB + sample 45: + time = 1533332 + flags = 0 + data = length 697, hash 79DABA1E + sample 46: + time = 1566666 + flags = 0 + data = length 356, hash 6183273 + sample 47: + time = 1599999 + flags = 0 + data = length 259, hash 931056F0 + sample 48: + time = 1633332 + flags = 0 + data = length 227, hash 74A9B2CF + sample 49: + time = 1666666 + flags = 0 + data = length 43, hash 1664850A + sample 50: + time = 1699999 + flags = 0 + data = length 19, hash B3E68F9 + sample 51: + time = 1733332 + flags = 0 + data = length 14, hash 57B3B0EA + sample 52: + time = 1766666 + flags = 0 + data = length 109, hash 33F32F67 + sample 53: + time = 1799999 + flags = 0 + data = length 21, hash 47523E7 + sample 54: + time = 1833332 + flags = 0 + data = length 14, hash 9D5C990C + sample 55: + time = 1866666 + flags = 0 + data = length 14, hash 5C20A241 + sample 56: + time = 1899999 + flags = 0 + data = length 84, hash 6EC1E69C + sample 57: + time = 1933332 + flags = 0 + data = length 25, hash BAFA5220 +track 1: + total output bytes = 32600 + sample count = 78 + track duration = 2037551 + format 0: + id = 1 + sampleMimeType = audio/mpeg + maxInputSize = 418 + channelCount = 2 + sampleRate = 44100 + sample 0: + time = 0 + flags = 1 + data = length 417, hash 929E87CB + sample 1: + time = 26122 + flags = 1 + data = length 418, hash 6B809A2C + sample 2: + time = 52244 + flags = 1 + data = length 418, hash 2B5563D9 + sample 3: + time = 78367 + flags = 1 + data = length 418, hash 98748D4E + sample 4: + time = 104489 + flags = 1 + data = length 418, hash 2FD35E33 + sample 5: + time = 130612 + flags = 1 + data = length 418, hash 530A8AB0 + sample 6: + time = 156734 + flags = 1 + data = length 418, hash 479DC512 + sample 7: + time = 182857 + flags = 1 + data = length 418, hash 44FD78BD + sample 8: + time = 208979 + flags = 1 + data = length 418, hash E645C22C + sample 9: + time = 235102 + flags = 1 + data = length 418, hash ADD19311 + sample 10: + time = 261224 + flags = 1 + data = length 418, hash 1B369E9F + sample 11: + time = 287346 + flags = 1 + data = length 418, hash 5E2D4C48 + sample 12: + time = 313469 + flags = 1 + data = length 418, hash CE2ADAF7 + sample 13: + time = 339591 + flags = 1 + data = length 418, hash 4FAC77C + sample 14: + time = 365714 + flags = 1 + data = length 418, hash 42D43042 + sample 15: + time = 391836 + flags = 1 + data = length 418, hash DD361ADB + sample 16: + time = 417959 + flags = 1 + data = length 418, hash 2BBC2C9B + sample 17: + time = 444081 + flags = 1 + data = length 418, hash 4FCDE685 + sample 18: + time = 470204 + flags = 1 + data = length 418, hash 309C89C7 + sample 19: + time = 496326 + flags = 1 + data = length 418, hash 78DDE345 + sample 20: + time = 522448 + flags = 1 + data = length 418, hash E6BECDD1 + sample 21: + time = 548571 + flags = 1 + data = length 418, hash C19014D7 + sample 22: + time = 574693 + flags = 1 + data = length 418, hash 62F4740C + sample 23: + time = 600816 + flags = 1 + data = length 418, hash BDE2439A + sample 24: + time = 626938 + flags = 1 + data = length 418, hash 5293CAC6 + sample 25: + time = 653061 + flags = 1 + data = length 417, hash 4DC35659 + sample 26: + time = 679183 + flags = 1 + data = length 418, hash 44A91C4C + sample 27: + time = 705306 + flags = 1 + data = length 418, hash 22E329E0 + sample 28: + time = 731428 + flags = 1 + data = length 418, hash 22C08A37 + sample 29: + time = 757551 + flags = 1 + data = length 418, hash 5917DE43 + sample 30: + time = 783673 + flags = 1 + data = length 418, hash 8A635616 + sample 31: + time = 809795 + flags = 1 + data = length 418, hash 2BC2D355 + sample 32: + time = 835918 + flags = 1 + data = length 418, hash 4D6C5C5 + sample 33: + time = 862040 + flags = 1 + data = length 418, hash 4D405A08 + sample 34: + time = 888163 + flags = 1 + data = length 418, hash F3A1AB29 + sample 35: + time = 914285 + flags = 1 + data = length 418, hash 9E14E0F0 + sample 36: + time = 940408 + flags = 1 + data = length 418, hash FA9CB2EA + sample 37: + time = 966530 + flags = 1 + data = length 418, hash 69C6ECC1 + sample 38: + time = 992653 + flags = 1 + data = length 418, hash C016523B + sample 39: + time = 1018775 + flags = 1 + data = length 418, hash A7A34454 + sample 40: + time = 1044897 + flags = 1 + data = length 418, hash F4F0A99 + sample 41: + time = 1071020 + flags = 1 + data = length 418, hash 9AB89C0E + sample 42: + time = 1097142 + flags = 1 + data = length 418, hash 283B271 + sample 43: + time = 1123265 + flags = 1 + data = length 418, hash 413801D1 + sample 44: + time = 1149387 + flags = 1 + data = length 418, hash B0FBC474 + sample 45: + time = 1175510 + flags = 1 + data = length 418, hash 3D56A051 + sample 46: + time = 1201632 + flags = 1 + data = length 418, hash 21E56735 + sample 47: + time = 1227755 + flags = 1 + data = length 418, hash 4F494338 + sample 48: + time = 1253877 + flags = 1 + data = length 418, hash FBF06EAD + sample 49: + time = 1279999 + flags = 1 + data = length 417, hash 56198E7 + sample 50: + time = 1306122 + flags = 1 + data = length 418, hash C8E504E8 + sample 51: + time = 1332244 + flags = 1 + data = length 418, hash AAE14D02 + sample 52: + time = 1358367 + flags = 1 + data = length 418, hash 3B99EC44 + sample 53: + time = 1384489 + flags = 1 + data = length 418, hash 40B9A1BA + sample 54: + time = 1410612 + flags = 1 + data = length 418, hash 782D4052 + sample 55: + time = 1436734 + flags = 1 + data = length 418, hash 5DE9ECE6 + sample 56: + time = 1462857 + flags = 1 + data = length 418, hash BC628CA9 + sample 57: + time = 1488979 + flags = 1 + data = length 418, hash 1FD43DA0 + sample 58: + time = 1515102 + flags = 1 + data = length 418, hash E66C956B + sample 59: + time = 1541224 + flags = 1 + data = length 418, hash C4FA9048 + sample 60: + time = 1567346 + flags = 1 + data = length 418, hash 3EC107FD + sample 61: + time = 1593469 + flags = 1 + data = length 418, hash EC5C955D + sample 62: + time = 1619591 + flags = 1 + data = length 418, hash 177D7541 + sample 63: + time = 1645714 + flags = 1 + data = length 418, hash D53D7C61 + sample 64: + time = 1671836 + flags = 1 + data = length 418, hash 41994E54 + sample 65: + time = 1697959 + flags = 1 + data = length 418, hash 10A13197 + sample 66: + time = 1724081 + flags = 1 + data = length 418, hash 6B964E7A + sample 67: + time = 1750204 + flags = 1 + data = length 418, hash 23169DC3 + sample 68: + time = 1776326 + flags = 1 + data = length 418, hash BCB49A2 + sample 69: + time = 1802448 + flags = 1 + data = length 418, hash EAD6106F + sample 70: + time = 1828571 + flags = 1 + data = length 418, hash 5DB634E3 + sample 71: + time = 1854693 + flags = 1 + data = length 418, hash 74E5B060 + sample 72: + time = 1880816 + flags = 1 + data = length 418, hash EA5A9CB9 + sample 73: + time = 1906938 + flags = 1 + data = length 418, hash 63A62EEB + sample 74: + time = 1933061 + flags = 1 + data = length 417, hash B77518E9 + sample 75: + time = 1959183 + flags = 1 + data = length 418, hash BB8125FF + sample 76: + time = 1985306 + flags = 1 + data = length 418, hash 8034AE66 + sample 77: + time = 2011428 + flags = 1 + data = length 418, hash 4ED5A004 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.1.dump b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.1.dump new file mode 100644 index 0000000000..a23519eb7f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.1.dump @@ -0,0 +1,569 @@ +seekMap: + isSeekable = true + duration = 2037551 + getPosition(0) = [[timeUs=0, position=10192]] + getPosition(1) = [[timeUs=0, position=10192]] + getPosition(1018775) = [[timeUs=0, position=10618]] + getPosition(2037551) = [[timeUs=0, position=10618]] +numberOfTracks = 2 +track 0: + total output bytes = 19538 + sample count = 58 + track duration = 1966666 + format 0: + id = 0 + sampleMimeType = video/avc + maxInputSize = 1858 + width = 256 + height = 144 + sample 0: + time = 0 + flags = 1 + data = length 794, hash E51B392 + sample 1: + time = 66666 + flags = 0 + data = length 1269, hash F97B0D34 + sample 2: + time = 99999 + flags = 0 + data = length 1858, hash BF98E83E + sample 3: + time = 133333 + flags = 0 + data = length 12, hash 57B58178 + sample 4: + time = 166666 + flags = 0 + data = length 572, hash 6D29902A + sample 5: + time = 199999 + flags = 0 + data = length 321, hash 989CC24 + sample 6: + time = 233333 + flags = 0 + data = length 104, hash C85D189C + sample 7: + time = 266666 + flags = 0 + data = length 15, hash 54DD1283 + sample 8: + time = 299999 + flags = 0 + data = length 47, hash 19C0FB57 + sample 9: + time = 333333 + flags = 0 + data = length 871, hash A2E94A8E + sample 10: + time = 366666 + flags = 0 + data = length 83, hash B681B415 + sample 11: + time = 399999 + flags = 0 + data = length 50, hash 47CF138C + sample 12: + time = 433333 + flags = 0 + data = length 24, hash 60C537AA + sample 13: + time = 466666 + flags = 0 + data = length 1372, hash 7CD6E34D + sample 14: + time = 499999 + flags = 0 + data = length 79, hash FBD5B0AB + sample 15: + time = 533333 + flags = 0 + data = length 74, hash 834B3EED + sample 16: + time = 566666 + flags = 0 + data = length 59, hash FDD25EF3 + sample 17: + time = 599999 + flags = 0 + data = length 948, hash 66EE7B18 + sample 18: + time = 633333 + flags = 0 + data = length 146, hash 1A35D839 + sample 19: + time = 666666 + flags = 0 + data = length 52, hash E2BF7ECF + sample 20: + time = 699999 + flags = 0 + data = length 819, hash 2B961CBC + sample 21: + time = 733333 + flags = 0 + data = length 88, hash F5BC3699 + sample 22: + time = 766666 + flags = 0 + data = length 348, hash 66A236DA + sample 23: + time = 799999 + flags = 0 + data = length 174, hash 6AE36E16 + sample 24: + time = 833333 + flags = 0 + data = length 47, hash 3D24B5BF + sample 25: + time = 866666 + flags = 0 + data = length 90, hash 8EADE0DF + sample 26: + time = 899999 + flags = 0 + data = length 1052, hash 16A95E6A + sample 27: + time = 933333 + flags = 0 + data = length 174, hash 1F36339D + sample 28: + time = 966666 + flags = 0 + data = length 76, hash 10C85E1 + sample 29: + time = 999999 + flags = 0 + data = length 205, hash EABF2BD + sample 30: + time = 1033332 + flags = 0 + data = length 807, hash 42FAA50 + sample 31: + time = 1066666 + flags = 0 + data = length 243, hash 4B761AA4 + sample 32: + time = 1099999 + flags = 0 + data = length 139, hash C86B0369 + sample 33: + time = 1133332 + flags = 0 + data = length 78, hash 2BB2A65E + sample 34: + time = 1166666 + flags = 0 + data = length 825, hash 3E330796 + sample 35: + time = 1199999 + flags = 0 + data = length 584, hash BF3E78FF + sample 36: + time = 1233332 + flags = 0 + data = length 301, hash 29AD84AB + sample 37: + time = 1266666 + flags = 0 + data = length 232, hash DC364C13 + sample 38: + time = 1299999 + flags = 0 + data = length 144, hash 44500BAF + sample 39: + time = 1333332 + flags = 0 + data = length 739, hash EA2DBF29 + sample 40: + time = 1366666 + flags = 0 + data = length 412, hash 9A7299B6 + sample 41: + time = 1399999 + flags = 0 + data = length 597, hash 8BB4D193 + sample 42: + time = 1433332 + flags = 0 + data = length 297, hash A655FD4C + sample 43: + time = 1466666 + flags = 0 + data = length 212, hash A6A1DA37 + sample 44: + time = 1499999 + flags = 0 + data = length 223, hash 2C4CE2AB + sample 45: + time = 1533332 + flags = 0 + data = length 697, hash 79DABA1E + sample 46: + time = 1566666 + flags = 0 + data = length 356, hash 6183273 + sample 47: + time = 1599999 + flags = 0 + data = length 259, hash 931056F0 + sample 48: + time = 1633332 + flags = 0 + data = length 227, hash 74A9B2CF + sample 49: + time = 1666666 + flags = 0 + data = length 43, hash 1664850A + sample 50: + time = 1699999 + flags = 0 + data = length 19, hash B3E68F9 + sample 51: + time = 1733332 + flags = 0 + data = length 14, hash 57B3B0EA + sample 52: + time = 1766666 + flags = 0 + data = length 109, hash 33F32F67 + sample 53: + time = 1799999 + flags = 0 + data = length 21, hash 47523E7 + sample 54: + time = 1833332 + flags = 0 + data = length 14, hash 9D5C990C + sample 55: + time = 1866666 + flags = 0 + data = length 14, hash 5C20A241 + sample 56: + time = 1899999 + flags = 0 + data = length 84, hash 6EC1E69C + sample 57: + time = 1933332 + flags = 0 + data = length 25, hash BAFA5220 +track 1: + total output bytes = 32183 + sample count = 77 + track duration = 2037551 + format 0: + id = 1 + sampleMimeType = audio/mpeg + maxInputSize = 418 + channelCount = 2 + sampleRate = 44100 + sample 0: + time = 0 + flags = 1 + data = length 418, hash 6B809A2C + sample 1: + time = 26122 + flags = 1 + data = length 418, hash 2B5563D9 + sample 2: + time = 52244 + flags = 1 + data = length 418, hash 98748D4E + sample 3: + time = 78367 + flags = 1 + data = length 418, hash 2FD35E33 + sample 4: + time = 104489 + flags = 1 + data = length 418, hash 530A8AB0 + sample 5: + time = 130612 + flags = 1 + data = length 418, hash 479DC512 + sample 6: + time = 156734 + flags = 1 + data = length 418, hash 44FD78BD + sample 7: + time = 182857 + flags = 1 + data = length 418, hash E645C22C + sample 8: + time = 208979 + flags = 1 + data = length 418, hash ADD19311 + sample 9: + time = 235102 + flags = 1 + data = length 418, hash 1B369E9F + sample 10: + time = 261224 + flags = 1 + data = length 418, hash 5E2D4C48 + sample 11: + time = 287346 + flags = 1 + data = length 418, hash CE2ADAF7 + sample 12: + time = 313469 + flags = 1 + data = length 418, hash 4FAC77C + sample 13: + time = 339591 + flags = 1 + data = length 418, hash 42D43042 + sample 14: + time = 365714 + flags = 1 + data = length 418, hash DD361ADB + sample 15: + time = 391836 + flags = 1 + data = length 418, hash 2BBC2C9B + sample 16: + time = 417959 + flags = 1 + data = length 418, hash 4FCDE685 + sample 17: + time = 444081 + flags = 1 + data = length 418, hash 309C89C7 + sample 18: + time = 470204 + flags = 1 + data = length 418, hash 78DDE345 + sample 19: + time = 496326 + flags = 1 + data = length 418, hash E6BECDD1 + sample 20: + time = 522448 + flags = 1 + data = length 418, hash C19014D7 + sample 21: + time = 548571 + flags = 1 + data = length 418, hash 62F4740C + sample 22: + time = 574693 + flags = 1 + data = length 418, hash BDE2439A + sample 23: + time = 600816 + flags = 1 + data = length 418, hash 5293CAC6 + sample 24: + time = 626938 + flags = 1 + data = length 417, hash 4DC35659 + sample 25: + time = 653061 + flags = 1 + data = length 418, hash 44A91C4C + sample 26: + time = 679183 + flags = 1 + data = length 418, hash 22E329E0 + sample 27: + time = 705306 + flags = 1 + data = length 418, hash 22C08A37 + sample 28: + time = 731428 + flags = 1 + data = length 418, hash 5917DE43 + sample 29: + time = 757551 + flags = 1 + data = length 418, hash 8A635616 + sample 30: + time = 783673 + flags = 1 + data = length 418, hash 2BC2D355 + sample 31: + time = 809795 + flags = 1 + data = length 418, hash 4D6C5C5 + sample 32: + time = 835918 + flags = 1 + data = length 418, hash 4D405A08 + sample 33: + time = 862040 + flags = 1 + data = length 418, hash F3A1AB29 + sample 34: + time = 888163 + flags = 1 + data = length 418, hash 9E14E0F0 + sample 35: + time = 914285 + flags = 1 + data = length 418, hash FA9CB2EA + sample 36: + time = 940408 + flags = 1 + data = length 418, hash 69C6ECC1 + sample 37: + time = 966530 + flags = 1 + data = length 418, hash C016523B + sample 38: + time = 992653 + flags = 1 + data = length 418, hash A7A34454 + sample 39: + time = 1018775 + flags = 1 + data = length 418, hash F4F0A99 + sample 40: + time = 1044897 + flags = 1 + data = length 418, hash 9AB89C0E + sample 41: + time = 1071020 + flags = 1 + data = length 418, hash 283B271 + sample 42: + time = 1097142 + flags = 1 + data = length 418, hash 413801D1 + sample 43: + time = 1123265 + flags = 1 + data = length 418, hash B0FBC474 + sample 44: + time = 1149387 + flags = 1 + data = length 418, hash 3D56A051 + sample 45: + time = 1175510 + flags = 1 + data = length 418, hash 21E56735 + sample 46: + time = 1201632 + flags = 1 + data = length 418, hash 4F494338 + sample 47: + time = 1227755 + flags = 1 + data = length 418, hash FBF06EAD + sample 48: + time = 1253877 + flags = 1 + data = length 417, hash 56198E7 + sample 49: + time = 1279999 + flags = 1 + data = length 418, hash C8E504E8 + sample 50: + time = 1306122 + flags = 1 + data = length 418, hash AAE14D02 + sample 51: + time = 1332244 + flags = 1 + data = length 418, hash 3B99EC44 + sample 52: + time = 1358367 + flags = 1 + data = length 418, hash 40B9A1BA + sample 53: + time = 1384489 + flags = 1 + data = length 418, hash 782D4052 + sample 54: + time = 1410612 + flags = 1 + data = length 418, hash 5DE9ECE6 + sample 55: + time = 1436734 + flags = 1 + data = length 418, hash BC628CA9 + sample 56: + time = 1462857 + flags = 1 + data = length 418, hash 1FD43DA0 + sample 57: + time = 1488979 + flags = 1 + data = length 418, hash E66C956B + sample 58: + time = 1515102 + flags = 1 + data = length 418, hash C4FA9048 + sample 59: + time = 1541224 + flags = 1 + data = length 418, hash 3EC107FD + sample 60: + time = 1567346 + flags = 1 + data = length 418, hash EC5C955D + sample 61: + time = 1593469 + flags = 1 + data = length 418, hash 177D7541 + sample 62: + time = 1619591 + flags = 1 + data = length 418, hash D53D7C61 + sample 63: + time = 1645714 + flags = 1 + data = length 418, hash 41994E54 + sample 64: + time = 1671836 + flags = 1 + data = length 418, hash 10A13197 + sample 65: + time = 1697959 + flags = 1 + data = length 418, hash 6B964E7A + sample 66: + time = 1724081 + flags = 1 + data = length 418, hash 23169DC3 + sample 67: + time = 1750204 + flags = 1 + data = length 418, hash BCB49A2 + sample 68: + time = 1776326 + flags = 1 + data = length 418, hash EAD6106F + sample 69: + time = 1802448 + flags = 1 + data = length 418, hash 5DB634E3 + sample 70: + time = 1828571 + flags = 1 + data = length 418, hash 74E5B060 + sample 71: + time = 1854693 + flags = 1 + data = length 418, hash EA5A9CB9 + sample 72: + time = 1880816 + flags = 1 + data = length 418, hash 63A62EEB + sample 73: + time = 1906938 + flags = 1 + data = length 417, hash B77518E9 + sample 74: + time = 1933061 + flags = 1 + data = length 418, hash BB8125FF + sample 75: + time = 1959183 + flags = 1 + data = length 418, hash 8034AE66 + sample 76: + time = 1985306 + flags = 1 + data = length 418, hash 4ED5A004 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.2.dump b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.2.dump new file mode 100644 index 0000000000..a23519eb7f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.2.dump @@ -0,0 +1,569 @@ +seekMap: + isSeekable = true + duration = 2037551 + getPosition(0) = [[timeUs=0, position=10192]] + getPosition(1) = [[timeUs=0, position=10192]] + getPosition(1018775) = [[timeUs=0, position=10618]] + getPosition(2037551) = [[timeUs=0, position=10618]] +numberOfTracks = 2 +track 0: + total output bytes = 19538 + sample count = 58 + track duration = 1966666 + format 0: + id = 0 + sampleMimeType = video/avc + maxInputSize = 1858 + width = 256 + height = 144 + sample 0: + time = 0 + flags = 1 + data = length 794, hash E51B392 + sample 1: + time = 66666 + flags = 0 + data = length 1269, hash F97B0D34 + sample 2: + time = 99999 + flags = 0 + data = length 1858, hash BF98E83E + sample 3: + time = 133333 + flags = 0 + data = length 12, hash 57B58178 + sample 4: + time = 166666 + flags = 0 + data = length 572, hash 6D29902A + sample 5: + time = 199999 + flags = 0 + data = length 321, hash 989CC24 + sample 6: + time = 233333 + flags = 0 + data = length 104, hash C85D189C + sample 7: + time = 266666 + flags = 0 + data = length 15, hash 54DD1283 + sample 8: + time = 299999 + flags = 0 + data = length 47, hash 19C0FB57 + sample 9: + time = 333333 + flags = 0 + data = length 871, hash A2E94A8E + sample 10: + time = 366666 + flags = 0 + data = length 83, hash B681B415 + sample 11: + time = 399999 + flags = 0 + data = length 50, hash 47CF138C + sample 12: + time = 433333 + flags = 0 + data = length 24, hash 60C537AA + sample 13: + time = 466666 + flags = 0 + data = length 1372, hash 7CD6E34D + sample 14: + time = 499999 + flags = 0 + data = length 79, hash FBD5B0AB + sample 15: + time = 533333 + flags = 0 + data = length 74, hash 834B3EED + sample 16: + time = 566666 + flags = 0 + data = length 59, hash FDD25EF3 + sample 17: + time = 599999 + flags = 0 + data = length 948, hash 66EE7B18 + sample 18: + time = 633333 + flags = 0 + data = length 146, hash 1A35D839 + sample 19: + time = 666666 + flags = 0 + data = length 52, hash E2BF7ECF + sample 20: + time = 699999 + flags = 0 + data = length 819, hash 2B961CBC + sample 21: + time = 733333 + flags = 0 + data = length 88, hash F5BC3699 + sample 22: + time = 766666 + flags = 0 + data = length 348, hash 66A236DA + sample 23: + time = 799999 + flags = 0 + data = length 174, hash 6AE36E16 + sample 24: + time = 833333 + flags = 0 + data = length 47, hash 3D24B5BF + sample 25: + time = 866666 + flags = 0 + data = length 90, hash 8EADE0DF + sample 26: + time = 899999 + flags = 0 + data = length 1052, hash 16A95E6A + sample 27: + time = 933333 + flags = 0 + data = length 174, hash 1F36339D + sample 28: + time = 966666 + flags = 0 + data = length 76, hash 10C85E1 + sample 29: + time = 999999 + flags = 0 + data = length 205, hash EABF2BD + sample 30: + time = 1033332 + flags = 0 + data = length 807, hash 42FAA50 + sample 31: + time = 1066666 + flags = 0 + data = length 243, hash 4B761AA4 + sample 32: + time = 1099999 + flags = 0 + data = length 139, hash C86B0369 + sample 33: + time = 1133332 + flags = 0 + data = length 78, hash 2BB2A65E + sample 34: + time = 1166666 + flags = 0 + data = length 825, hash 3E330796 + sample 35: + time = 1199999 + flags = 0 + data = length 584, hash BF3E78FF + sample 36: + time = 1233332 + flags = 0 + data = length 301, hash 29AD84AB + sample 37: + time = 1266666 + flags = 0 + data = length 232, hash DC364C13 + sample 38: + time = 1299999 + flags = 0 + data = length 144, hash 44500BAF + sample 39: + time = 1333332 + flags = 0 + data = length 739, hash EA2DBF29 + sample 40: + time = 1366666 + flags = 0 + data = length 412, hash 9A7299B6 + sample 41: + time = 1399999 + flags = 0 + data = length 597, hash 8BB4D193 + sample 42: + time = 1433332 + flags = 0 + data = length 297, hash A655FD4C + sample 43: + time = 1466666 + flags = 0 + data = length 212, hash A6A1DA37 + sample 44: + time = 1499999 + flags = 0 + data = length 223, hash 2C4CE2AB + sample 45: + time = 1533332 + flags = 0 + data = length 697, hash 79DABA1E + sample 46: + time = 1566666 + flags = 0 + data = length 356, hash 6183273 + sample 47: + time = 1599999 + flags = 0 + data = length 259, hash 931056F0 + sample 48: + time = 1633332 + flags = 0 + data = length 227, hash 74A9B2CF + sample 49: + time = 1666666 + flags = 0 + data = length 43, hash 1664850A + sample 50: + time = 1699999 + flags = 0 + data = length 19, hash B3E68F9 + sample 51: + time = 1733332 + flags = 0 + data = length 14, hash 57B3B0EA + sample 52: + time = 1766666 + flags = 0 + data = length 109, hash 33F32F67 + sample 53: + time = 1799999 + flags = 0 + data = length 21, hash 47523E7 + sample 54: + time = 1833332 + flags = 0 + data = length 14, hash 9D5C990C + sample 55: + time = 1866666 + flags = 0 + data = length 14, hash 5C20A241 + sample 56: + time = 1899999 + flags = 0 + data = length 84, hash 6EC1E69C + sample 57: + time = 1933332 + flags = 0 + data = length 25, hash BAFA5220 +track 1: + total output bytes = 32183 + sample count = 77 + track duration = 2037551 + format 0: + id = 1 + sampleMimeType = audio/mpeg + maxInputSize = 418 + channelCount = 2 + sampleRate = 44100 + sample 0: + time = 0 + flags = 1 + data = length 418, hash 6B809A2C + sample 1: + time = 26122 + flags = 1 + data = length 418, hash 2B5563D9 + sample 2: + time = 52244 + flags = 1 + data = length 418, hash 98748D4E + sample 3: + time = 78367 + flags = 1 + data = length 418, hash 2FD35E33 + sample 4: + time = 104489 + flags = 1 + data = length 418, hash 530A8AB0 + sample 5: + time = 130612 + flags = 1 + data = length 418, hash 479DC512 + sample 6: + time = 156734 + flags = 1 + data = length 418, hash 44FD78BD + sample 7: + time = 182857 + flags = 1 + data = length 418, hash E645C22C + sample 8: + time = 208979 + flags = 1 + data = length 418, hash ADD19311 + sample 9: + time = 235102 + flags = 1 + data = length 418, hash 1B369E9F + sample 10: + time = 261224 + flags = 1 + data = length 418, hash 5E2D4C48 + sample 11: + time = 287346 + flags = 1 + data = length 418, hash CE2ADAF7 + sample 12: + time = 313469 + flags = 1 + data = length 418, hash 4FAC77C + sample 13: + time = 339591 + flags = 1 + data = length 418, hash 42D43042 + sample 14: + time = 365714 + flags = 1 + data = length 418, hash DD361ADB + sample 15: + time = 391836 + flags = 1 + data = length 418, hash 2BBC2C9B + sample 16: + time = 417959 + flags = 1 + data = length 418, hash 4FCDE685 + sample 17: + time = 444081 + flags = 1 + data = length 418, hash 309C89C7 + sample 18: + time = 470204 + flags = 1 + data = length 418, hash 78DDE345 + sample 19: + time = 496326 + flags = 1 + data = length 418, hash E6BECDD1 + sample 20: + time = 522448 + flags = 1 + data = length 418, hash C19014D7 + sample 21: + time = 548571 + flags = 1 + data = length 418, hash 62F4740C + sample 22: + time = 574693 + flags = 1 + data = length 418, hash BDE2439A + sample 23: + time = 600816 + flags = 1 + data = length 418, hash 5293CAC6 + sample 24: + time = 626938 + flags = 1 + data = length 417, hash 4DC35659 + sample 25: + time = 653061 + flags = 1 + data = length 418, hash 44A91C4C + sample 26: + time = 679183 + flags = 1 + data = length 418, hash 22E329E0 + sample 27: + time = 705306 + flags = 1 + data = length 418, hash 22C08A37 + sample 28: + time = 731428 + flags = 1 + data = length 418, hash 5917DE43 + sample 29: + time = 757551 + flags = 1 + data = length 418, hash 8A635616 + sample 30: + time = 783673 + flags = 1 + data = length 418, hash 2BC2D355 + sample 31: + time = 809795 + flags = 1 + data = length 418, hash 4D6C5C5 + sample 32: + time = 835918 + flags = 1 + data = length 418, hash 4D405A08 + sample 33: + time = 862040 + flags = 1 + data = length 418, hash F3A1AB29 + sample 34: + time = 888163 + flags = 1 + data = length 418, hash 9E14E0F0 + sample 35: + time = 914285 + flags = 1 + data = length 418, hash FA9CB2EA + sample 36: + time = 940408 + flags = 1 + data = length 418, hash 69C6ECC1 + sample 37: + time = 966530 + flags = 1 + data = length 418, hash C016523B + sample 38: + time = 992653 + flags = 1 + data = length 418, hash A7A34454 + sample 39: + time = 1018775 + flags = 1 + data = length 418, hash F4F0A99 + sample 40: + time = 1044897 + flags = 1 + data = length 418, hash 9AB89C0E + sample 41: + time = 1071020 + flags = 1 + data = length 418, hash 283B271 + sample 42: + time = 1097142 + flags = 1 + data = length 418, hash 413801D1 + sample 43: + time = 1123265 + flags = 1 + data = length 418, hash B0FBC474 + sample 44: + time = 1149387 + flags = 1 + data = length 418, hash 3D56A051 + sample 45: + time = 1175510 + flags = 1 + data = length 418, hash 21E56735 + sample 46: + time = 1201632 + flags = 1 + data = length 418, hash 4F494338 + sample 47: + time = 1227755 + flags = 1 + data = length 418, hash FBF06EAD + sample 48: + time = 1253877 + flags = 1 + data = length 417, hash 56198E7 + sample 49: + time = 1279999 + flags = 1 + data = length 418, hash C8E504E8 + sample 50: + time = 1306122 + flags = 1 + data = length 418, hash AAE14D02 + sample 51: + time = 1332244 + flags = 1 + data = length 418, hash 3B99EC44 + sample 52: + time = 1358367 + flags = 1 + data = length 418, hash 40B9A1BA + sample 53: + time = 1384489 + flags = 1 + data = length 418, hash 782D4052 + sample 54: + time = 1410612 + flags = 1 + data = length 418, hash 5DE9ECE6 + sample 55: + time = 1436734 + flags = 1 + data = length 418, hash BC628CA9 + sample 56: + time = 1462857 + flags = 1 + data = length 418, hash 1FD43DA0 + sample 57: + time = 1488979 + flags = 1 + data = length 418, hash E66C956B + sample 58: + time = 1515102 + flags = 1 + data = length 418, hash C4FA9048 + sample 59: + time = 1541224 + flags = 1 + data = length 418, hash 3EC107FD + sample 60: + time = 1567346 + flags = 1 + data = length 418, hash EC5C955D + sample 61: + time = 1593469 + flags = 1 + data = length 418, hash 177D7541 + sample 62: + time = 1619591 + flags = 1 + data = length 418, hash D53D7C61 + sample 63: + time = 1645714 + flags = 1 + data = length 418, hash 41994E54 + sample 64: + time = 1671836 + flags = 1 + data = length 418, hash 10A13197 + sample 65: + time = 1697959 + flags = 1 + data = length 418, hash 6B964E7A + sample 66: + time = 1724081 + flags = 1 + data = length 418, hash 23169DC3 + sample 67: + time = 1750204 + flags = 1 + data = length 418, hash BCB49A2 + sample 68: + time = 1776326 + flags = 1 + data = length 418, hash EAD6106F + sample 69: + time = 1802448 + flags = 1 + data = length 418, hash 5DB634E3 + sample 70: + time = 1828571 + flags = 1 + data = length 418, hash 74E5B060 + sample 71: + time = 1854693 + flags = 1 + data = length 418, hash EA5A9CB9 + sample 72: + time = 1880816 + flags = 1 + data = length 418, hash 63A62EEB + sample 73: + time = 1906938 + flags = 1 + data = length 417, hash B77518E9 + sample 74: + time = 1933061 + flags = 1 + data = length 418, hash BB8125FF + sample 75: + time = 1959183 + flags = 1 + data = length 418, hash 8034AE66 + sample 76: + time = 1985306 + flags = 1 + data = length 418, hash 4ED5A004 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.3.dump b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.3.dump new file mode 100644 index 0000000000..a23519eb7f --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.3.dump @@ -0,0 +1,569 @@ +seekMap: + isSeekable = true + duration = 2037551 + getPosition(0) = [[timeUs=0, position=10192]] + getPosition(1) = [[timeUs=0, position=10192]] + getPosition(1018775) = [[timeUs=0, position=10618]] + getPosition(2037551) = [[timeUs=0, position=10618]] +numberOfTracks = 2 +track 0: + total output bytes = 19538 + sample count = 58 + track duration = 1966666 + format 0: + id = 0 + sampleMimeType = video/avc + maxInputSize = 1858 + width = 256 + height = 144 + sample 0: + time = 0 + flags = 1 + data = length 794, hash E51B392 + sample 1: + time = 66666 + flags = 0 + data = length 1269, hash F97B0D34 + sample 2: + time = 99999 + flags = 0 + data = length 1858, hash BF98E83E + sample 3: + time = 133333 + flags = 0 + data = length 12, hash 57B58178 + sample 4: + time = 166666 + flags = 0 + data = length 572, hash 6D29902A + sample 5: + time = 199999 + flags = 0 + data = length 321, hash 989CC24 + sample 6: + time = 233333 + flags = 0 + data = length 104, hash C85D189C + sample 7: + time = 266666 + flags = 0 + data = length 15, hash 54DD1283 + sample 8: + time = 299999 + flags = 0 + data = length 47, hash 19C0FB57 + sample 9: + time = 333333 + flags = 0 + data = length 871, hash A2E94A8E + sample 10: + time = 366666 + flags = 0 + data = length 83, hash B681B415 + sample 11: + time = 399999 + flags = 0 + data = length 50, hash 47CF138C + sample 12: + time = 433333 + flags = 0 + data = length 24, hash 60C537AA + sample 13: + time = 466666 + flags = 0 + data = length 1372, hash 7CD6E34D + sample 14: + time = 499999 + flags = 0 + data = length 79, hash FBD5B0AB + sample 15: + time = 533333 + flags = 0 + data = length 74, hash 834B3EED + sample 16: + time = 566666 + flags = 0 + data = length 59, hash FDD25EF3 + sample 17: + time = 599999 + flags = 0 + data = length 948, hash 66EE7B18 + sample 18: + time = 633333 + flags = 0 + data = length 146, hash 1A35D839 + sample 19: + time = 666666 + flags = 0 + data = length 52, hash E2BF7ECF + sample 20: + time = 699999 + flags = 0 + data = length 819, hash 2B961CBC + sample 21: + time = 733333 + flags = 0 + data = length 88, hash F5BC3699 + sample 22: + time = 766666 + flags = 0 + data = length 348, hash 66A236DA + sample 23: + time = 799999 + flags = 0 + data = length 174, hash 6AE36E16 + sample 24: + time = 833333 + flags = 0 + data = length 47, hash 3D24B5BF + sample 25: + time = 866666 + flags = 0 + data = length 90, hash 8EADE0DF + sample 26: + time = 899999 + flags = 0 + data = length 1052, hash 16A95E6A + sample 27: + time = 933333 + flags = 0 + data = length 174, hash 1F36339D + sample 28: + time = 966666 + flags = 0 + data = length 76, hash 10C85E1 + sample 29: + time = 999999 + flags = 0 + data = length 205, hash EABF2BD + sample 30: + time = 1033332 + flags = 0 + data = length 807, hash 42FAA50 + sample 31: + time = 1066666 + flags = 0 + data = length 243, hash 4B761AA4 + sample 32: + time = 1099999 + flags = 0 + data = length 139, hash C86B0369 + sample 33: + time = 1133332 + flags = 0 + data = length 78, hash 2BB2A65E + sample 34: + time = 1166666 + flags = 0 + data = length 825, hash 3E330796 + sample 35: + time = 1199999 + flags = 0 + data = length 584, hash BF3E78FF + sample 36: + time = 1233332 + flags = 0 + data = length 301, hash 29AD84AB + sample 37: + time = 1266666 + flags = 0 + data = length 232, hash DC364C13 + sample 38: + time = 1299999 + flags = 0 + data = length 144, hash 44500BAF + sample 39: + time = 1333332 + flags = 0 + data = length 739, hash EA2DBF29 + sample 40: + time = 1366666 + flags = 0 + data = length 412, hash 9A7299B6 + sample 41: + time = 1399999 + flags = 0 + data = length 597, hash 8BB4D193 + sample 42: + time = 1433332 + flags = 0 + data = length 297, hash A655FD4C + sample 43: + time = 1466666 + flags = 0 + data = length 212, hash A6A1DA37 + sample 44: + time = 1499999 + flags = 0 + data = length 223, hash 2C4CE2AB + sample 45: + time = 1533332 + flags = 0 + data = length 697, hash 79DABA1E + sample 46: + time = 1566666 + flags = 0 + data = length 356, hash 6183273 + sample 47: + time = 1599999 + flags = 0 + data = length 259, hash 931056F0 + sample 48: + time = 1633332 + flags = 0 + data = length 227, hash 74A9B2CF + sample 49: + time = 1666666 + flags = 0 + data = length 43, hash 1664850A + sample 50: + time = 1699999 + flags = 0 + data = length 19, hash B3E68F9 + sample 51: + time = 1733332 + flags = 0 + data = length 14, hash 57B3B0EA + sample 52: + time = 1766666 + flags = 0 + data = length 109, hash 33F32F67 + sample 53: + time = 1799999 + flags = 0 + data = length 21, hash 47523E7 + sample 54: + time = 1833332 + flags = 0 + data = length 14, hash 9D5C990C + sample 55: + time = 1866666 + flags = 0 + data = length 14, hash 5C20A241 + sample 56: + time = 1899999 + flags = 0 + data = length 84, hash 6EC1E69C + sample 57: + time = 1933332 + flags = 0 + data = length 25, hash BAFA5220 +track 1: + total output bytes = 32183 + sample count = 77 + track duration = 2037551 + format 0: + id = 1 + sampleMimeType = audio/mpeg + maxInputSize = 418 + channelCount = 2 + sampleRate = 44100 + sample 0: + time = 0 + flags = 1 + data = length 418, hash 6B809A2C + sample 1: + time = 26122 + flags = 1 + data = length 418, hash 2B5563D9 + sample 2: + time = 52244 + flags = 1 + data = length 418, hash 98748D4E + sample 3: + time = 78367 + flags = 1 + data = length 418, hash 2FD35E33 + sample 4: + time = 104489 + flags = 1 + data = length 418, hash 530A8AB0 + sample 5: + time = 130612 + flags = 1 + data = length 418, hash 479DC512 + sample 6: + time = 156734 + flags = 1 + data = length 418, hash 44FD78BD + sample 7: + time = 182857 + flags = 1 + data = length 418, hash E645C22C + sample 8: + time = 208979 + flags = 1 + data = length 418, hash ADD19311 + sample 9: + time = 235102 + flags = 1 + data = length 418, hash 1B369E9F + sample 10: + time = 261224 + flags = 1 + data = length 418, hash 5E2D4C48 + sample 11: + time = 287346 + flags = 1 + data = length 418, hash CE2ADAF7 + sample 12: + time = 313469 + flags = 1 + data = length 418, hash 4FAC77C + sample 13: + time = 339591 + flags = 1 + data = length 418, hash 42D43042 + sample 14: + time = 365714 + flags = 1 + data = length 418, hash DD361ADB + sample 15: + time = 391836 + flags = 1 + data = length 418, hash 2BBC2C9B + sample 16: + time = 417959 + flags = 1 + data = length 418, hash 4FCDE685 + sample 17: + time = 444081 + flags = 1 + data = length 418, hash 309C89C7 + sample 18: + time = 470204 + flags = 1 + data = length 418, hash 78DDE345 + sample 19: + time = 496326 + flags = 1 + data = length 418, hash E6BECDD1 + sample 20: + time = 522448 + flags = 1 + data = length 418, hash C19014D7 + sample 21: + time = 548571 + flags = 1 + data = length 418, hash 62F4740C + sample 22: + time = 574693 + flags = 1 + data = length 418, hash BDE2439A + sample 23: + time = 600816 + flags = 1 + data = length 418, hash 5293CAC6 + sample 24: + time = 626938 + flags = 1 + data = length 417, hash 4DC35659 + sample 25: + time = 653061 + flags = 1 + data = length 418, hash 44A91C4C + sample 26: + time = 679183 + flags = 1 + data = length 418, hash 22E329E0 + sample 27: + time = 705306 + flags = 1 + data = length 418, hash 22C08A37 + sample 28: + time = 731428 + flags = 1 + data = length 418, hash 5917DE43 + sample 29: + time = 757551 + flags = 1 + data = length 418, hash 8A635616 + sample 30: + time = 783673 + flags = 1 + data = length 418, hash 2BC2D355 + sample 31: + time = 809795 + flags = 1 + data = length 418, hash 4D6C5C5 + sample 32: + time = 835918 + flags = 1 + data = length 418, hash 4D405A08 + sample 33: + time = 862040 + flags = 1 + data = length 418, hash F3A1AB29 + sample 34: + time = 888163 + flags = 1 + data = length 418, hash 9E14E0F0 + sample 35: + time = 914285 + flags = 1 + data = length 418, hash FA9CB2EA + sample 36: + time = 940408 + flags = 1 + data = length 418, hash 69C6ECC1 + sample 37: + time = 966530 + flags = 1 + data = length 418, hash C016523B + sample 38: + time = 992653 + flags = 1 + data = length 418, hash A7A34454 + sample 39: + time = 1018775 + flags = 1 + data = length 418, hash F4F0A99 + sample 40: + time = 1044897 + flags = 1 + data = length 418, hash 9AB89C0E + sample 41: + time = 1071020 + flags = 1 + data = length 418, hash 283B271 + sample 42: + time = 1097142 + flags = 1 + data = length 418, hash 413801D1 + sample 43: + time = 1123265 + flags = 1 + data = length 418, hash B0FBC474 + sample 44: + time = 1149387 + flags = 1 + data = length 418, hash 3D56A051 + sample 45: + time = 1175510 + flags = 1 + data = length 418, hash 21E56735 + sample 46: + time = 1201632 + flags = 1 + data = length 418, hash 4F494338 + sample 47: + time = 1227755 + flags = 1 + data = length 418, hash FBF06EAD + sample 48: + time = 1253877 + flags = 1 + data = length 417, hash 56198E7 + sample 49: + time = 1279999 + flags = 1 + data = length 418, hash C8E504E8 + sample 50: + time = 1306122 + flags = 1 + data = length 418, hash AAE14D02 + sample 51: + time = 1332244 + flags = 1 + data = length 418, hash 3B99EC44 + sample 52: + time = 1358367 + flags = 1 + data = length 418, hash 40B9A1BA + sample 53: + time = 1384489 + flags = 1 + data = length 418, hash 782D4052 + sample 54: + time = 1410612 + flags = 1 + data = length 418, hash 5DE9ECE6 + sample 55: + time = 1436734 + flags = 1 + data = length 418, hash BC628CA9 + sample 56: + time = 1462857 + flags = 1 + data = length 418, hash 1FD43DA0 + sample 57: + time = 1488979 + flags = 1 + data = length 418, hash E66C956B + sample 58: + time = 1515102 + flags = 1 + data = length 418, hash C4FA9048 + sample 59: + time = 1541224 + flags = 1 + data = length 418, hash 3EC107FD + sample 60: + time = 1567346 + flags = 1 + data = length 418, hash EC5C955D + sample 61: + time = 1593469 + flags = 1 + data = length 418, hash 177D7541 + sample 62: + time = 1619591 + flags = 1 + data = length 418, hash D53D7C61 + sample 63: + time = 1645714 + flags = 1 + data = length 418, hash 41994E54 + sample 64: + time = 1671836 + flags = 1 + data = length 418, hash 10A13197 + sample 65: + time = 1697959 + flags = 1 + data = length 418, hash 6B964E7A + sample 66: + time = 1724081 + flags = 1 + data = length 418, hash 23169DC3 + sample 67: + time = 1750204 + flags = 1 + data = length 418, hash BCB49A2 + sample 68: + time = 1776326 + flags = 1 + data = length 418, hash EAD6106F + sample 69: + time = 1802448 + flags = 1 + data = length 418, hash 5DB634E3 + sample 70: + time = 1828571 + flags = 1 + data = length 418, hash 74E5B060 + sample 71: + time = 1854693 + flags = 1 + data = length 418, hash EA5A9CB9 + sample 72: + time = 1880816 + flags = 1 + data = length 418, hash 63A62EEB + sample 73: + time = 1906938 + flags = 1 + data = length 417, hash B77518E9 + sample 74: + time = 1933061 + flags = 1 + data = length 418, hash BB8125FF + sample 75: + time = 1959183 + flags = 1 + data = length 418, hash 8034AE66 + sample 76: + time = 1985306 + flags = 1 + data = length 418, hash 4ED5A004 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.unknown_length.dump new file mode 100644 index 0000000000..49929884ce --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/avi/sample-with-large-length.avi.unknown_length.dump @@ -0,0 +1,573 @@ +seekMap: + isSeekable = true + duration = 2037551 + getPosition(0) = [[timeUs=0, position=10192]] + getPosition(1) = [[timeUs=0, position=10192]] + getPosition(1018775) = [[timeUs=0, position=10618]] + getPosition(2037551) = [[timeUs=0, position=10618]] +numberOfTracks = 2 +track 0: + total output bytes = 19538 + sample count = 58 + track duration = 1966666 + format 0: + id = 0 + sampleMimeType = video/avc + maxInputSize = 1858 + width = 256 + height = 144 + sample 0: + time = 0 + flags = 1 + data = length 794, hash E51B392 + sample 1: + time = 66666 + flags = 0 + data = length 1269, hash F97B0D34 + sample 2: + time = 99999 + flags = 0 + data = length 1858, hash BF98E83E + sample 3: + time = 133333 + flags = 0 + data = length 12, hash 57B58178 + sample 4: + time = 166666 + flags = 0 + data = length 572, hash 6D29902A + sample 5: + time = 199999 + flags = 0 + data = length 321, hash 989CC24 + sample 6: + time = 233333 + flags = 0 + data = length 104, hash C85D189C + sample 7: + time = 266666 + flags = 0 + data = length 15, hash 54DD1283 + sample 8: + time = 299999 + flags = 0 + data = length 47, hash 19C0FB57 + sample 9: + time = 333333 + flags = 0 + data = length 871, hash A2E94A8E + sample 10: + time = 366666 + flags = 0 + data = length 83, hash B681B415 + sample 11: + time = 399999 + flags = 0 + data = length 50, hash 47CF138C + sample 12: + time = 433333 + flags = 0 + data = length 24, hash 60C537AA + sample 13: + time = 466666 + flags = 0 + data = length 1372, hash 7CD6E34D + sample 14: + time = 499999 + flags = 0 + data = length 79, hash FBD5B0AB + sample 15: + time = 533333 + flags = 0 + data = length 74, hash 834B3EED + sample 16: + time = 566666 + flags = 0 + data = length 59, hash FDD25EF3 + sample 17: + time = 599999 + flags = 0 + data = length 948, hash 66EE7B18 + sample 18: + time = 633333 + flags = 0 + data = length 146, hash 1A35D839 + sample 19: + time = 666666 + flags = 0 + data = length 52, hash E2BF7ECF + sample 20: + time = 699999 + flags = 0 + data = length 819, hash 2B961CBC + sample 21: + time = 733333 + flags = 0 + data = length 88, hash F5BC3699 + sample 22: + time = 766666 + flags = 0 + data = length 348, hash 66A236DA + sample 23: + time = 799999 + flags = 0 + data = length 174, hash 6AE36E16 + sample 24: + time = 833333 + flags = 0 + data = length 47, hash 3D24B5BF + sample 25: + time = 866666 + flags = 0 + data = length 90, hash 8EADE0DF + sample 26: + time = 899999 + flags = 0 + data = length 1052, hash 16A95E6A + sample 27: + time = 933333 + flags = 0 + data = length 174, hash 1F36339D + sample 28: + time = 966666 + flags = 0 + data = length 76, hash 10C85E1 + sample 29: + time = 999999 + flags = 0 + data = length 205, hash EABF2BD + sample 30: + time = 1033332 + flags = 0 + data = length 807, hash 42FAA50 + sample 31: + time = 1066666 + flags = 0 + data = length 243, hash 4B761AA4 + sample 32: + time = 1099999 + flags = 0 + data = length 139, hash C86B0369 + sample 33: + time = 1133332 + flags = 0 + data = length 78, hash 2BB2A65E + sample 34: + time = 1166666 + flags = 0 + data = length 825, hash 3E330796 + sample 35: + time = 1199999 + flags = 0 + data = length 584, hash BF3E78FF + sample 36: + time = 1233332 + flags = 0 + data = length 301, hash 29AD84AB + sample 37: + time = 1266666 + flags = 0 + data = length 232, hash DC364C13 + sample 38: + time = 1299999 + flags = 0 + data = length 144, hash 44500BAF + sample 39: + time = 1333332 + flags = 0 + data = length 739, hash EA2DBF29 + sample 40: + time = 1366666 + flags = 0 + data = length 412, hash 9A7299B6 + sample 41: + time = 1399999 + flags = 0 + data = length 597, hash 8BB4D193 + sample 42: + time = 1433332 + flags = 0 + data = length 297, hash A655FD4C + sample 43: + time = 1466666 + flags = 0 + data = length 212, hash A6A1DA37 + sample 44: + time = 1499999 + flags = 0 + data = length 223, hash 2C4CE2AB + sample 45: + time = 1533332 + flags = 0 + data = length 697, hash 79DABA1E + sample 46: + time = 1566666 + flags = 0 + data = length 356, hash 6183273 + sample 47: + time = 1599999 + flags = 0 + data = length 259, hash 931056F0 + sample 48: + time = 1633332 + flags = 0 + data = length 227, hash 74A9B2CF + sample 49: + time = 1666666 + flags = 0 + data = length 43, hash 1664850A + sample 50: + time = 1699999 + flags = 0 + data = length 19, hash B3E68F9 + sample 51: + time = 1733332 + flags = 0 + data = length 14, hash 57B3B0EA + sample 52: + time = 1766666 + flags = 0 + data = length 109, hash 33F32F67 + sample 53: + time = 1799999 + flags = 0 + data = length 21, hash 47523E7 + sample 54: + time = 1833332 + flags = 0 + data = length 14, hash 9D5C990C + sample 55: + time = 1866666 + flags = 0 + data = length 14, hash 5C20A241 + sample 56: + time = 1899999 + flags = 0 + data = length 84, hash 6EC1E69C + sample 57: + time = 1933332 + flags = 0 + data = length 25, hash BAFA5220 +track 1: + total output bytes = 32600 + sample count = 78 + track duration = 2037551 + format 0: + id = 1 + sampleMimeType = audio/mpeg + maxInputSize = 418 + channelCount = 2 + sampleRate = 44100 + sample 0: + time = 0 + flags = 1 + data = length 417, hash 929E87CB + sample 1: + time = 26122 + flags = 1 + data = length 418, hash 6B809A2C + sample 2: + time = 52244 + flags = 1 + data = length 418, hash 2B5563D9 + sample 3: + time = 78367 + flags = 1 + data = length 418, hash 98748D4E + sample 4: + time = 104489 + flags = 1 + data = length 418, hash 2FD35E33 + sample 5: + time = 130612 + flags = 1 + data = length 418, hash 530A8AB0 + sample 6: + time = 156734 + flags = 1 + data = length 418, hash 479DC512 + sample 7: + time = 182857 + flags = 1 + data = length 418, hash 44FD78BD + sample 8: + time = 208979 + flags = 1 + data = length 418, hash E645C22C + sample 9: + time = 235102 + flags = 1 + data = length 418, hash ADD19311 + sample 10: + time = 261224 + flags = 1 + data = length 418, hash 1B369E9F + sample 11: + time = 287346 + flags = 1 + data = length 418, hash 5E2D4C48 + sample 12: + time = 313469 + flags = 1 + data = length 418, hash CE2ADAF7 + sample 13: + time = 339591 + flags = 1 + data = length 418, hash 4FAC77C + sample 14: + time = 365714 + flags = 1 + data = length 418, hash 42D43042 + sample 15: + time = 391836 + flags = 1 + data = length 418, hash DD361ADB + sample 16: + time = 417959 + flags = 1 + data = length 418, hash 2BBC2C9B + sample 17: + time = 444081 + flags = 1 + data = length 418, hash 4FCDE685 + sample 18: + time = 470204 + flags = 1 + data = length 418, hash 309C89C7 + sample 19: + time = 496326 + flags = 1 + data = length 418, hash 78DDE345 + sample 20: + time = 522448 + flags = 1 + data = length 418, hash E6BECDD1 + sample 21: + time = 548571 + flags = 1 + data = length 418, hash C19014D7 + sample 22: + time = 574693 + flags = 1 + data = length 418, hash 62F4740C + sample 23: + time = 600816 + flags = 1 + data = length 418, hash BDE2439A + sample 24: + time = 626938 + flags = 1 + data = length 418, hash 5293CAC6 + sample 25: + time = 653061 + flags = 1 + data = length 417, hash 4DC35659 + sample 26: + time = 679183 + flags = 1 + data = length 418, hash 44A91C4C + sample 27: + time = 705306 + flags = 1 + data = length 418, hash 22E329E0 + sample 28: + time = 731428 + flags = 1 + data = length 418, hash 22C08A37 + sample 29: + time = 757551 + flags = 1 + data = length 418, hash 5917DE43 + sample 30: + time = 783673 + flags = 1 + data = length 418, hash 8A635616 + sample 31: + time = 809795 + flags = 1 + data = length 418, hash 2BC2D355 + sample 32: + time = 835918 + flags = 1 + data = length 418, hash 4D6C5C5 + sample 33: + time = 862040 + flags = 1 + data = length 418, hash 4D405A08 + sample 34: + time = 888163 + flags = 1 + data = length 418, hash F3A1AB29 + sample 35: + time = 914285 + flags = 1 + data = length 418, hash 9E14E0F0 + sample 36: + time = 940408 + flags = 1 + data = length 418, hash FA9CB2EA + sample 37: + time = 966530 + flags = 1 + data = length 418, hash 69C6ECC1 + sample 38: + time = 992653 + flags = 1 + data = length 418, hash C016523B + sample 39: + time = 1018775 + flags = 1 + data = length 418, hash A7A34454 + sample 40: + time = 1044897 + flags = 1 + data = length 418, hash F4F0A99 + sample 41: + time = 1071020 + flags = 1 + data = length 418, hash 9AB89C0E + sample 42: + time = 1097142 + flags = 1 + data = length 418, hash 283B271 + sample 43: + time = 1123265 + flags = 1 + data = length 418, hash 413801D1 + sample 44: + time = 1149387 + flags = 1 + data = length 418, hash B0FBC474 + sample 45: + time = 1175510 + flags = 1 + data = length 418, hash 3D56A051 + sample 46: + time = 1201632 + flags = 1 + data = length 418, hash 21E56735 + sample 47: + time = 1227755 + flags = 1 + data = length 418, hash 4F494338 + sample 48: + time = 1253877 + flags = 1 + data = length 418, hash FBF06EAD + sample 49: + time = 1279999 + flags = 1 + data = length 417, hash 56198E7 + sample 50: + time = 1306122 + flags = 1 + data = length 418, hash C8E504E8 + sample 51: + time = 1332244 + flags = 1 + data = length 418, hash AAE14D02 + sample 52: + time = 1358367 + flags = 1 + data = length 418, hash 3B99EC44 + sample 53: + time = 1384489 + flags = 1 + data = length 418, hash 40B9A1BA + sample 54: + time = 1410612 + flags = 1 + data = length 418, hash 782D4052 + sample 55: + time = 1436734 + flags = 1 + data = length 418, hash 5DE9ECE6 + sample 56: + time = 1462857 + flags = 1 + data = length 418, hash BC628CA9 + sample 57: + time = 1488979 + flags = 1 + data = length 418, hash 1FD43DA0 + sample 58: + time = 1515102 + flags = 1 + data = length 418, hash E66C956B + sample 59: + time = 1541224 + flags = 1 + data = length 418, hash C4FA9048 + sample 60: + time = 1567346 + flags = 1 + data = length 418, hash 3EC107FD + sample 61: + time = 1593469 + flags = 1 + data = length 418, hash EC5C955D + sample 62: + time = 1619591 + flags = 1 + data = length 418, hash 177D7541 + sample 63: + time = 1645714 + flags = 1 + data = length 418, hash D53D7C61 + sample 64: + time = 1671836 + flags = 1 + data = length 418, hash 41994E54 + sample 65: + time = 1697959 + flags = 1 + data = length 418, hash 10A13197 + sample 66: + time = 1724081 + flags = 1 + data = length 418, hash 6B964E7A + sample 67: + time = 1750204 + flags = 1 + data = length 418, hash 23169DC3 + sample 68: + time = 1776326 + flags = 1 + data = length 418, hash BCB49A2 + sample 69: + time = 1802448 + flags = 1 + data = length 418, hash EAD6106F + sample 70: + time = 1828571 + flags = 1 + data = length 418, hash 5DB634E3 + sample 71: + time = 1854693 + flags = 1 + data = length 418, hash 74E5B060 + sample 72: + time = 1880816 + flags = 1 + data = length 418, hash EA5A9CB9 + sample 73: + time = 1906938 + flags = 1 + data = length 418, hash 63A62EEB + sample 74: + time = 1933061 + flags = 1 + data = length 417, hash B77518E9 + sample 75: + time = 1959183 + flags = 1 + data = length 418, hash BB8125FF + sample 76: + time = 1985306 + flags = 1 + data = length 418, hash 8034AE66 + sample 77: + time = 2011428 + flags = 1 + data = length 418, hash 4ED5A004 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/avi/sample-with-large-length.avi b/libraries/test_data/src/test/assets/media/avi/sample-with-large-length.avi new file mode 100644 index 0000000000000000000000000000000000000000..f35b6b27ab77151470a6aaf74ec350ff597b382a GIT binary patch literal 65658 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 literal 0 HcmV?d00001