From 3eb36d67bd90d6d962df26dfdf29701a45902b4a Mon Sep 17 00:00:00 2001 From: ibaker Date: Tue, 26 Nov 2024 01:29:40 -0800 Subject: [PATCH] Add MP3 test asset with `VBRI` frame This was hand-crafted with a 4-entry ToC by modifying `bear-vbr-xing-header.mp3` in a hex editor. The output difference from 117 samples to 116 samples is due to the calculation in `VbriSeeker` assuming that the ToC includes the VBRI frame itself, which I don't think is correct (fix is in a follow-up change). Issue: androidx/media#1904 #cherrypick PiperOrigin-RevId: 700254516 --- .../extractor/mp3/Mp3ExtractorTest.java | 6 + .../mp3/bear-vbr-vbri-header.mp3.0.dump | 485 ++++++++++++++++++ .../mp3/bear-vbr-vbri-header.mp3.1.dump | 369 +++++++++++++ .../mp3/bear-vbr-vbri-header.mp3.2.dump | 253 +++++++++ .../mp3/bear-vbr-vbri-header.mp3.3.dump | 137 +++++ ...ar-vbr-vbri-header.mp3.unknown_length.dump | 485 ++++++++++++++++++ .../assets/media/mp3/bear-vbr-vbri-header.mp3 | Bin 0 -> 38301 bytes 7 files changed, 1735 insertions(+) create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.0.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.1.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.2.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.3.dump create mode 100644 libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.unknown_length.dump create mode 100644 libraries/test_data/src/test/assets/media/mp3/bear-vbr-vbri-header.mp3 diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/Mp3ExtractorTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/Mp3ExtractorTest.java index a5c3a9df88..87cc1fffa9 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/Mp3ExtractorTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp3/Mp3ExtractorTest.java @@ -71,6 +71,12 @@ public final class Mp3ExtractorTest { simulationConfig); } + @Test + public void mp3SampleWithVbriHeader() throws Exception { + ExtractorAsserts.assertBehavior( + Mp3Extractor::new, "media/mp3/bear-vbr-vbri-header.mp3", simulationConfig); + } + @Test public void mp3SampleWithCbrSeeker() throws Exception { ExtractorAsserts.assertBehavior( diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.0.dump new file mode 100644 index 0000000000..de95b24610 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.0.dump @@ -0,0 +1,485 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=702000, position=10317]] + getPosition(1404000) = [[timeUs=1404000, position=19677]] + getPosition(2808000) = [[timeUs=2106000, position=29517]] +numberOfTracks = 1 +track 0: + total output bytes = 38064 + sample count = 116 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 0 + flags = 1 + data = length 96, hash 1F161542 + sample 1: + time = 24000 + flags = 1 + data = length 768, hash CD1DC50F + sample 2: + time = 48000 + flags = 1 + data = length 336, hash 3F64124B + sample 3: + time = 72000 + flags = 1 + data = length 336, hash 8FFED94E + sample 4: + time = 96000 + flags = 1 + data = length 288, hash 9CD77D47 + sample 5: + time = 120000 + flags = 1 + data = length 384, hash 24607BB5 + sample 6: + time = 144000 + flags = 1 + data = length 480, hash 4937EBAB + sample 7: + time = 168000 + flags = 1 + data = length 336, hash 546342B1 + sample 8: + time = 192000 + flags = 1 + data = length 336, hash 79E0923F + sample 9: + time = 216000 + flags = 1 + data = length 336, hash AB1F3948 + sample 10: + time = 240000 + flags = 1 + data = length 336, hash C3A4D888 + sample 11: + time = 264000 + flags = 1 + data = length 288, hash 7867DA45 + sample 12: + time = 288000 + flags = 1 + data = length 336, hash B1240B73 + sample 13: + time = 312000 + flags = 1 + data = length 336, hash 94CFCD35 + sample 14: + time = 336000 + flags = 1 + data = length 288, hash 94F412C + sample 15: + time = 360000 + flags = 1 + data = length 336, hash A1D9FF41 + sample 16: + time = 384000 + flags = 1 + data = length 288, hash 2A8DA21B + sample 17: + time = 408000 + flags = 1 + data = length 336, hash 6A429CE + sample 18: + time = 432000 + flags = 1 + data = length 336, hash 68853982 + sample 19: + time = 456000 + flags = 1 + data = length 384, hash 1D6F779C + sample 20: + time = 480000 + flags = 1 + data = length 480, hash 6B31EBEE + sample 21: + time = 504000 + flags = 1 + data = length 336, hash 888335BE + sample 22: + time = 528000 + flags = 1 + data = length 336, hash 6072AC8B + sample 23: + time = 552000 + flags = 1 + data = length 336, hash C9D24234 + sample 24: + time = 576000 + flags = 1 + data = length 288, hash 52BF4D1E + sample 25: + time = 600000 + flags = 1 + data = length 336, hash F93F4F0 + sample 26: + time = 624000 + flags = 1 + data = length 336, hash 8617688A + sample 27: + time = 648000 + flags = 1 + data = length 480, hash FAB0D31B + sample 28: + time = 672000 + flags = 1 + data = length 384, hash FA4B53E2 + sample 29: + time = 696000 + flags = 1 + data = length 336, hash 8C435F6A + sample 30: + time = 720000 + flags = 1 + data = length 336, hash 60D3F80C + sample 31: + time = 744000 + flags = 1 + data = length 336, hash DC15B68B + sample 32: + time = 768000 + flags = 1 + data = length 288, hash FF3DF141 + sample 33: + time = 792000 + flags = 1 + data = length 336, hash A64B3042 + sample 34: + time = 816000 + flags = 1 + data = length 336, hash ACA622A1 + sample 35: + time = 840000 + flags = 1 + data = length 288, hash 3E34B8D4 + sample 36: + time = 864000 + flags = 1 + data = length 288, hash 9B96F72A + sample 37: + time = 888000 + flags = 1 + data = length 336, hash E917C122 + sample 38: + time = 912000 + flags = 1 + data = length 336, hash 10ED1470 + sample 39: + time = 936000 + flags = 1 + data = length 288, hash 706B8A7C + sample 40: + time = 960000 + flags = 1 + data = length 336, hash 71FFE4A0 + sample 41: + time = 984000 + flags = 1 + data = length 336, hash D4160463 + sample 42: + time = 1008000 + flags = 1 + data = length 336, hash EC557B14 + sample 43: + time = 1032000 + flags = 1 + data = length 288, hash 5598CF8B + sample 44: + time = 1056000 + flags = 1 + data = length 336, hash 7E0AB41 + sample 45: + time = 1080000 + flags = 1 + data = length 336, hash 1C585FEF + sample 46: + time = 1104000 + flags = 1 + data = length 336, hash A4A4855E + sample 47: + time = 1128000 + flags = 1 + data = length 336, hash CECA51D3 + sample 48: + time = 1152000 + flags = 1 + data = length 288, hash 2D362DC5 + sample 49: + time = 1176000 + flags = 1 + data = length 336, hash 9EB2609D + sample 50: + time = 1200000 + flags = 1 + data = length 336, hash 28FFB3FE + sample 51: + time = 1224000 + flags = 1 + data = length 288, hash 2AA2D216 + sample 52: + time = 1248000 + flags = 1 + data = length 336, hash CDBC7032 + sample 53: + time = 1272000 + flags = 1 + data = length 336, hash 25B13FE7 + sample 54: + time = 1296000 + flags = 1 + data = length 336, hash DB6BB1E + sample 55: + time = 1320000 + flags = 1 + data = length 336, hash EBE951F4 + sample 56: + time = 1344000 + flags = 1 + data = length 288, hash 9E2EBFF7 + sample 57: + time = 1368000 + flags = 1 + data = length 336, hash 36A7D455 + sample 58: + time = 1392000 + flags = 1 + data = length 336, hash 84545F8C + sample 59: + time = 1416000 + flags = 1 + data = length 336, hash F66F3045 + sample 60: + time = 1440000 + flags = 1 + data = length 576, hash 5AB089EA + sample 61: + time = 1464000 + flags = 1 + data = length 336, hash 8868086 + sample 62: + time = 1488000 + flags = 1 + data = length 336, hash D5EB6D63 + sample 63: + time = 1512000 + flags = 1 + data = length 288, hash 7A5374B7 + sample 64: + time = 1536000 + flags = 1 + data = length 336, hash BEB27A75 + sample 65: + time = 1560000 + flags = 1 + data = length 336, hash E251E0FD + sample 66: + time = 1584000 + flags = 1 + data = length 288, hash D54C970 + sample 67: + time = 1608000 + flags = 1 + data = length 336, hash 52C473B9 + sample 68: + time = 1632000 + flags = 1 + data = length 336, hash F5F13334 + sample 69: + time = 1656000 + flags = 1 + data = length 480, hash A5F1E987 + sample 70: + time = 1680000 + flags = 1 + data = length 288, hash 453A1267 + sample 71: + time = 1704000 + flags = 1 + data = length 288, hash 7C6C2EA9 + sample 72: + time = 1728000 + flags = 1 + data = length 336, hash F4BFECA4 + sample 73: + time = 1752000 + flags = 1 + data = length 336, hash 751A395A + sample 74: + time = 1776000 + flags = 1 + data = length 336, hash EE38DB02 + sample 75: + time = 1800000 + flags = 1 + data = length 336, hash F18837E2 + sample 76: + time = 1824000 + flags = 1 + data = length 336, hash ED36B78E + sample 77: + time = 1848000 + flags = 1 + data = length 336, hash B3D28289 + sample 78: + time = 1872000 + flags = 1 + data = length 288, hash 8BDE28E1 + sample 79: + time = 1896000 + flags = 1 + data = length 336, hash CFD5E966 + sample 80: + time = 1920000 + flags = 1 + data = length 288, hash DC08E267 + sample 81: + time = 1944000 + flags = 1 + data = length 336, hash 6530CB78 + sample 82: + time = 1968000 + flags = 1 + data = length 336, hash 6CC6636E + sample 83: + time = 1992000 + flags = 1 + data = length 336, hash 613047C1 + sample 84: + time = 2016000 + flags = 1 + data = length 288, hash CDC747BF + sample 85: + time = 2040000 + flags = 1 + data = length 336, hash AF22AA74 + sample 86: + time = 2064000 + flags = 1 + data = length 384, hash 82F326AA + sample 87: + time = 2088000 + flags = 1 + data = length 384, hash EDA26C4D + sample 88: + time = 2112000 + flags = 1 + data = length 336, hash 94C643DC + sample 89: + time = 2136000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 90: + time = 2160000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 91: + time = 2184000 + flags = 1 + data = length 336, hash 7E472219 + sample 92: + time = 2208000 + flags = 1 + data = length 336, hash DA47B9FA + sample 93: + time = 2232000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 94: + time = 2256000 + flags = 1 + data = length 288, hash DBF93FAC + sample 95: + time = 2280000 + flags = 1 + data = length 336, hash 243F4B2 + sample 96: + time = 2304000 + flags = 1 + data = length 336, hash 2E881490 + sample 97: + time = 2328000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 98: + time = 2352000 + flags = 1 + data = length 336, hash C73E5D30 + sample 99: + time = 2376000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 100: + time = 2400000 + flags = 1 + data = length 336, hash E0135533 + sample 101: + time = 2424000 + flags = 1 + data = length 336, hash D13C9DBC + sample 102: + time = 2448000 + flags = 1 + data = length 336, hash 63D524CA + sample 103: + time = 2472000 + flags = 1 + data = length 288, hash A28514C3 + sample 104: + time = 2496000 + flags = 1 + data = length 336, hash 72B647FF + sample 105: + time = 2520000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 106: + time = 2544000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 107: + time = 2568000 + flags = 1 + data = length 336, hash 121B913B + sample 108: + time = 2592000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 109: + time = 2616000 + flags = 1 + data = length 336, hash 5B5823DE + sample 110: + time = 2640000 + flags = 1 + data = length 384, hash D8B83F78 + sample 111: + time = 2664000 + flags = 1 + data = length 240, hash E649682F + sample 112: + time = 2688000 + flags = 1 + data = length 96, hash C559A6F4 + sample 113: + time = 2712000 + flags = 1 + data = length 96, hash 792796BC + sample 114: + time = 2736000 + flags = 1 + data = length 120, hash 8172CD0E + sample 115: + time = 2760000 + flags = 1 + data = length 120, hash F562B52F +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.1.dump new file mode 100644 index 0000000000..35d8603d60 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.1.dump @@ -0,0 +1,369 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=702000, position=10317]] + getPosition(1404000) = [[timeUs=1404000, position=19677]] + getPosition(2808000) = [[timeUs=2106000, position=29517]] +numberOfTracks = 1 +track 0: + total output bytes = 27792 + sample count = 87 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 702000 + flags = 1 + data = length 336, hash 8C435F6A + sample 1: + time = 726000 + flags = 1 + data = length 336, hash 60D3F80C + sample 2: + time = 750000 + flags = 1 + data = length 336, hash DC15B68B + sample 3: + time = 774000 + flags = 1 + data = length 288, hash FF3DF141 + sample 4: + time = 798000 + flags = 1 + data = length 336, hash A64B3042 + sample 5: + time = 822000 + flags = 1 + data = length 336, hash ACA622A1 + sample 6: + time = 846000 + flags = 1 + data = length 288, hash 3E34B8D4 + sample 7: + time = 870000 + flags = 1 + data = length 288, hash 9B96F72A + sample 8: + time = 894000 + flags = 1 + data = length 336, hash E917C122 + sample 9: + time = 918000 + flags = 1 + data = length 336, hash 10ED1470 + sample 10: + time = 942000 + flags = 1 + data = length 288, hash 706B8A7C + sample 11: + time = 966000 + flags = 1 + data = length 336, hash 71FFE4A0 + sample 12: + time = 990000 + flags = 1 + data = length 336, hash D4160463 + sample 13: + time = 1014000 + flags = 1 + data = length 336, hash EC557B14 + sample 14: + time = 1038000 + flags = 1 + data = length 288, hash 5598CF8B + sample 15: + time = 1062000 + flags = 1 + data = length 336, hash 7E0AB41 + sample 16: + time = 1086000 + flags = 1 + data = length 336, hash 1C585FEF + sample 17: + time = 1110000 + flags = 1 + data = length 336, hash A4A4855E + sample 18: + time = 1134000 + flags = 1 + data = length 336, hash CECA51D3 + sample 19: + time = 1158000 + flags = 1 + data = length 288, hash 2D362DC5 + sample 20: + time = 1182000 + flags = 1 + data = length 336, hash 9EB2609D + sample 21: + time = 1206000 + flags = 1 + data = length 336, hash 28FFB3FE + sample 22: + time = 1230000 + flags = 1 + data = length 288, hash 2AA2D216 + sample 23: + time = 1254000 + flags = 1 + data = length 336, hash CDBC7032 + sample 24: + time = 1278000 + flags = 1 + data = length 336, hash 25B13FE7 + sample 25: + time = 1302000 + flags = 1 + data = length 336, hash DB6BB1E + sample 26: + time = 1326000 + flags = 1 + data = length 336, hash EBE951F4 + sample 27: + time = 1350000 + flags = 1 + data = length 288, hash 9E2EBFF7 + sample 28: + time = 1374000 + flags = 1 + data = length 336, hash 36A7D455 + sample 29: + time = 1398000 + flags = 1 + data = length 336, hash 84545F8C + sample 30: + time = 1422000 + flags = 1 + data = length 336, hash F66F3045 + sample 31: + time = 1446000 + flags = 1 + data = length 576, hash 5AB089EA + sample 32: + time = 1470000 + flags = 1 + data = length 336, hash 8868086 + sample 33: + time = 1494000 + flags = 1 + data = length 336, hash D5EB6D63 + sample 34: + time = 1518000 + flags = 1 + data = length 288, hash 7A5374B7 + sample 35: + time = 1542000 + flags = 1 + data = length 336, hash BEB27A75 + sample 36: + time = 1566000 + flags = 1 + data = length 336, hash E251E0FD + sample 37: + time = 1590000 + flags = 1 + data = length 288, hash D54C970 + sample 38: + time = 1614000 + flags = 1 + data = length 336, hash 52C473B9 + sample 39: + time = 1638000 + flags = 1 + data = length 336, hash F5F13334 + sample 40: + time = 1662000 + flags = 1 + data = length 480, hash A5F1E987 + sample 41: + time = 1686000 + flags = 1 + data = length 288, hash 453A1267 + sample 42: + time = 1710000 + flags = 1 + data = length 288, hash 7C6C2EA9 + sample 43: + time = 1734000 + flags = 1 + data = length 336, hash F4BFECA4 + sample 44: + time = 1758000 + flags = 1 + data = length 336, hash 751A395A + sample 45: + time = 1782000 + flags = 1 + data = length 336, hash EE38DB02 + sample 46: + time = 1806000 + flags = 1 + data = length 336, hash F18837E2 + sample 47: + time = 1830000 + flags = 1 + data = length 336, hash ED36B78E + sample 48: + time = 1854000 + flags = 1 + data = length 336, hash B3D28289 + sample 49: + time = 1878000 + flags = 1 + data = length 288, hash 8BDE28E1 + sample 50: + time = 1902000 + flags = 1 + data = length 336, hash CFD5E966 + sample 51: + time = 1926000 + flags = 1 + data = length 288, hash DC08E267 + sample 52: + time = 1950000 + flags = 1 + data = length 336, hash 6530CB78 + sample 53: + time = 1974000 + flags = 1 + data = length 336, hash 6CC6636E + sample 54: + time = 1998000 + flags = 1 + data = length 336, hash 613047C1 + sample 55: + time = 2022000 + flags = 1 + data = length 288, hash CDC747BF + sample 56: + time = 2046000 + flags = 1 + data = length 336, hash AF22AA74 + sample 57: + time = 2070000 + flags = 1 + data = length 384, hash 82F326AA + sample 58: + time = 2094000 + flags = 1 + data = length 384, hash EDA26C4D + sample 59: + time = 2118000 + flags = 1 + data = length 336, hash 94C643DC + sample 60: + time = 2142000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 61: + time = 2166000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 62: + time = 2190000 + flags = 1 + data = length 336, hash 7E472219 + sample 63: + time = 2214000 + flags = 1 + data = length 336, hash DA47B9FA + sample 64: + time = 2238000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 65: + time = 2262000 + flags = 1 + data = length 288, hash DBF93FAC + sample 66: + time = 2286000 + flags = 1 + data = length 336, hash 243F4B2 + sample 67: + time = 2310000 + flags = 1 + data = length 336, hash 2E881490 + sample 68: + time = 2334000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 69: + time = 2358000 + flags = 1 + data = length 336, hash C73E5D30 + sample 70: + time = 2382000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 71: + time = 2406000 + flags = 1 + data = length 336, hash E0135533 + sample 72: + time = 2430000 + flags = 1 + data = length 336, hash D13C9DBC + sample 73: + time = 2454000 + flags = 1 + data = length 336, hash 63D524CA + sample 74: + time = 2478000 + flags = 1 + data = length 288, hash A28514C3 + sample 75: + time = 2502000 + flags = 1 + data = length 336, hash 72B647FF + sample 76: + time = 2526000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 77: + time = 2550000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 78: + time = 2574000 + flags = 1 + data = length 336, hash 121B913B + sample 79: + time = 2598000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 80: + time = 2622000 + flags = 1 + data = length 336, hash 5B5823DE + sample 81: + time = 2646000 + flags = 1 + data = length 384, hash D8B83F78 + sample 82: + time = 2670000 + flags = 1 + data = length 240, hash E649682F + sample 83: + time = 2694000 + flags = 1 + data = length 96, hash C559A6F4 + sample 84: + time = 2718000 + flags = 1 + data = length 96, hash 792796BC + sample 85: + time = 2742000 + flags = 1 + data = length 120, hash 8172CD0E + sample 86: + time = 2766000 + flags = 1 + data = length 120, hash F562B52F +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.2.dump new file mode 100644 index 0000000000..86d7793b25 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.2.dump @@ -0,0 +1,253 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=702000, position=10317]] + getPosition(1404000) = [[timeUs=1404000, position=19677]] + getPosition(2808000) = [[timeUs=2106000, position=29517]] +numberOfTracks = 1 +track 0: + total output bytes = 18432 + sample count = 58 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 1404000 + flags = 1 + data = length 336, hash 84545F8C + sample 1: + time = 1428000 + flags = 1 + data = length 336, hash F66F3045 + sample 2: + time = 1452000 + flags = 1 + data = length 576, hash 5AB089EA + sample 3: + time = 1476000 + flags = 1 + data = length 336, hash 8868086 + sample 4: + time = 1500000 + flags = 1 + data = length 336, hash D5EB6D63 + sample 5: + time = 1524000 + flags = 1 + data = length 288, hash 7A5374B7 + sample 6: + time = 1548000 + flags = 1 + data = length 336, hash BEB27A75 + sample 7: + time = 1572000 + flags = 1 + data = length 336, hash E251E0FD + sample 8: + time = 1596000 + flags = 1 + data = length 288, hash D54C970 + sample 9: + time = 1620000 + flags = 1 + data = length 336, hash 52C473B9 + sample 10: + time = 1644000 + flags = 1 + data = length 336, hash F5F13334 + sample 11: + time = 1668000 + flags = 1 + data = length 480, hash A5F1E987 + sample 12: + time = 1692000 + flags = 1 + data = length 288, hash 453A1267 + sample 13: + time = 1716000 + flags = 1 + data = length 288, hash 7C6C2EA9 + sample 14: + time = 1740000 + flags = 1 + data = length 336, hash F4BFECA4 + sample 15: + time = 1764000 + flags = 1 + data = length 336, hash 751A395A + sample 16: + time = 1788000 + flags = 1 + data = length 336, hash EE38DB02 + sample 17: + time = 1812000 + flags = 1 + data = length 336, hash F18837E2 + sample 18: + time = 1836000 + flags = 1 + data = length 336, hash ED36B78E + sample 19: + time = 1860000 + flags = 1 + data = length 336, hash B3D28289 + sample 20: + time = 1884000 + flags = 1 + data = length 288, hash 8BDE28E1 + sample 21: + time = 1908000 + flags = 1 + data = length 336, hash CFD5E966 + sample 22: + time = 1932000 + flags = 1 + data = length 288, hash DC08E267 + sample 23: + time = 1956000 + flags = 1 + data = length 336, hash 6530CB78 + sample 24: + time = 1980000 + flags = 1 + data = length 336, hash 6CC6636E + sample 25: + time = 2004000 + flags = 1 + data = length 336, hash 613047C1 + sample 26: + time = 2028000 + flags = 1 + data = length 288, hash CDC747BF + sample 27: + time = 2052000 + flags = 1 + data = length 336, hash AF22AA74 + sample 28: + time = 2076000 + flags = 1 + data = length 384, hash 82F326AA + sample 29: + time = 2100000 + flags = 1 + data = length 384, hash EDA26C4D + sample 30: + time = 2124000 + flags = 1 + data = length 336, hash 94C643DC + sample 31: + time = 2148000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 32: + time = 2172000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 33: + time = 2196000 + flags = 1 + data = length 336, hash 7E472219 + sample 34: + time = 2220000 + flags = 1 + data = length 336, hash DA47B9FA + sample 35: + time = 2244000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 36: + time = 2268000 + flags = 1 + data = length 288, hash DBF93FAC + sample 37: + time = 2292000 + flags = 1 + data = length 336, hash 243F4B2 + sample 38: + time = 2316000 + flags = 1 + data = length 336, hash 2E881490 + sample 39: + time = 2340000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 40: + time = 2364000 + flags = 1 + data = length 336, hash C73E5D30 + sample 41: + time = 2388000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 42: + time = 2412000 + flags = 1 + data = length 336, hash E0135533 + sample 43: + time = 2436000 + flags = 1 + data = length 336, hash D13C9DBC + sample 44: + time = 2460000 + flags = 1 + data = length 336, hash 63D524CA + sample 45: + time = 2484000 + flags = 1 + data = length 288, hash A28514C3 + sample 46: + time = 2508000 + flags = 1 + data = length 336, hash 72B647FF + sample 47: + time = 2532000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 48: + time = 2556000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 49: + time = 2580000 + flags = 1 + data = length 336, hash 121B913B + sample 50: + time = 2604000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 51: + time = 2628000 + flags = 1 + data = length 336, hash 5B5823DE + sample 52: + time = 2652000 + flags = 1 + data = length 384, hash D8B83F78 + sample 53: + time = 2676000 + flags = 1 + data = length 240, hash E649682F + sample 54: + time = 2700000 + flags = 1 + data = length 96, hash C559A6F4 + sample 55: + time = 2724000 + flags = 1 + data = length 96, hash 792796BC + sample 56: + time = 2748000 + flags = 1 + data = length 120, hash 8172CD0E + sample 57: + time = 2772000 + flags = 1 + data = length 120, hash F562B52F +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.3.dump new file mode 100644 index 0000000000..2436fe36ad --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.3.dump @@ -0,0 +1,137 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=702000, position=10317]] + getPosition(1404000) = [[timeUs=1404000, position=19677]] + getPosition(2808000) = [[timeUs=2106000, position=29517]] +numberOfTracks = 1 +track 0: + total output bytes = 8592 + sample count = 29 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 2106000 + flags = 1 + data = length 384, hash EDA26C4D + sample 1: + time = 2130000 + flags = 1 + data = length 336, hash 94C643DC + sample 2: + time = 2154000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 3: + time = 2178000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 4: + time = 2202000 + flags = 1 + data = length 336, hash 7E472219 + sample 5: + time = 2226000 + flags = 1 + data = length 336, hash DA47B9FA + sample 6: + time = 2250000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 7: + time = 2274000 + flags = 1 + data = length 288, hash DBF93FAC + sample 8: + time = 2298000 + flags = 1 + data = length 336, hash 243F4B2 + sample 9: + time = 2322000 + flags = 1 + data = length 336, hash 2E881490 + sample 10: + time = 2346000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 11: + time = 2370000 + flags = 1 + data = length 336, hash C73E5D30 + sample 12: + time = 2394000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 13: + time = 2418000 + flags = 1 + data = length 336, hash E0135533 + sample 14: + time = 2442000 + flags = 1 + data = length 336, hash D13C9DBC + sample 15: + time = 2466000 + flags = 1 + data = length 336, hash 63D524CA + sample 16: + time = 2490000 + flags = 1 + data = length 288, hash A28514C3 + sample 17: + time = 2514000 + flags = 1 + data = length 336, hash 72B647FF + sample 18: + time = 2538000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 19: + time = 2562000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 20: + time = 2586000 + flags = 1 + data = length 336, hash 121B913B + sample 21: + time = 2610000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 22: + time = 2634000 + flags = 1 + data = length 336, hash 5B5823DE + sample 23: + time = 2658000 + flags = 1 + data = length 384, hash D8B83F78 + sample 24: + time = 2682000 + flags = 1 + data = length 240, hash E649682F + sample 25: + time = 2706000 + flags = 1 + data = length 96, hash C559A6F4 + sample 26: + time = 2730000 + flags = 1 + data = length 96, hash 792796BC + sample 27: + time = 2754000 + flags = 1 + data = length 120, hash 8172CD0E + sample 28: + time = 2778000 + flags = 1 + data = length 120, hash F562B52F +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.unknown_length.dump new file mode 100644 index 0000000000..de95b24610 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp3/bear-vbr-vbri-header.mp3.unknown_length.dump @@ -0,0 +1,485 @@ +seekMap: + isSeekable = true + duration = 2808000 + getPosition(0) = [[timeUs=0, position=141]] + getPosition(1) = [[timeUs=0, position=141], [timeUs=702000, position=10317]] + getPosition(1404000) = [[timeUs=1404000, position=19677]] + getPosition(2808000) = [[timeUs=2106000, position=29517]] +numberOfTracks = 1 +track 0: + total output bytes = 38064 + sample count = 116 + track duration = 2808000 + format 0: + averageBitrate = 32000 + containerMimeType = audio/mpeg + sampleMimeType = audio/mpeg + maxInputSize = 4096 + channelCount = 2 + sampleRate = 48000 + metadata = entries=[TSSE: description=null: values=[Lavf58.29.100]] + sample 0: + time = 0 + flags = 1 + data = length 96, hash 1F161542 + sample 1: + time = 24000 + flags = 1 + data = length 768, hash CD1DC50F + sample 2: + time = 48000 + flags = 1 + data = length 336, hash 3F64124B + sample 3: + time = 72000 + flags = 1 + data = length 336, hash 8FFED94E + sample 4: + time = 96000 + flags = 1 + data = length 288, hash 9CD77D47 + sample 5: + time = 120000 + flags = 1 + data = length 384, hash 24607BB5 + sample 6: + time = 144000 + flags = 1 + data = length 480, hash 4937EBAB + sample 7: + time = 168000 + flags = 1 + data = length 336, hash 546342B1 + sample 8: + time = 192000 + flags = 1 + data = length 336, hash 79E0923F + sample 9: + time = 216000 + flags = 1 + data = length 336, hash AB1F3948 + sample 10: + time = 240000 + flags = 1 + data = length 336, hash C3A4D888 + sample 11: + time = 264000 + flags = 1 + data = length 288, hash 7867DA45 + sample 12: + time = 288000 + flags = 1 + data = length 336, hash B1240B73 + sample 13: + time = 312000 + flags = 1 + data = length 336, hash 94CFCD35 + sample 14: + time = 336000 + flags = 1 + data = length 288, hash 94F412C + sample 15: + time = 360000 + flags = 1 + data = length 336, hash A1D9FF41 + sample 16: + time = 384000 + flags = 1 + data = length 288, hash 2A8DA21B + sample 17: + time = 408000 + flags = 1 + data = length 336, hash 6A429CE + sample 18: + time = 432000 + flags = 1 + data = length 336, hash 68853982 + sample 19: + time = 456000 + flags = 1 + data = length 384, hash 1D6F779C + sample 20: + time = 480000 + flags = 1 + data = length 480, hash 6B31EBEE + sample 21: + time = 504000 + flags = 1 + data = length 336, hash 888335BE + sample 22: + time = 528000 + flags = 1 + data = length 336, hash 6072AC8B + sample 23: + time = 552000 + flags = 1 + data = length 336, hash C9D24234 + sample 24: + time = 576000 + flags = 1 + data = length 288, hash 52BF4D1E + sample 25: + time = 600000 + flags = 1 + data = length 336, hash F93F4F0 + sample 26: + time = 624000 + flags = 1 + data = length 336, hash 8617688A + sample 27: + time = 648000 + flags = 1 + data = length 480, hash FAB0D31B + sample 28: + time = 672000 + flags = 1 + data = length 384, hash FA4B53E2 + sample 29: + time = 696000 + flags = 1 + data = length 336, hash 8C435F6A + sample 30: + time = 720000 + flags = 1 + data = length 336, hash 60D3F80C + sample 31: + time = 744000 + flags = 1 + data = length 336, hash DC15B68B + sample 32: + time = 768000 + flags = 1 + data = length 288, hash FF3DF141 + sample 33: + time = 792000 + flags = 1 + data = length 336, hash A64B3042 + sample 34: + time = 816000 + flags = 1 + data = length 336, hash ACA622A1 + sample 35: + time = 840000 + flags = 1 + data = length 288, hash 3E34B8D4 + sample 36: + time = 864000 + flags = 1 + data = length 288, hash 9B96F72A + sample 37: + time = 888000 + flags = 1 + data = length 336, hash E917C122 + sample 38: + time = 912000 + flags = 1 + data = length 336, hash 10ED1470 + sample 39: + time = 936000 + flags = 1 + data = length 288, hash 706B8A7C + sample 40: + time = 960000 + flags = 1 + data = length 336, hash 71FFE4A0 + sample 41: + time = 984000 + flags = 1 + data = length 336, hash D4160463 + sample 42: + time = 1008000 + flags = 1 + data = length 336, hash EC557B14 + sample 43: + time = 1032000 + flags = 1 + data = length 288, hash 5598CF8B + sample 44: + time = 1056000 + flags = 1 + data = length 336, hash 7E0AB41 + sample 45: + time = 1080000 + flags = 1 + data = length 336, hash 1C585FEF + sample 46: + time = 1104000 + flags = 1 + data = length 336, hash A4A4855E + sample 47: + time = 1128000 + flags = 1 + data = length 336, hash CECA51D3 + sample 48: + time = 1152000 + flags = 1 + data = length 288, hash 2D362DC5 + sample 49: + time = 1176000 + flags = 1 + data = length 336, hash 9EB2609D + sample 50: + time = 1200000 + flags = 1 + data = length 336, hash 28FFB3FE + sample 51: + time = 1224000 + flags = 1 + data = length 288, hash 2AA2D216 + sample 52: + time = 1248000 + flags = 1 + data = length 336, hash CDBC7032 + sample 53: + time = 1272000 + flags = 1 + data = length 336, hash 25B13FE7 + sample 54: + time = 1296000 + flags = 1 + data = length 336, hash DB6BB1E + sample 55: + time = 1320000 + flags = 1 + data = length 336, hash EBE951F4 + sample 56: + time = 1344000 + flags = 1 + data = length 288, hash 9E2EBFF7 + sample 57: + time = 1368000 + flags = 1 + data = length 336, hash 36A7D455 + sample 58: + time = 1392000 + flags = 1 + data = length 336, hash 84545F8C + sample 59: + time = 1416000 + flags = 1 + data = length 336, hash F66F3045 + sample 60: + time = 1440000 + flags = 1 + data = length 576, hash 5AB089EA + sample 61: + time = 1464000 + flags = 1 + data = length 336, hash 8868086 + sample 62: + time = 1488000 + flags = 1 + data = length 336, hash D5EB6D63 + sample 63: + time = 1512000 + flags = 1 + data = length 288, hash 7A5374B7 + sample 64: + time = 1536000 + flags = 1 + data = length 336, hash BEB27A75 + sample 65: + time = 1560000 + flags = 1 + data = length 336, hash E251E0FD + sample 66: + time = 1584000 + flags = 1 + data = length 288, hash D54C970 + sample 67: + time = 1608000 + flags = 1 + data = length 336, hash 52C473B9 + sample 68: + time = 1632000 + flags = 1 + data = length 336, hash F5F13334 + sample 69: + time = 1656000 + flags = 1 + data = length 480, hash A5F1E987 + sample 70: + time = 1680000 + flags = 1 + data = length 288, hash 453A1267 + sample 71: + time = 1704000 + flags = 1 + data = length 288, hash 7C6C2EA9 + sample 72: + time = 1728000 + flags = 1 + data = length 336, hash F4BFECA4 + sample 73: + time = 1752000 + flags = 1 + data = length 336, hash 751A395A + sample 74: + time = 1776000 + flags = 1 + data = length 336, hash EE38DB02 + sample 75: + time = 1800000 + flags = 1 + data = length 336, hash F18837E2 + sample 76: + time = 1824000 + flags = 1 + data = length 336, hash ED36B78E + sample 77: + time = 1848000 + flags = 1 + data = length 336, hash B3D28289 + sample 78: + time = 1872000 + flags = 1 + data = length 288, hash 8BDE28E1 + sample 79: + time = 1896000 + flags = 1 + data = length 336, hash CFD5E966 + sample 80: + time = 1920000 + flags = 1 + data = length 288, hash DC08E267 + sample 81: + time = 1944000 + flags = 1 + data = length 336, hash 6530CB78 + sample 82: + time = 1968000 + flags = 1 + data = length 336, hash 6CC6636E + sample 83: + time = 1992000 + flags = 1 + data = length 336, hash 613047C1 + sample 84: + time = 2016000 + flags = 1 + data = length 288, hash CDC747BF + sample 85: + time = 2040000 + flags = 1 + data = length 336, hash AF22AA74 + sample 86: + time = 2064000 + flags = 1 + data = length 384, hash 82F326AA + sample 87: + time = 2088000 + flags = 1 + data = length 384, hash EDA26C4D + sample 88: + time = 2112000 + flags = 1 + data = length 336, hash 94C643DC + sample 89: + time = 2136000 + flags = 1 + data = length 288, hash CB5D9C40 + sample 90: + time = 2160000 + flags = 1 + data = length 336, hash 1E69DE3F + sample 91: + time = 2184000 + flags = 1 + data = length 336, hash 7E472219 + sample 92: + time = 2208000 + flags = 1 + data = length 336, hash DA47B9FA + sample 93: + time = 2232000 + flags = 1 + data = length 336, hash DD0ABB7C + sample 94: + time = 2256000 + flags = 1 + data = length 288, hash DBF93FAC + sample 95: + time = 2280000 + flags = 1 + data = length 336, hash 243F4B2 + sample 96: + time = 2304000 + flags = 1 + data = length 336, hash 2E881490 + sample 97: + time = 2328000 + flags = 1 + data = length 288, hash 1C28C8BE + sample 98: + time = 2352000 + flags = 1 + data = length 336, hash C73E5D30 + sample 99: + time = 2376000 + flags = 1 + data = length 288, hash 98B5BFF6 + sample 100: + time = 2400000 + flags = 1 + data = length 336, hash E0135533 + sample 101: + time = 2424000 + flags = 1 + data = length 336, hash D13C9DBC + sample 102: + time = 2448000 + flags = 1 + data = length 336, hash 63D524CA + sample 103: + time = 2472000 + flags = 1 + data = length 288, hash A28514C3 + sample 104: + time = 2496000 + flags = 1 + data = length 336, hash 72B647FF + sample 105: + time = 2520000 + flags = 1 + data = length 336, hash 8F740AB1 + sample 106: + time = 2544000 + flags = 1 + data = length 336, hash 5E3C7E93 + sample 107: + time = 2568000 + flags = 1 + data = length 336, hash 121B913B + sample 108: + time = 2592000 + flags = 1 + data = length 336, hash 578FCCF2 + sample 109: + time = 2616000 + flags = 1 + data = length 336, hash 5B5823DE + sample 110: + time = 2640000 + flags = 1 + data = length 384, hash D8B83F78 + sample 111: + time = 2664000 + flags = 1 + data = length 240, hash E649682F + sample 112: + time = 2688000 + flags = 1 + data = length 96, hash C559A6F4 + sample 113: + time = 2712000 + flags = 1 + data = length 96, hash 792796BC + sample 114: + time = 2736000 + flags = 1 + data = length 120, hash 8172CD0E + sample 115: + time = 2760000 + flags = 1 + data = length 120, hash F562B52F +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/mp3/bear-vbr-vbri-header.mp3 b/libraries/test_data/src/test/assets/media/mp3/bear-vbr-vbri-header.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f2f25e7dbfecccf974a3b36600bdf747f3b77f24 GIT binary patch literal 38301 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 literal 0 HcmV?d00001