diff --git a/libraries/test_data/src/test/assets/transformerdumps/mkv/sample_with_srt.mkv.dump b/libraries/test_data/src/test/assets/transformerdumps/mkv/sample_with_srt.mkv.dump.noaudio similarity index 52% rename from libraries/test_data/src/test/assets/transformerdumps/mkv/sample_with_srt.mkv.dump rename to libraries/test_data/src/test/assets/transformerdumps/mkv/sample_with_srt.mkv.dump.noaudio index 7313621b32..1fde583985 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mkv/sample_with_srt.mkv.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mkv/sample_with_srt.mkv.dump.noaudio @@ -9,12 +9,6 @@ format 0: initializationData: data = length 30, hash F6F3D010 data = length 10, hash 7A0D0F2B -format 1: - averageBitrate = 131072 - sampleMimeType = audio/mp4a-latm - channelCount = 1 - sampleRate = 44100 - pcmEncoding = 2 sample: trackIndex = 0 dataHashCode = -252482306 @@ -195,178 +189,4 @@ sample: size = 486 isKeyFrame = false presentationTimeUs = 933000 -sample: - trackIndex = 1 - dataHashCode = 555688582 - size = 416 - isKeyFrame = true - presentationTimeUs = 0 -sample: - trackIndex = 1 - dataHashCode = 2000837254 - size = 418 - isKeyFrame = true - presentationTimeUs = 4716 -sample: - trackIndex = 1 - dataHashCode = -1593942879 - size = 418 - isKeyFrame = true - presentationTimeUs = 9455 -sample: - trackIndex = 1 - dataHashCode = 587837542 - size = 418 - isKeyFrame = true - presentationTimeUs = 14195 -sample: - trackIndex = 1 - dataHashCode = -1836423877 - size = 418 - isKeyFrame = true - presentationTimeUs = 18934 -sample: - trackIndex = 1 - dataHashCode = 874705099 - size = 418 - isKeyFrame = true - presentationTimeUs = 23673 -sample: - trackIndex = 1 - dataHashCode = -269206181 - size = 418 - isKeyFrame = true - presentationTimeUs = 28412 -sample: - trackIndex = 1 - dataHashCode = -58682425 - size = 418 - isKeyFrame = true - presentationTimeUs = 33151 -sample: - trackIndex = 1 - dataHashCode = -859796970 - size = 418 - isKeyFrame = true - presentationTimeUs = 37891 -sample: - trackIndex = 1 - dataHashCode = 711911523 - size = 418 - isKeyFrame = true - presentationTimeUs = 42630 -sample: - trackIndex = 1 - dataHashCode = -694513071 - size = 418 - isKeyFrame = true - presentationTimeUs = 47369 -sample: - trackIndex = 1 - dataHashCode = -1124371059 - size = 418 - isKeyFrame = true - presentationTimeUs = 52108 -sample: - trackIndex = 1 - dataHashCode = 297166745 - size = 418 - isKeyFrame = true - presentationTimeUs = 56848 -sample: - trackIndex = 1 - dataHashCode = -937110638 - size = 418 - isKeyFrame = true - presentationTimeUs = 61587 -sample: - trackIndex = 1 - dataHashCode = -1050158990 - size = 418 - isKeyFrame = true - presentationTimeUs = 66326 -sample: - trackIndex = 1 - dataHashCode = 1109510229 - size = 418 - isKeyFrame = true - presentationTimeUs = 71065 -sample: - trackIndex = 1 - dataHashCode = 1297086772 - size = 418 - isKeyFrame = true - presentationTimeUs = 75804 -sample: - trackIndex = 1 - dataHashCode = -1739939803 - size = 418 - isKeyFrame = true - presentationTimeUs = 80544 -sample: - trackIndex = 1 - dataHashCode = -1149727930 - size = 418 - isKeyFrame = true - presentationTimeUs = 85283 -sample: - trackIndex = 1 - dataHashCode = -1627652713 - size = 418 - isKeyFrame = true - presentationTimeUs = 90022 -sample: - trackIndex = 1 - dataHashCode = -551926260 - size = 418 - isKeyFrame = true - presentationTimeUs = 94761 -sample: - trackIndex = 1 - dataHashCode = 45987178 - size = 418 - isKeyFrame = true - presentationTimeUs = 99501 -sample: - trackIndex = 1 - dataHashCode = -903675808 - size = 418 - isKeyFrame = true - presentationTimeUs = 104240 -sample: - trackIndex = 1 - dataHashCode = -755916991 - size = 418 - isKeyFrame = true - presentationTimeUs = 108979 -sample: - trackIndex = 1 - dataHashCode = -1355207303 - size = 418 - isKeyFrame = true - presentationTimeUs = 113718 -sample: - trackIndex = 1 - dataHashCode = -975703389 - size = 418 - isKeyFrame = true - presentationTimeUs = 118458 -sample: - trackIndex = 1 - dataHashCode = 1933194670 - size = 418 - isKeyFrame = true - presentationTimeUs = 123197 -sample: - trackIndex = 1 - dataHashCode = -565778989 - size = 418 - isKeyFrame = true - presentationTimeUs = 127936 -sample: - trackIndex = 1 - dataHashCode = 1454083383 - size = 418 - isKeyFrame = true - presentationTimeUs = 132675 released = true diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump.noaudio similarity index 53% rename from libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump rename to libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump.noaudio index 5ccb19b8fd..4bf34ecc16 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump.noaudio @@ -11,14 +11,6 @@ format 0: data = length 33, hash D3FB879D data = length 10, hash 7A0D0F2B container metadata = entries=[mdta: key=com.android.version, value=10, mdta: key=com.android.video.temporal_layers_count, value=4, mdta: key=com.android.capture.fps, value=240.0, SlowMotion: segments=[Segment: startTimeMs=88, endTimeMs=879, speedDivisor=2, Segment: startTimeMs=1255, endTimeMs=1970, speedDivisor=8], smta: captureFrameRate=240.0, svcTemporalLayerCount=4, Mp4Timestamp: creation time=3686904890, modification time=3686904890, timescale=1000] -format 1: - averageBitrate = 131072 - sampleMimeType = audio/mp4a-latm - channelCount = 2 - sampleRate = 12000 - pcmEncoding = 2 - metadata = entries=[mdta: key=com.android.version, value=10, mdta: key=com.android.video.temporal_layers_count, value=4, SlowMotion: segments=[Segment: startTimeMs=88, endTimeMs=879, speedDivisor=2, Segment: startTimeMs=1255, endTimeMs=1970, speedDivisor=8], smta: captureFrameRate=240.0, svcTemporalLayerCount=4, Mp4Timestamp: creation time=3686904890, modification time=3686904890, timescale=1000] -container metadata = entries=[mdta: key=com.android.version, value=10, mdta: key=com.android.video.temporal_layers_count, value=4, SlowMotion: segments=[Segment: startTimeMs=88, endTimeMs=879, speedDivisor=2, Segment: startTimeMs=1255, endTimeMs=1970, speedDivisor=8], smta: captureFrameRate=240.0, svcTemporalLayerCount=4, Mp4Timestamp: creation time=3686904890, modification time=3686904890, timescale=1000] sample: trackIndex = 0 dataHashCode = 1949079733 @@ -193,160 +185,4 @@ sample: size = 138 isKeyFrame = false presentationTimeUs = 834083 -sample: - trackIndex = 1 - dataHashCode = -212376212 - size = 20 - isKeyFrame = true - presentationTimeUs = 0 -sample: - trackIndex = 1 - dataHashCode = -1948569090 - size = 72 - isKeyFrame = true - presentationTimeUs = 416 -sample: - trackIndex = 1 - dataHashCode = -1316750072 - size = 84 - isKeyFrame = true - presentationTimeUs = 1916 -sample: - trackIndex = 1 - dataHashCode = 1016428949 - size = 88 - isKeyFrame = true - presentationTimeUs = 3666 -sample: - trackIndex = 1 - dataHashCode = -1127325245 - size = 96 - isKeyFrame = true - presentationTimeUs = 5500 -sample: - trackIndex = 1 - dataHashCode = 1148147726 - size = 92 - isKeyFrame = true - presentationTimeUs = 7500 -sample: - trackIndex = 1 - dataHashCode = -2125685540 - size = 76 - isKeyFrame = true - presentationTimeUs = 9416 -sample: - trackIndex = 1 - dataHashCode = 473329679 - size = 24 - isKeyFrame = true - presentationTimeUs = 11000 -sample: - trackIndex = 1 - dataHashCode = 240990900 - size = 176 - isKeyFrame = true - presentationTimeUs = 11500 -sample: - trackIndex = 1 - dataHashCode = 777637182 - size = 196 - isKeyFrame = true - presentationTimeUs = 15166 -sample: - trackIndex = 1 - dataHashCode = 1872106264 - size = 180 - isKeyFrame = true - presentationTimeUs = 19250 -sample: - trackIndex = 1 - dataHashCode = -1520711499 - size = 140 - isKeyFrame = true - presentationTimeUs = 23000 -sample: - trackIndex = 1 - dataHashCode = 1580199067 - size = 232 - isKeyFrame = true - presentationTimeUs = 25916 -sample: - trackIndex = 1 - dataHashCode = 475464086 - size = 184 - isKeyFrame = true - presentationTimeUs = 30750 -sample: - trackIndex = 1 - dataHashCode = -211754132 - size = 172 - isKeyFrame = true - presentationTimeUs = 34583 -sample: - trackIndex = 1 - dataHashCode = 1236547164 - size = 172 - isKeyFrame = true - presentationTimeUs = 38166 -sample: - trackIndex = 1 - dataHashCode = -2064216186 - size = 188 - isKeyFrame = true - presentationTimeUs = 41750 -sample: - trackIndex = 1 - dataHashCode = -682950885 - size = 260 - isKeyFrame = true - presentationTimeUs = 45666 -sample: - trackIndex = 1 - dataHashCode = 1301206627 - size = 236 - isKeyFrame = true - presentationTimeUs = 51083 -sample: - trackIndex = 1 - dataHashCode = 256580525 - size = 236 - isKeyFrame = true - presentationTimeUs = 56000 -sample: - trackIndex = 1 - dataHashCode = -1086601304 - size = 236 - isKeyFrame = true - presentationTimeUs = 60916 -sample: - trackIndex = 1 - dataHashCode = -2046131588 - size = 224 - isKeyFrame = true - presentationTimeUs = 65833 -sample: - trackIndex = 1 - dataHashCode = 1550955865 - size = 224 - isKeyFrame = true - presentationTimeUs = 70500 -sample: - trackIndex = 1 - dataHashCode = -274800552 - size = 220 - isKeyFrame = true - presentationTimeUs = 75166 -sample: - trackIndex = 1 - dataHashCode = 382420909 - size = 224 - isKeyFrame = true - presentationTimeUs = 79750 -sample: - trackIndex = 1 - dataHashCode = -1431575865 - size = 232 - isKeyFrame = true - presentationTimeUs = 84416 released = true diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sowt-with-video.mov.44100hz.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sowt-with-video.mov.44100hz.dump new file mode 100644 index 0000000000..b7a3bfe30e --- /dev/null +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sowt-with-video.mov.44100hz.dump @@ -0,0 +1,1203 @@ +format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.64002A + maxInputSize = 41084 + width = 1920 + height = 1080 + frameRate = 50.0 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = -1 + hdrStaticInfo = length 0, hash 0 + metadata = entries=[Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 34, hash 8D738018 + data = length 10, hash 7A0D0F2B +container metadata = entries=[Mp4Timestamp: creation time=0, modification time=0, timescale=1000] +format 1: + averageBitrate = 131072 + sampleMimeType = audio/mp4a-latm + channelCount = 2 + sampleRate = 44100 + pcmEncoding = 2 + metadata = entries=[Mp4Timestamp: creation time=0, modification time=0, timescale=1000] +container metadata = entries=[Mp4Timestamp: creation time=0, modification time=0, timescale=1000] +sample: + trackIndex = 0 + dataHashCode = 33691269 + size = 41054 + isKeyFrame = true + presentationTimeUs = 0 +sample: + trackIndex = 0 + dataHashCode = 951153212 + size = 15163 + isKeyFrame = false + presentationTimeUs = 40000 +sample: + trackIndex = 0 + dataHashCode = 552307150 + size = 6490 + isKeyFrame = false + presentationTimeUs = 20000 +sample: + trackIndex = 0 + dataHashCode = -151063635 + size = 25484 + isKeyFrame = false + presentationTimeUs = 120000 +sample: + trackIndex = 0 + dataHashCode = -1847115463 + size = 14792 + isKeyFrame = false + presentationTimeUs = 80000 +sample: + trackIndex = 0 + dataHashCode = 775037055 + size = 8823 + isKeyFrame = false + presentationTimeUs = 60000 +sample: + trackIndex = 0 + dataHashCode = 1452603441 + size = 7905 + isKeyFrame = false + presentationTimeUs = 100000 +sample: + trackIndex = 0 + dataHashCode = 1732228513 + size = 21086 + isKeyFrame = false + presentationTimeUs = 200000 +sample: + trackIndex = 0 + dataHashCode = 1246814657 + size = 13181 + isKeyFrame = false + presentationTimeUs = 160000 +sample: + trackIndex = 0 + dataHashCode = 426081419 + size = 7666 + isKeyFrame = false + presentationTimeUs = 140000 +sample: + trackIndex = 0 + dataHashCode = -241872379 + size = 8627 + isKeyFrame = false + presentationTimeUs = 180000 +sample: + trackIndex = 0 + dataHashCode = 1109784816 + size = 23310 + isKeyFrame = false + presentationTimeUs = 280000 +sample: + trackIndex = 0 + dataHashCode = -377448231 + size = 16108 + isKeyFrame = false + presentationTimeUs = 240000 +sample: + trackIndex = 0 + dataHashCode = -688376574 + size = 10591 + isKeyFrame = false + presentationTimeUs = 220000 +sample: + trackIndex = 0 + dataHashCode = 496944885 + size = 9652 + isKeyFrame = false + presentationTimeUs = 260000 +sample: + trackIndex = 0 + dataHashCode = 591739725 + size = 26209 + isKeyFrame = false + presentationTimeUs = 360000 +sample: + trackIndex = 0 + dataHashCode = -469037805 + size = 14679 + isKeyFrame = false + presentationTimeUs = 320000 +sample: + trackIndex = 0 + dataHashCode = 2089439735 + size = 11258 + isKeyFrame = false + presentationTimeUs = 300000 +sample: + trackIndex = 0 + dataHashCode = -991522861 + size = 8380 + isKeyFrame = false + presentationTimeUs = 340000 +sample: + trackIndex = 0 + dataHashCode = 1228181765 + size = 21371 + isKeyFrame = false + presentationTimeUs = 420000 +sample: + trackIndex = 0 + dataHashCode = -881594031 + size = 15113 + isKeyFrame = false + presentationTimeUs = 380000 +sample: + trackIndex = 0 + dataHashCode = -1336355567 + size = 10553 + isKeyFrame = false + presentationTimeUs = 400000 +sample: + trackIndex = 0 + dataHashCode = -1156719720 + size = 34938 + isKeyFrame = false + presentationTimeUs = 480000 +sample: + trackIndex = 0 + dataHashCode = 396046716 + size = 17842 + isKeyFrame = false + presentationTimeUs = 440000 +sample: + trackIndex = 0 + dataHashCode = -1084632521 + size = 11502 + isKeyFrame = false + presentationTimeUs = 460000 +sample: + trackIndex = 0 + dataHashCode = -337819407 + size = 18009 + isKeyFrame = false + presentationTimeUs = 500000 +sample: + trackIndex = 0 + dataHashCode = 1295059940 + size = 24298 + isKeyFrame = false + presentationTimeUs = 520000 +sample: + trackIndex = 0 + dataHashCode = -929598998 + size = 21682 + isKeyFrame = false + presentationTimeUs = 540000 +sample: + trackIndex = 0 + dataHashCode = 1579805687 + size = 31833 + isKeyFrame = false + presentationTimeUs = 620000 +sample: + trackIndex = 0 + dataHashCode = 79553286 + size = 20853 + isKeyFrame = false + presentationTimeUs = 580000 +sample: + trackIndex = 0 + dataHashCode = -119845353 + size = 12906 + isKeyFrame = false + presentationTimeUs = 560000 +sample: + trackIndex = 0 + dataHashCode = -1242905044 + size = 17165 + isKeyFrame = false + presentationTimeUs = 600000 +sample: + trackIndex = 0 + dataHashCode = 1161132039 + size = 35065 + isKeyFrame = false + presentationTimeUs = 700000 +sample: + trackIndex = 0 + dataHashCode = 1801923857 + size = 19881 + isKeyFrame = false + presentationTimeUs = 660000 +sample: + trackIndex = 0 + dataHashCode = -1201934910 + size = 22571 + isKeyFrame = false + presentationTimeUs = 640000 +sample: + trackIndex = 0 + dataHashCode = -655417171 + size = 11566 + isKeyFrame = false + presentationTimeUs = 680000 +sample: + trackIndex = 0 + dataHashCode = 2011055114 + size = 24236 + isKeyFrame = false + presentationTimeUs = 780000 +sample: + trackIndex = 0 + dataHashCode = 1098159553 + size = 10515 + isKeyFrame = false + presentationTimeUs = 740000 +sample: + trackIndex = 0 + dataHashCode = 813195513 + size = 8188 + isKeyFrame = false + presentationTimeUs = 720000 +sample: + trackIndex = 0 + dataHashCode = 1610084647 + size = 9662 + isKeyFrame = false + presentationTimeUs = 760000 +sample: + trackIndex = 0 + dataHashCode = -389131647 + size = 22443 + isKeyFrame = false + presentationTimeUs = 860000 +sample: + trackIndex = 0 + dataHashCode = -49148581 + size = 12726 + isKeyFrame = false + presentationTimeUs = 820000 +sample: + trackIndex = 0 + dataHashCode = 650534699 + size = 8521 + isKeyFrame = false + presentationTimeUs = 800000 +sample: + trackIndex = 0 + dataHashCode = 554081714 + size = 7850 + isKeyFrame = false + presentationTimeUs = 840000 +sample: + trackIndex = 0 + dataHashCode = -539147636 + size = 30005 + isKeyFrame = false + presentationTimeUs = 940000 +sample: + trackIndex = 0 + dataHashCode = 863445487 + size = 19430 + isKeyFrame = false + presentationTimeUs = 900000 +sample: + trackIndex = 0 + dataHashCode = -210870675 + size = 12962 + isKeyFrame = false + presentationTimeUs = 880000 +sample: + trackIndex = 0 + dataHashCode = -1294790684 + size = 10767 + isKeyFrame = false + presentationTimeUs = 920000 +sample: + trackIndex = 0 + dataHashCode = -650391415 + size = 25914 + isKeyFrame = false + presentationTimeUs = 1000000 +sample: + trackIndex = 0 + dataHashCode = 1964249241 + size = 11471 + isKeyFrame = false + presentationTimeUs = 960000 +sample: + trackIndex = 0 + dataHashCode = 1901943199 + size = 8639 + isKeyFrame = false + presentationTimeUs = 980000 +sample: + trackIndex = 0 + dataHashCode = 754314804 + size = 22173 + isKeyFrame = false + presentationTimeUs = 1060000 +sample: + trackIndex = 0 + dataHashCode = 1631939129 + size = 10274 + isKeyFrame = false + presentationTimeUs = 1020000 +sample: + trackIndex = 0 + dataHashCode = -914580412 + size = 8625 + isKeyFrame = false + presentationTimeUs = 1040000 +sample: + trackIndex = 0 + dataHashCode = 464184359 + size = 19443 + isKeyFrame = false + presentationTimeUs = 1100000 +sample: + trackIndex = 0 + dataHashCode = 521590252 + size = 9189 + isKeyFrame = false + presentationTimeUs = 1080000 +sample: + trackIndex = 0 + dataHashCode = -1920606290 + size = 16242 + isKeyFrame = false + presentationTimeUs = 1120000 +sample: + trackIndex = 0 + dataHashCode = -1462753526 + size = 16036 + isKeyFrame = false + presentationTimeUs = 1140000 +sample: + trackIndex = 0 + dataHashCode = -2095257664 + size = 16431 + isKeyFrame = false + presentationTimeUs = 1160000 +sample: + trackIndex = 0 + dataHashCode = -1722510728 + size = 16421 + isKeyFrame = false + presentationTimeUs = 1180000 +sample: + trackIndex = 0 + dataHashCode = -2075073532 + size = 23643 + isKeyFrame = false + presentationTimeUs = 1240000 +sample: + trackIndex = 0 + dataHashCode = 1068866869 + size = 9962 + isKeyFrame = false + presentationTimeUs = 1200000 +sample: + trackIndex = 0 + dataHashCode = 2139806323 + size = 8627 + isKeyFrame = false + presentationTimeUs = 1220000 +sample: + trackIndex = 0 + dataHashCode = -75510961 + size = 20148 + isKeyFrame = false + presentationTimeUs = 1280000 +sample: + trackIndex = 0 + dataHashCode = -1734586788 + size = 8888 + isKeyFrame = false + presentationTimeUs = 1260000 +sample: + trackIndex = 0 + dataHashCode = 1689355701 + size = 19300 + isKeyFrame = false + presentationTimeUs = 1320000 +sample: + trackIndex = 0 + dataHashCode = 1014386281 + size = 8455 + isKeyFrame = false + presentationTimeUs = 1300000 +sample: + trackIndex = 0 + dataHashCode = 655967971 + size = 29708 + isKeyFrame = false + presentationTimeUs = 1400000 +sample: + trackIndex = 0 + dataHashCode = 651498019 + size = 12715 + isKeyFrame = false + presentationTimeUs = 1360000 +sample: + trackIndex = 0 + dataHashCode = -1326592134 + size = 8573 + isKeyFrame = false + presentationTimeUs = 1340000 +sample: + trackIndex = 0 + dataHashCode = -481876840 + size = 8982 + isKeyFrame = false + presentationTimeUs = 1380000 +sample: + trackIndex = 0 + dataHashCode = -1289166593 + size = 25026 + isKeyFrame = false + presentationTimeUs = 1460000 +sample: + trackIndex = 0 + dataHashCode = 1533284887 + size = 9600 + isKeyFrame = false + presentationTimeUs = 1420000 +sample: + trackIndex = 0 + dataHashCode = 931231084 + size = 8098 + isKeyFrame = false + presentationTimeUs = 1440000 +sample: + trackIndex = 0 + dataHashCode = 593905363 + size = 27032 + isKeyFrame = false + presentationTimeUs = 1540000 +sample: + trackIndex = 0 + dataHashCode = -61693143 + size = 11416 + isKeyFrame = false + presentationTimeUs = 1500000 +sample: + trackIndex = 0 + dataHashCode = 2034274294 + size = 8119 + isKeyFrame = false + presentationTimeUs = 1480000 +sample: + trackIndex = 0 + dataHashCode = -1382173825 + size = 7355 + isKeyFrame = false + presentationTimeUs = 1520000 +sample: + trackIndex = 0 + dataHashCode = 1141112289 + size = 27694 + isKeyFrame = false + presentationTimeUs = 1620000 +sample: + trackIndex = 0 + dataHashCode = 615108734 + size = 10665 + isKeyFrame = false + presentationTimeUs = 1580000 +sample: + trackIndex = 0 + dataHashCode = -192568269 + size = 7176 + isKeyFrame = false + presentationTimeUs = 1560000 +sample: + trackIndex = 0 + dataHashCode = 1139129648 + size = 7375 + isKeyFrame = false + presentationTimeUs = 1600000 +sample: + trackIndex = 0 + dataHashCode = -644623072 + size = 24651 + isKeyFrame = false + presentationTimeUs = 1700000 +sample: + trackIndex = 0 + dataHashCode = 1087668168 + size = 9679 + isKeyFrame = false + presentationTimeUs = 1660000 +sample: + trackIndex = 0 + dataHashCode = 1406222068 + size = 6862 + isKeyFrame = false + presentationTimeUs = 1640000 +sample: + trackIndex = 0 + dataHashCode = -622032068 + size = 6000 + isKeyFrame = false + presentationTimeUs = 1680000 +sample: + trackIndex = 0 + dataHashCode = 1191619637 + size = 22101 + isKeyFrame = false + presentationTimeUs = 1780000 +sample: + trackIndex = 0 + dataHashCode = 603349552 + size = 8537 + isKeyFrame = false + presentationTimeUs = 1740000 +sample: + trackIndex = 0 + dataHashCode = -1784449460 + size = 6288 + isKeyFrame = false + presentationTimeUs = 1720000 +sample: + trackIndex = 0 + dataHashCode = 1158465085 + size = 5152 + isKeyFrame = false + presentationTimeUs = 1760000 +sample: + trackIndex = 0 + dataHashCode = 147323155 + size = 19889 + isKeyFrame = false + presentationTimeUs = 1860000 +sample: + trackIndex = 0 + dataHashCode = 1714081095 + size = 8893 + isKeyFrame = false + presentationTimeUs = 1820000 +sample: + trackIndex = 0 + dataHashCode = -1894307035 + size = 5905 + isKeyFrame = false + presentationTimeUs = 1800000 +sample: + trackIndex = 0 + dataHashCode = -1208848015 + size = 5635 + isKeyFrame = false + presentationTimeUs = 1840000 +sample: + trackIndex = 0 + dataHashCode = 1015012687 + size = 14896 + isKeyFrame = false + presentationTimeUs = 1940000 +sample: + trackIndex = 0 + dataHashCode = 513736378 + size = 9260 + isKeyFrame = false + presentationTimeUs = 1900000 +sample: + trackIndex = 0 + dataHashCode = 1346700024 + size = 5850 + isKeyFrame = false + presentationTimeUs = 1880000 +sample: + trackIndex = 0 + dataHashCode = 279399292 + size = 7154 + isKeyFrame = false + presentationTimeUs = 1920000 +sample: + trackIndex = 0 + dataHashCode = 831498454 + size = 8605 + isKeyFrame = false + presentationTimeUs = 1980000 +sample: + trackIndex = 0 + dataHashCode = -20875598 + size = 6983 + isKeyFrame = false + presentationTimeUs = 1960000 +sample: + trackIndex = 1 + dataHashCode = 838148193 + size = 3760 + isKeyFrame = true + presentationTimeUs = 0 +sample: + trackIndex = 1 + dataHashCode = 867867043 + size = 3764 + isKeyFrame = true + presentationTimeUs = 21315 +sample: + trackIndex = 1 + dataHashCode = -1491441898 + size = 3764 + isKeyFrame = true + presentationTimeUs = 42653 +sample: + trackIndex = 1 + dataHashCode = 834552609 + size = 3764 + isKeyFrame = true + presentationTimeUs = 63990 +sample: + trackIndex = 1 + dataHashCode = 300797245 + size = 3764 + isKeyFrame = true + presentationTimeUs = 85328 +sample: + trackIndex = 1 + dataHashCode = -1462810335 + size = 3760 + isKeyFrame = true + presentationTimeUs = 106666 +sample: + trackIndex = 1 + dataHashCode = 1944686734 + size = 3764 + isKeyFrame = true + presentationTimeUs = 127981 +sample: + trackIndex = 1 + dataHashCode = -1341756866 + size = 3764 + isKeyFrame = true + presentationTimeUs = 149319 +sample: + trackIndex = 1 + dataHashCode = -2028679386 + size = 3764 + isKeyFrame = true + presentationTimeUs = 170657 +sample: + trackIndex = 1 + dataHashCode = -1875874972 + size = 3764 + isKeyFrame = true + presentationTimeUs = 191995 +sample: + trackIndex = 1 + dataHashCode = 502983932 + size = 3760 + isKeyFrame = true + presentationTimeUs = 213333 +sample: + trackIndex = 1 + dataHashCode = -152413040 + size = 3764 + isKeyFrame = true + presentationTimeUs = 234648 +sample: + trackIndex = 1 + dataHashCode = 2115857425 + size = 3764 + isKeyFrame = true + presentationTimeUs = 255986 +sample: + trackIndex = 1 + dataHashCode = 1565297003 + size = 3764 + isKeyFrame = true + presentationTimeUs = 277324 +sample: + trackIndex = 1 + dataHashCode = -1352896324 + size = 3764 + isKeyFrame = true + presentationTimeUs = 298662 +sample: + trackIndex = 1 + dataHashCode = -1419566217 + size = 3760 + isKeyFrame = true + presentationTimeUs = 320000 +sample: + trackIndex = 1 + dataHashCode = -140145063 + size = 3764 + isKeyFrame = true + presentationTimeUs = 341315 +sample: + trackIndex = 1 + dataHashCode = -1064854301 + size = 3764 + isKeyFrame = true + presentationTimeUs = 362653 +sample: + trackIndex = 1 + dataHashCode = 1140211756 + size = 3764 + isKeyFrame = true + presentationTimeUs = 383990 +sample: + trackIndex = 1 + dataHashCode = 1410022017 + size = 3764 + isKeyFrame = true + presentationTimeUs = 405328 +sample: + trackIndex = 1 + dataHashCode = 1543094264 + size = 3760 + isKeyFrame = true + presentationTimeUs = 426666 +sample: + trackIndex = 1 + dataHashCode = -194814421 + size = 3764 + isKeyFrame = true + presentationTimeUs = 447981 +sample: + trackIndex = 1 + dataHashCode = -1036665888 + size = 1884 + isKeyFrame = true + presentationTimeUs = 469319 +sample: + trackIndex = 1 + dataHashCode = 1775616337 + size = 3528 + isKeyFrame = true + presentationTimeUs = 480000 +sample: + trackIndex = 1 + dataHashCode = 931216668 + size = 3996 + isKeyFrame = true + presentationTimeUs = 500000 +sample: + trackIndex = 1 + dataHashCode = 16108289 + size = 3764 + isKeyFrame = true + presentationTimeUs = 522653 +sample: + trackIndex = 1 + dataHashCode = 1621627919 + size = 3764 + isKeyFrame = true + presentationTimeUs = 543990 +sample: + trackIndex = 1 + dataHashCode = 2068064692 + size = 3764 + isKeyFrame = true + presentationTimeUs = 565328 +sample: + trackIndex = 1 + dataHashCode = -992940742 + size = 3760 + isKeyFrame = true + presentationTimeUs = 586666 +sample: + trackIndex = 1 + dataHashCode = -1602575392 + size = 3764 + isKeyFrame = true + presentationTimeUs = 607981 +sample: + trackIndex = 1 + dataHashCode = -250495549 + size = 3764 + isKeyFrame = true + presentationTimeUs = 629319 +sample: + trackIndex = 1 + dataHashCode = 230148053 + size = 3764 + isKeyFrame = true + presentationTimeUs = 650657 +sample: + trackIndex = 1 + dataHashCode = -1831510348 + size = 3764 + isKeyFrame = true + presentationTimeUs = 671995 +sample: + trackIndex = 1 + dataHashCode = -1720336442 + size = 3760 + isKeyFrame = true + presentationTimeUs = 693333 +sample: + trackIndex = 1 + dataHashCode = 967577141 + size = 3764 + isKeyFrame = true + presentationTimeUs = 714648 +sample: + trackIndex = 1 + dataHashCode = 1942439530 + size = 3764 + isKeyFrame = true + presentationTimeUs = 735986 +sample: + trackIndex = 1 + dataHashCode = -935502622 + size = 3764 + isKeyFrame = true + presentationTimeUs = 757324 +sample: + trackIndex = 1 + dataHashCode = -843755946 + size = 3764 + isKeyFrame = true + presentationTimeUs = 778662 +sample: + trackIndex = 1 + dataHashCode = 1069393122 + size = 3760 + isKeyFrame = true + presentationTimeUs = 800000 +sample: + trackIndex = 1 + dataHashCode = 49423702 + size = 3764 + isKeyFrame = true + presentationTimeUs = 821315 +sample: + trackIndex = 1 + dataHashCode = -553195030 + size = 3764 + isKeyFrame = true + presentationTimeUs = 842653 +sample: + trackIndex = 1 + dataHashCode = -1811527473 + size = 3764 + isKeyFrame = true + presentationTimeUs = 863990 +sample: + trackIndex = 1 + dataHashCode = -1747277513 + size = 3764 + isKeyFrame = true + presentationTimeUs = 885328 +sample: + trackIndex = 1 + dataHashCode = 1624044866 + size = 3760 + isKeyFrame = true + presentationTimeUs = 906666 +sample: + trackIndex = 1 + dataHashCode = -647085493 + size = 3764 + isKeyFrame = true + presentationTimeUs = 927981 +sample: + trackIndex = 1 + dataHashCode = 685235410 + size = 1884 + isKeyFrame = true + presentationTimeUs = 949319 +sample: + trackIndex = 1 + dataHashCode = 932376296 + size = 3760 + isKeyFrame = true + presentationTimeUs = 960000 +sample: + trackIndex = 1 + dataHashCode = 1297632614 + size = 3296 + isKeyFrame = true + presentationTimeUs = 981315 +sample: + trackIndex = 1 + dataHashCode = -1698066806 + size = 4232 + isKeyFrame = true + presentationTimeUs = 1000000 +sample: + trackIndex = 1 + dataHashCode = 1930678601 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1023990 +sample: + trackIndex = 1 + dataHashCode = -1846516440 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1045328 +sample: + trackIndex = 1 + dataHashCode = -1427786374 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1066666 +sample: + trackIndex = 1 + dataHashCode = 318451114 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1087981 +sample: + trackIndex = 1 + dataHashCode = -715132585 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1109319 +sample: + trackIndex = 1 + dataHashCode = 264171543 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1130657 +sample: + trackIndex = 1 + dataHashCode = -1040207413 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1151995 +sample: + trackIndex = 1 + dataHashCode = 879854128 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1173333 +sample: + trackIndex = 1 + dataHashCode = 876243983 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1194648 +sample: + trackIndex = 1 + dataHashCode = -363528509 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1215986 +sample: + trackIndex = 1 + dataHashCode = -135578478 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1237324 +sample: + trackIndex = 1 + dataHashCode = -515064024 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1258662 +sample: + trackIndex = 1 + dataHashCode = -1108659851 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1280000 +sample: + trackIndex = 1 + dataHashCode = -968838622 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1301315 +sample: + trackIndex = 1 + dataHashCode = -1420164148 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1322653 +sample: + trackIndex = 1 + dataHashCode = -1112607201 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1343990 +sample: + trackIndex = 1 + dataHashCode = 1558783105 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1365328 +sample: + trackIndex = 1 + dataHashCode = -352924987 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1386666 +sample: + trackIndex = 1 + dataHashCode = 2106460158 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1407981 +sample: + trackIndex = 1 + dataHashCode = -41009645 + size = 1884 + isKeyFrame = true + presentationTimeUs = 1429319 +sample: + trackIndex = 1 + dataHashCode = 1436590081 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1440000 +sample: + trackIndex = 1 + dataHashCode = 1687127132 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1461315 +sample: + trackIndex = 1 + dataHashCode = 624992026 + size = 3060 + isKeyFrame = true + presentationTimeUs = 1482653 +sample: + trackIndex = 1 + dataHashCode = -1816384888 + size = 4468 + isKeyFrame = true + presentationTimeUs = 1500000 +sample: + trackIndex = 1 + dataHashCode = 1234475840 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1525328 +sample: + trackIndex = 1 + dataHashCode = 1059545106 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1546666 +sample: + trackIndex = 1 + dataHashCode = -122199485 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1567981 +sample: + trackIndex = 1 + dataHashCode = 1959246634 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1589319 +sample: + trackIndex = 1 + dataHashCode = 850067509 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1610657 +sample: + trackIndex = 1 + dataHashCode = 1980472225 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1631995 +sample: + trackIndex = 1 + dataHashCode = -925055805 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1653333 +sample: + trackIndex = 1 + dataHashCode = -1674063596 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1674648 +sample: + trackIndex = 1 + dataHashCode = -207399418 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1695986 +sample: + trackIndex = 1 + dataHashCode = 1414022975 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1717324 +sample: + trackIndex = 1 + dataHashCode = -750183218 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1738662 +sample: + trackIndex = 1 + dataHashCode = 2010693178 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1760000 +sample: + trackIndex = 1 + dataHashCode = -2140767398 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1781315 +sample: + trackIndex = 1 + dataHashCode = 797139457 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1802653 +sample: + trackIndex = 1 + dataHashCode = 1273236854 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1823990 +sample: + trackIndex = 1 + dataHashCode = -1033659332 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1845328 +sample: + trackIndex = 1 + dataHashCode = -476572566 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1866666 +sample: + trackIndex = 1 + dataHashCode = -1957052196 + size = 3764 + isKeyFrame = true + presentationTimeUs = 1887981 +sample: + trackIndex = 1 + dataHashCode = 191919408 + size = 1884 + isKeyFrame = true + presentationTimeUs = 1909319 +sample: + trackIndex = 1 + dataHashCode = 10326927 + size = 3760 + isKeyFrame = true + presentationTimeUs = 1920000 +sample: + trackIndex = 1 + dataHashCode = -672114487 + size = 7528 + isKeyFrame = true + presentationTimeUs = 1941315 +sample: + trackIndex = 1 + dataHashCode = 1403065337 + size = 2824 + isKeyFrame = true + presentationTimeUs = 1983990 +sample: + trackIndex = 1 + dataHashCode = 923521 + size = 4 + isKeyFrame = true + presentationTimeUs = 2000000 +released = true diff --git a/libraries/test_data/src/test/assets/transformerdumps/wav/sample.wav.48000hz.dump b/libraries/test_data/src/test/assets/transformerdumps/wav/sample.wav.48000hz.dump new file mode 100644 index 0000000000..5ec4fa225a --- /dev/null +++ b/libraries/test_data/src/test/assets/transformerdumps/wav/sample.wav.48000hz.dump @@ -0,0 +1,73 @@ +format 0: + averageBitrate = 131072 + sampleMimeType = audio/mp4a-latm + channelCount = 1 + sampleRate = 48000 + pcmEncoding = 2 +sample: + trackIndex = 0 + dataHashCode = -206878443 + size = 9598 + isKeyFrame = true + presentationTimeUs = 0 +sample: + trackIndex = 0 + dataHashCode = 1925380271 + size = 9600 + isKeyFrame = true + presentationTimeUs = 99979 +sample: + trackIndex = 0 + dataHashCode = -1463691457 + size = 9600 + isKeyFrame = true + presentationTimeUs = 199979 +sample: + trackIndex = 0 + dataHashCode = -1949646832 + size = 9600 + isKeyFrame = true + presentationTimeUs = 299979 +sample: + trackIndex = 0 + dataHashCode = 448289446 + size = 9600 + isKeyFrame = true + presentationTimeUs = 399979 +sample: + trackIndex = 0 + dataHashCode = 774 + size = 2 + isKeyFrame = true + presentationTimeUs = 499979 +sample: + trackIndex = 0 + dataHashCode = 389300669 + size = 19198 + isKeyFrame = true + presentationTimeUs = 500000 +sample: + trackIndex = 0 + dataHashCode = 1861606067 + size = 9600 + isKeyFrame = true + presentationTimeUs = 699979 +sample: + trackIndex = 0 + dataHashCode = -1038569478 + size = 9600 + isKeyFrame = true + presentationTimeUs = 799979 +sample: + trackIndex = 0 + dataHashCode = 646441790 + size = 9600 + isKeyFrame = true + presentationTimeUs = 899979 +sample: + trackIndex = 0 + dataHashCode = 340 + size = 2 + isKeyFrame = true + presentationTimeUs = 999979 +released = true diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ExportTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ExportTest.java index 077a7ec245..50057ebabf 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ExportTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ExportTest.java @@ -27,6 +27,7 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREAS import static androidx.media3.transformer.AndroidTestUtil.MP4_REMOTE_8K24_FORMAT; import static androidx.media3.transformer.AndroidTestUtil.MP4_REMOTE_8K24_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped; +import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.net.Uri; @@ -39,6 +40,7 @@ import androidx.media3.transformer.AndroidTestUtil.ForceEncodeEncoderFactory; import androidx.media3.transformer.DefaultEncoderFactory; import androidx.media3.transformer.EditedMediaItem; import androidx.media3.transformer.Effects; +import androidx.media3.transformer.ExportTestResult; import androidx.media3.transformer.Transformer; import androidx.media3.transformer.TransformerAndroidTestRunner; import androidx.media3.transformer.VideoEncoderSettings; @@ -237,9 +239,13 @@ public class ExportTest { new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_SEF_URI_STRING))) .setFlattenForSlowMotion(true) .build(); - new TransformerAndroidTestRunner.Builder(context, transformer) - .build() - .run(testId, editedMediaItem); + ExportTestResult result = + new TransformerAndroidTestRunner.Builder(context, transformer) + .build() + .run(testId, editedMediaItem); + + assertThat(result.exportResult.durationMs).isGreaterThan(800); + assertThat(result.exportResult.durationMs).isLessThan(950); } @Test diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java index ebbe752184..9015a11404 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java @@ -68,7 +68,9 @@ import java.util.concurrent.atomic.AtomicReference; public AudioGraphInput(EditedMediaItem item, Format inputFormat) throws UnhandledAudioFormatException { - checkArgument(inputFormat.pcmEncoding != Format.NO_VALUE); + AudioFormat inputAudioFormat = new AudioFormat(inputFormat); + checkArgument(isInputAudioFormatValid(inputAudioFormat), /* errorMessage= */ inputAudioFormat); + availableInputBuffers = new ConcurrentLinkedDeque<>(); ByteBuffer emptyBuffer = ByteBuffer.allocateDirect(0).order(ByteOrder.nativeOrder()); for (int i = 0; i < MAX_INPUT_BUFFER_COUNT; i++) { @@ -78,7 +80,6 @@ import java.util.concurrent.atomic.AtomicReference; } pendingInputBuffers = new ConcurrentLinkedDeque<>(); pendingMediaItemChange = new AtomicReference<>(); - AudioFormat inputAudioFormat = new AudioFormat(inputFormat); silentAudioGenerator = new SilentAudioGenerator(inputAudioFormat); audioProcessingPipeline = configureProcessing( @@ -127,7 +128,8 @@ import java.util.concurrent.atomic.AtomicReference; "Could not generate silent audio because duration is unknown."); } else { checkState(MimeTypes.isAudio(trackFormat.sampleMimeType)); - checkState(trackFormat.pcmEncoding != Format.NO_VALUE); + AudioFormat trackAudioFormat = new AudioFormat(trackFormat); + checkState(isInputAudioFormatValid(trackAudioFormat), /* errorMessage= */ trackAudioFormat); } pendingMediaItemChange.set( new MediaItemChange(editedMediaItem, durationUs, trackFormat, isLast)); @@ -365,6 +367,22 @@ import java.util.concurrent.atomic.AtomicReference; return audioProcessingPipeline; } + private static boolean isInputAudioFormatValid(AudioFormat format) { + if (format.encoding == Format.NO_VALUE) { + return false; + } + if (format.sampleRate == Format.NO_VALUE) { + return false; + } + if (format.channelCount == Format.NO_VALUE) { + return false; + } + if (format.bytesPerFrame == Format.NO_VALUE) { + return false; + } + return true; + } + private static final class MediaItemChange { public final EditedMediaItem editedMediaItem; public final long durationUs; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java index fdec19d85b..24ea6c5f8c 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java @@ -45,6 +45,7 @@ import androidx.media3.decoder.DecoderInputBuffer; import androidx.media3.effect.DebugTraceUtil; import java.io.IOException; import java.nio.ByteBuffer; +import java.util.Objects; import org.checkerframework.checker.initialization.qual.UnknownInitialization; import org.checkerframework.checker.nullness.qual.EnsuresNonNullIf; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @@ -72,7 +73,6 @@ public final class DefaultCodec implements Codec { private @MonotonicNonNull Format outputFormat; @Nullable private ByteBuffer outputBuffer; - private int inputBufferIndex; private int outputBufferIndex; private boolean inputStreamEnded; @@ -413,16 +413,12 @@ public final class DefaultCodec implements Codec { private static Format convertToFormat( MediaFormat mediaFormat, boolean isDecoder, @Nullable Metadata metadata) { - Format.Builder formatBuilder = - MediaFormatUtil.createFormatFromMediaFormat(mediaFormat).buildUpon().setMetadata(metadata); - if (isDecoder) { - // TODO(b/178685617): Restrict this to only set the PCM encoding for audio/raw once we have - // a way to simulate more realistic codec input/output formats in tests. + Format format = MediaFormatUtil.createFormatFromMediaFormat(mediaFormat); + Format.Builder formatBuilder = format.buildUpon().setMetadata(metadata); - // With Robolectric, codecs do not actually encode/decode. The format of buffers is passed - // through. However downstream components need to know the PCM encoding of the data being - // output, so if a decoder is not outputting raw audio, we need to set the PCM - // encoding to the default. + if (isDecoder + && format.pcmEncoding == Format.NO_VALUE + && Objects.equals(format.sampleMimeType, MimeTypes.AUDIO_RAW)) { formatBuilder.setPcmEncoding(DEFAULT_PCM_ENCODING); } return formatBuilder.build(); diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java index fa4f676930..a37ca1e6b5 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/MediaItemExportTest.java @@ -20,7 +20,6 @@ import static androidx.media3.test.utils.robolectric.RobolectricUtil.runLooperUn import static androidx.media3.transformer.AssetLoader.SUPPORTED_OUTPUT_TYPE_DECODED; import static androidx.media3.transformer.AssetLoader.SUPPORTED_OUTPUT_TYPE_ENCODED; import static androidx.media3.transformer.TestUtil.ASSET_URI_PREFIX; -import static androidx.media3.transformer.TestUtil.FILE_AUDIO_AC3_UNSUPPORTED_BY_MUXER; import static androidx.media3.transformer.TestUtil.FILE_AUDIO_AMR_NB; import static androidx.media3.transformer.TestUtil.FILE_AUDIO_AMR_WB; import static androidx.media3.transformer.TestUtil.FILE_AUDIO_RAW; @@ -123,8 +122,8 @@ public final class MediaItemExportTest { muxerFactory = new CapturingMuxer.Factory(); progressHolder = new ProgressHolder(); compositionArgumentCaptor = ArgumentCaptor.forClass(Composition.class); - addAudioDecoders(MimeTypes.AUDIO_RAW, MimeTypes.AUDIO_AAC, MimeTypes.AUDIO_AC3); - addAudioEncoders(MimeTypes.AUDIO_AAC, MimeTypes.AUDIO_AC3); + addAudioDecoders(MimeTypes.AUDIO_RAW); + addAudioEncoders(MimeTypes.AUDIO_AAC); } @After @@ -176,7 +175,7 @@ public final class MediaItemExportTest { } @Test - public void start_audioAndVideo_completesSuccessfully() throws Exception { + public void start_audioAndVideoPassthrough_completesSuccessfully() throws Exception { Transformer transformer = createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); @@ -189,7 +188,7 @@ public final class MediaItemExportTest { } @Test - public void start_audioAndVideo_withClippingStartAtKeyFrame_completesSuccessfully() + public void start_audioAndVideoPassthrough_withClippingStartAtKeyFrame_completesSuccessfully() throws Exception { Transformer transformer = createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); @@ -214,18 +213,21 @@ public final class MediaItemExportTest { } @Test - public void start_withSubtitles_completesSuccessfully() throws Exception { + public void start_withSubtitlesVideoOnly_completesSuccessfully() throws Exception { Transformer transformer = createTransformerBuilder(muxerFactory, /* enableFallback= */ false) .setAudioMimeType(MimeTypes.AUDIO_AAC) .build(); - MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SUBTITLES); + EditedMediaItem editedMediaItem = + new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SUBTITLES)) + .setRemoveAudio(true) + .build(); - transformer.start(mediaItem, outputPath); + transformer.start(editedMediaItem, outputPath); TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_WITH_SUBTITLES)); + context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_WITH_SUBTITLES) + ".noaudio"); } @Test @@ -429,7 +431,7 @@ public final class MediaItemExportTest { sonicAudioProcessor.setOutputSampleRateHz(48000); Transformer transformer = createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); - MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); + MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem) @@ -440,7 +442,7 @@ public final class MediaItemExportTest { TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz")); + context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_AUDIO_RAW + ".48000hz")); } @Test @@ -449,7 +451,7 @@ public final class MediaItemExportTest { sonicAudioProcessor.setOutputSampleRateHz(48000); Transformer transformer = createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); - MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO); + MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem) .setEffects(createAudioEffects(sonicAudioProcessor)) @@ -463,9 +465,8 @@ public final class MediaItemExportTest { transformer.start(composition, outputPath); TransformerTestRunner.runLooper(transformer); - DumpFileAsserts.assertOutput( - context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz")); + context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_AUDIO_RAW + ".48000hz")); } @Test @@ -530,9 +531,9 @@ public final class MediaItemExportTest { .addListener(mockListener2) .addListener(mockListener3) .build(); - MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_AC3_UNSUPPORTED_BY_MUXER); - transformer.start(mediaItem, outputPath); + // No RAW encoder/muxer support, so fallback. + transformer.start(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW), outputPath); TransformerTestRunner.runLooper(transformer); verify(mockListener1) @@ -643,9 +644,9 @@ public final class MediaItemExportTest { } }) .build(); - MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_AC3_UNSUPPORTED_BY_MUXER); - transformer.start(mediaItem, outputPath); + // No RAW encoder/muxer support, so fallback. + transformer.start(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW), outputPath); TransformerTestRunner.runLooper(transformer); assertThat(deprecatedFallbackCalled.get()).isTrue(); @@ -675,19 +676,22 @@ public final class MediaItemExportTest { } @Test - public void start_flattenForSlowMotion_completesSuccessfully() throws Exception { + public void start_flattenForSlowMotionVideoOnly_completesSuccessfully() throws Exception { Transformer transformer = createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build(); EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SEF_SLOW_MOTION)) .setFlattenForSlowMotion(true) + .setRemoveAudio(true) .build(); transformer.start(editedMediaItem, outputPath); TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_WITH_SEF_SLOW_MOTION)); + context, + muxerFactory.getCreatedMuxer(), + getDumpFileName(FILE_WITH_SEF_SLOW_MOTION) + ".noaudio"); } @Test @@ -762,25 +766,29 @@ public final class MediaItemExportTest { public void start_withAudioFormatUnsupportedByMuxer_ignoresDisabledFallbackAndCompletesSuccessfully() throws Exception { - // Test succeeds because MIME type fallback is mandatory. + removeEncodersAndDecoders(); + addAudioDecoders(MimeTypes.AUDIO_RAW); + // RAW supported by encoder, unsupported by muxer. + // AAC supported by encoder and muxer. + addAudioEncoders(MimeTypes.AUDIO_RAW, MimeTypes.AUDIO_AAC); + Transformer.Listener mockListener = mock(Transformer.Listener.class); TransformationRequest originalTransformationRequest = new TransformationRequest.Builder().build(); TransformationRequest fallbackTransformationRequest = new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build(); + // MIME type fallback is mandatory. Transformer transformer = createTransformerBuilder(muxerFactory, /* enableFallback= */ false) .addListener(mockListener) .build(); - MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_AC3_UNSUPPORTED_BY_MUXER); + MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); transformer.start(mediaItem, outputPath); TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, - muxerFactory.getCreatedMuxer(), - getDumpFileName(FILE_AUDIO_AC3_UNSUPPORTED_BY_MUXER + ".fallback")); + context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_AUDIO_RAW + ".aac")); verify(mockListener) .onFallbackApplied( any(Composition.class), @@ -791,6 +799,12 @@ public final class MediaItemExportTest { @Test public void start_withAudioFormatUnsupportedByMuxer_fallsBackAndCompletesSuccessfully() throws Exception { + removeEncodersAndDecoders(); + addAudioDecoders(MimeTypes.AUDIO_RAW); + // RAW supported by encoder, unsupported by muxer. + // AAC supported by encoder and muxer. + addAudioEncoders(MimeTypes.AUDIO_RAW, MimeTypes.AUDIO_AAC); + Transformer.Listener mockListener = mock(Transformer.Listener.class); TransformationRequest originalTransformationRequest = new TransformationRequest.Builder().build(); @@ -800,15 +814,13 @@ public final class MediaItemExportTest { createTransformerBuilder(muxerFactory, /* enableFallback= */ true) .addListener(mockListener) .build(); - MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_AC3_UNSUPPORTED_BY_MUXER); + MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW); transformer.start(mediaItem, outputPath); TransformerTestRunner.runLooper(transformer); DumpFileAsserts.assertOutput( - context, - muxerFactory.getCreatedMuxer(), - getDumpFileName(FILE_AUDIO_AC3_UNSUPPORTED_BY_MUXER + ".fallback")); + context, muxerFactory.getCreatedMuxer(), getDumpFileName(FILE_AUDIO_RAW + ".aac")); verify(mockListener) .onFallbackApplied( any(Composition.class),