diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Atom.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Atom.java index 72729c2eda..6256fa7f27 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Atom.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/Atom.java @@ -410,6 +410,12 @@ import java.util.List; @SuppressWarnings("ConstantCaseForConstants") public static final int TYPE_twos = 0x74776f73; + @SuppressWarnings("ConstantCaseForConstants") + public static final int TYPE_clli = 0x636c6c69; + + @SuppressWarnings("ConstantCaseForConstants") + public static final int TYPE_mdcv = 0x6d646376; + public final int type; public Atom(int type) { diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/AtomParsers.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/AtomParsers.java index 3a59995421..985255a1b9 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/AtomParsers.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/AtomParsers.java @@ -45,6 +45,8 @@ import androidx.media3.extractor.OpusUtil; import androidx.media3.extractor.metadata.mp4.SmtaMetadataEntry; import com.google.common.base.Function; import com.google.common.collect.ImmutableList; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -1061,6 +1063,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; .build(); } + // hdrStaticInfo is allocated using allocate() in allocateHdrStaticInfo(). + @SuppressWarnings("ByteBufferBackingArray") private static void parseVideoSampleEntry( ParsableByteArray parent, int atomType, @@ -1112,7 +1116,14 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; @Nullable String codecs = null; @Nullable byte[] projectionData = null; @C.StereoMode int stereoMode = Format.NO_VALUE; - @Nullable ColorInfo colorInfo = null; + + // HDR related metadata. + @C.ColorSpace int colorSpace = Format.NO_VALUE; + @C.ColorRange int colorRange = Format.NO_VALUE; + @C.ColorTransfer int colorTransfer = Format.NO_VALUE; + // The format of HDR static info is defined in CTA-861-G:2017, Table 45. + @Nullable ByteBuffer hdrStaticInfo = null; + while (childPosition - position < size) { parent.setPosition(childPosition); int childStartPosition = parent.getPosition(); @@ -1157,6 +1168,43 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; } else if (childAtomType == Atom.TYPE_av1C) { ExtractorUtil.checkContainerInput(mimeType == null, /* message= */ null); mimeType = MimeTypes.VIDEO_AV1; + } else if (childAtomType == Atom.TYPE_clli) { + if (hdrStaticInfo == null) { + hdrStaticInfo = allocateHdrStaticInfo(); + } + // The contents of the clli box occupy the last 4 bytes of the HDR static info array. Note + // that each field is read in big endian and written in little endian. + hdrStaticInfo.position(21); + hdrStaticInfo.putShort(parent.readShort()); // max_content_light_level. + hdrStaticInfo.putShort(parent.readShort()); // max_pic_average_light_level. + } else if (childAtomType == Atom.TYPE_mdcv) { + if (hdrStaticInfo == null) { + hdrStaticInfo = allocateHdrStaticInfo(); + } + // The contents of the mdcv box occupy 20 bytes after the first byte of the HDR static info + // array. Note that each field is read in big endian and written in little endian. + short displayPrimariesGX = parent.readShort(); + short displayPrimariesGY = parent.readShort(); + short displayPrimariesBX = parent.readShort(); + short displayPrimariesBY = parent.readShort(); + short displayPrimariesRX = parent.readShort(); + short displayPrimariesRY = parent.readShort(); + short whitePointX = parent.readShort(); + short whitePointY = parent.readShort(); + long maxDisplayMasteringLuminance = parent.readUnsignedInt(); + long minDisplayMasteringLuminance = parent.readUnsignedInt(); + + hdrStaticInfo.position(1); + hdrStaticInfo.putShort(displayPrimariesRX); + hdrStaticInfo.putShort(displayPrimariesRY); + hdrStaticInfo.putShort(displayPrimariesGX); + hdrStaticInfo.putShort(displayPrimariesGY); + hdrStaticInfo.putShort(displayPrimariesBX); + hdrStaticInfo.putShort(displayPrimariesBY); + hdrStaticInfo.putShort(whitePointX); + hdrStaticInfo.putShort(whitePointY); + hdrStaticInfo.putShort((short) (maxDisplayMasteringLuminance / 10000)); + hdrStaticInfo.putShort((short) (minDisplayMasteringLuminance / 10000)); } else if (childAtomType == Atom.TYPE_d263) { ExtractorUtil.checkContainerInput(mimeType == null, /* message= */ null); mimeType = MimeTypes.VIDEO_H263; @@ -1211,12 +1259,10 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; // size=18): https://github.com/google/ExoPlayer/issues/9332 boolean fullRangeFlag = childAtomSize == 19 && (parent.readUnsignedByte() & 0b10000000) != 0; - colorInfo = - new ColorInfo( - ColorInfo.isoColorPrimariesToColorSpace(colorPrimaries), - fullRangeFlag ? C.COLOR_RANGE_FULL : C.COLOR_RANGE_LIMITED, - ColorInfo.isoTransferCharacteristicsToColorTransfer(transferCharacteristics), - /* hdrStaticInfo= */ null); + colorSpace = ColorInfo.isoColorPrimariesToColorSpace(colorPrimaries); + colorRange = fullRangeFlag ? C.COLOR_RANGE_FULL : C.COLOR_RANGE_LIMITED; + colorTransfer = + ColorInfo.isoTransferCharacteristicsToColorTransfer(transferCharacteristics); } else { Log.w(TAG, "Unsupported color type: " + Atom.getAtomTypeString(colorType)); } @@ -1229,7 +1275,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; return; } - out.format = + Format.Builder formatBuilder = new Format.Builder() .setId(trackId) .setSampleMimeType(mimeType) @@ -1241,9 +1287,28 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; .setProjectionData(projectionData) .setStereoMode(stereoMode) .setInitializationData(initializationData) - .setDrmInitData(drmInitData) - .setColorInfo(colorInfo) - .build(); + .setDrmInitData(drmInitData); + if (colorSpace != Format.NO_VALUE + || colorRange != Format.NO_VALUE + || colorTransfer != Format.NO_VALUE + || hdrStaticInfo != null) { + // Note that if either mdcv or clli are missing, we leave the corresponding HDR static + // metadata bytes with value zero. See [Internal ref: b/194535665]. + formatBuilder.setColorInfo( + new ColorInfo( + colorSpace, + colorRange, + colorTransfer, + hdrStaticInfo != null ? hdrStaticInfo.array() : null)); + } + out.format = formatBuilder.build(); + } + + private static ByteBuffer allocateHdrStaticInfo() { + // For HDR static info, Android decoders expect a 25-byte array. The first byte is zero to + // represent Static Metadata Type 1, as per CTA-861-G:2017, Table 44. The following 24 bytes + // follow CTA-861-G:2017, Table 45. + return ByteBuffer.allocate(25).order(ByteOrder.LITTLE_ENDIAN); } private static void parseMetaDataSampleEntry( diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorTest.java index ca832f5777..b42d0f670e 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorTest.java @@ -119,4 +119,10 @@ public final class Mp4ExtractorTest { ExtractorAsserts.assertBehavior( Mp4Extractor::new, "media/mp4/sample_dthd.mp4", simulationConfig); } + + @Test + public void mp4SampleWithColrMdcvAndClli() throws Exception { + ExtractorAsserts.assertBehavior( + Mp4Extractor::new, "media/mp4/sample_with_colr_mdcv_and_clli.mp4", simulationConfig); + } } diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.0.dump new file mode 100644 index 0000000000..8ef4f19b16 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.0.dump @@ -0,0 +1,454 @@ +seekMap: + isSeekable = true + duration = 1022000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(511000) = [[timeUs=0, position=48]] + getPosition(1022000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 266091 + sample count = 60 + format 0: + id = 1 + sampleMimeType = video/av01 + maxInputSize = 144656 + width = 1920 + height = 1080 + frameRate = 59.940056 + colorInfo: + colorSpace = 6 + colorRange = 2 + colorTransfer = 6 + hdrStaticInfo = length 25, hash 423AFC35 + sample 0: + time = 0 + flags = 1 + data = length 144626, hash 7C021D5F + sample 1: + time = 16683 + flags = 0 + data = length 4018, hash FA5E79FA + sample 2: + time = 33366 + flags = 0 + data = length 3, hash D5E0 + sample 3: + time = 50050 + flags = 0 + data = length 144, hash 4A868A2F + sample 4: + time = 66733 + flags = 0 + data = length 3, hash D5D0 + sample 5: + time = 83416 + flags = 0 + data = length 342, hash 5A2E1C3C + sample 6: + time = 100100 + flags = 0 + data = length 3, hash D610 + sample 7: + time = 116783 + flags = 0 + data = length 173, hash CFE014B3 + sample 8: + time = 133466 + flags = 0 + data = length 3, hash D5C0 + sample 9: + time = 150150 + flags = 0 + data = length 655, hash 3A7738B6 + sample 10: + time = 166833 + flags = 0 + data = length 3, hash D5D0 + sample 11: + time = 183516 + flags = 0 + data = length 208, hash E7D2035A + sample 12: + time = 200200 + flags = 0 + data = length 3, hash D600 + sample 13: + time = 216883 + flags = 0 + data = length 385, hash 4D025B28 + sample 14: + time = 233566 + flags = 0 + data = length 3, hash D5E0 + sample 15: + time = 250250 + flags = 0 + data = length 192, hash CC0BD164 + sample 16: + time = 266933 + flags = 0 + data = length 3, hash D5B0 + sample 17: + time = 283616 + flags = 0 + data = length 36989, hash C213D35E + sample 18: + time = 300300 + flags = 0 + data = length 3, hash D5C0 + sample 19: + time = 316983 + flags = 0 + data = length 213, hash 2BBA39D3 + sample 20: + time = 333666 + flags = 0 + data = length 3, hash D600 + sample 21: + time = 350350 + flags = 0 + data = length 474, hash 83D66E3F + sample 22: + time = 367033 + flags = 0 + data = length 3, hash D5E0 + sample 23: + time = 383716 + flags = 0 + data = length 246, hash CF512AF0 + sample 24: + time = 400400 + flags = 0 + data = length 3, hash D610 + sample 25: + time = 417083 + flags = 0 + data = length 880, hash 8BFDE683 + sample 26: + time = 433766 + flags = 0 + data = length 3, hash D5C0 + sample 27: + time = 450450 + flags = 0 + data = length 246, hash 16B70503 + sample 28: + time = 467133 + flags = 0 + data = length 3, hash D600 + sample 29: + time = 483816 + flags = 0 + data = length 402, hash 51B5FAC9 + sample 30: + time = 500500 + flags = 0 + data = length 3, hash D610 + sample 31: + time = 517183 + flags = 0 + data = length 199, hash 12005069 + sample 32: + time = 533866 + flags = 0 + data = length 3, hash D5D0 + sample 33: + time = 550550 + flags = 0 + data = length 32362, hash F9FE31F7 + sample 34: + time = 567233 + flags = 0 + data = length 3, hash D5E0 + sample 35: + time = 583916 + flags = 0 + data = length 215, hash 2D4E3DC4 + sample 36: + time = 600600 + flags = 0 + data = length 3, hash D600 + sample 37: + time = 617283 + flags = 0 + data = length 450, hash C1A95E3 + sample 38: + time = 633966 + flags = 0 + data = length 3, hash D610 + sample 39: + time = 650650 + flags = 0 + data = length 221, hash 964386D9 + sample 40: + time = 667333 + flags = 0 + data = length 3, hash D5F0 + sample 41: + time = 684016 + flags = 0 + data = length 853, hash 2B9E0AAF + sample 42: + time = 700700 + flags = 0 + data = length 3, hash D5E0 + sample 43: + time = 717383 + flags = 0 + data = length 236, hash 7E84BBAE + sample 44: + time = 734066 + flags = 0 + data = length 3, hash D600 + sample 45: + time = 750750 + flags = 0 + data = length 419, hash 619235F2 + sample 46: + time = 767433 + flags = 0 + data = length 3, hash D5F0 + sample 47: + time = 784116 + flags = 0 + data = length 194, hash D386F352 + sample 48: + time = 800800 + flags = 0 + data = length 3, hash D5A0 + sample 49: + time = 817483 + flags = 0 + data = length 38679, hash 17E63FCD + sample 50: + time = 834166 + flags = 0 + data = length 3, hash D610 + sample 51: + time = 850850 + flags = 0 + data = length 183, hash C8DD98E2 + sample 52: + time = 867533 + flags = 0 + data = length 3, hash D600 + sample 53: + time = 884216 + flags = 0 + data = length 457, hash 2B4E3476 + sample 54: + time = 900900 + flags = 0 + data = length 3, hash D5F0 + sample 55: + time = 917583 + flags = 0 + data = length 216, hash 7233540A + sample 56: + time = 934266 + flags = 0 + data = length 3, hash D5C0 + sample 57: + time = 950950 + flags = 0 + data = length 894, hash 7319F313 + sample 58: + time = 967633 + flags = 0 + data = length 3, hash D610 + sample 59: + time = 984316 + flags = 536870912 + data = length 233, hash DE4DBE67 +track 1: + total output bytes = 16638 + sample count = 44 + format 0: + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 441 + channelCount = 2 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.76.100] + initializationData: + data = length 16, hash CAA21BBF + sample 0: + time = 0 + flags = 1 + data = length 393, hash 706D1B6F + sample 1: + time = 23219 + flags = 1 + data = length 400, hash B48107D1 + sample 2: + time = 46439 + flags = 1 + data = length 398, hash E5F4E9C1 + sample 3: + time = 69659 + flags = 1 + data = length 400, hash 4317B40D + sample 4: + time = 92879 + flags = 1 + data = length 403, hash CB949D88 + sample 5: + time = 116099 + flags = 1 + data = length 411, hash 616C8F82 + sample 6: + time = 139319 + flags = 1 + data = length 392, hash 3BA50F06 + sample 7: + time = 162539 + flags = 1 + data = length 401, hash 1C62F82C + sample 8: + time = 185759 + flags = 1 + data = length 400, hash 180FEA17 + sample 9: + time = 208979 + flags = 1 + data = length 378, hash 2F6B0AE6 + sample 10: + time = 232199 + flags = 1 + data = length 375, hash 6AE86D08 + sample 11: + time = 255419 + flags = 1 + data = length 375, hash EF2FD9CC + sample 12: + time = 278639 + flags = 1 + data = length 374, hash 97B83243 + sample 13: + time = 301859 + flags = 1 + data = length 382, hash 8BD6191C + sample 14: + time = 325079 + flags = 1 + data = length 393, hash D5F53221 + sample 15: + time = 348299 + flags = 1 + data = length 375, hash 2437C16B + sample 16: + time = 371519 + flags = 1 + data = length 372, hash EE50108B + sample 17: + time = 394739 + flags = 1 + data = length 364, hash 9952E0FE + sample 18: + time = 417959 + flags = 1 + data = length 387, hash C4EC0E45 + sample 19: + time = 441179 + flags = 1 + data = length 384, hash 7DFB424F + sample 20: + time = 464399 + flags = 1 + data = length 370, hash 28619E43 + sample 21: + time = 487619 + flags = 1 + data = length 373, hash 440EB9E8 + sample 22: + time = 510839 + flags = 1 + data = length 363, hash B7655913 + sample 23: + time = 534058 + flags = 1 + data = length 362, hash A0690E92 + sample 24: + time = 557278 + flags = 1 + data = length 377, hash 41BF1244 + sample 25: + time = 580498 + flags = 1 + data = length 371, hash EE4124CD + sample 26: + time = 603718 + flags = 1 + data = length 372, hash 7A512168 + sample 27: + time = 626938 + flags = 1 + data = length 370, hash ED00D55C + sample 28: + time = 650158 + flags = 1 + data = length 356, hash 43F4FFCA + sample 29: + time = 673378 + flags = 1 + data = length 373, hash 1950F38C + sample 30: + time = 696598 + flags = 1 + data = length 366, hash 5F426A7A + sample 31: + time = 719818 + flags = 1 + data = length 371, hash FCC286D2 + sample 32: + time = 743038 + flags = 1 + data = length 366, hash CF6F5DD9 + sample 33: + time = 766258 + flags = 1 + data = length 386, hash 83E3B1E6 + sample 34: + time = 789478 + flags = 1 + data = length 369, hash 5BDF670B + sample 35: + time = 812698 + flags = 1 + data = length 367, hash DC847E4D + sample 36: + time = 835918 + flags = 1 + data = length 366, hash 8AC0C55C + sample 37: + time = 859138 + flags = 1 + data = length 375, hash C0D4BF4 + sample 38: + time = 882358 + flags = 1 + data = length 367, hash 6C5284E2 + sample 39: + time = 905578 + flags = 1 + data = length 380, hash BDFAB187 + sample 40: + time = 928798 + flags = 1 + data = length 372, hash CEF87EB6 + sample 41: + time = 952018 + flags = 1 + data = length 369, hash B0FF049B + sample 42: + time = 975238 + flags = 1 + data = length 366, hash BADD46E6 + sample 43: + time = 998458 + flags = 536870913 + data = length 374, hash 6102A531 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.1.dump new file mode 100644 index 0000000000..1e1023afb0 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.1.dump @@ -0,0 +1,398 @@ +seekMap: + isSeekable = true + duration = 1022000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(511000) = [[timeUs=0, position=48]] + getPosition(1022000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 266091 + sample count = 60 + format 0: + id = 1 + sampleMimeType = video/av01 + maxInputSize = 144656 + width = 1920 + height = 1080 + frameRate = 59.940056 + colorInfo: + colorSpace = 6 + colorRange = 2 + colorTransfer = 6 + hdrStaticInfo = length 25, hash 423AFC35 + sample 0: + time = 0 + flags = 1 + data = length 144626, hash 7C021D5F + sample 1: + time = 16683 + flags = 0 + data = length 4018, hash FA5E79FA + sample 2: + time = 33366 + flags = 0 + data = length 3, hash D5E0 + sample 3: + time = 50050 + flags = 0 + data = length 144, hash 4A868A2F + sample 4: + time = 66733 + flags = 0 + data = length 3, hash D5D0 + sample 5: + time = 83416 + flags = 0 + data = length 342, hash 5A2E1C3C + sample 6: + time = 100100 + flags = 0 + data = length 3, hash D610 + sample 7: + time = 116783 + flags = 0 + data = length 173, hash CFE014B3 + sample 8: + time = 133466 + flags = 0 + data = length 3, hash D5C0 + sample 9: + time = 150150 + flags = 0 + data = length 655, hash 3A7738B6 + sample 10: + time = 166833 + flags = 0 + data = length 3, hash D5D0 + sample 11: + time = 183516 + flags = 0 + data = length 208, hash E7D2035A + sample 12: + time = 200200 + flags = 0 + data = length 3, hash D600 + sample 13: + time = 216883 + flags = 0 + data = length 385, hash 4D025B28 + sample 14: + time = 233566 + flags = 0 + data = length 3, hash D5E0 + sample 15: + time = 250250 + flags = 0 + data = length 192, hash CC0BD164 + sample 16: + time = 266933 + flags = 0 + data = length 3, hash D5B0 + sample 17: + time = 283616 + flags = 0 + data = length 36989, hash C213D35E + sample 18: + time = 300300 + flags = 0 + data = length 3, hash D5C0 + sample 19: + time = 316983 + flags = 0 + data = length 213, hash 2BBA39D3 + sample 20: + time = 333666 + flags = 0 + data = length 3, hash D600 + sample 21: + time = 350350 + flags = 0 + data = length 474, hash 83D66E3F + sample 22: + time = 367033 + flags = 0 + data = length 3, hash D5E0 + sample 23: + time = 383716 + flags = 0 + data = length 246, hash CF512AF0 + sample 24: + time = 400400 + flags = 0 + data = length 3, hash D610 + sample 25: + time = 417083 + flags = 0 + data = length 880, hash 8BFDE683 + sample 26: + time = 433766 + flags = 0 + data = length 3, hash D5C0 + sample 27: + time = 450450 + flags = 0 + data = length 246, hash 16B70503 + sample 28: + time = 467133 + flags = 0 + data = length 3, hash D600 + sample 29: + time = 483816 + flags = 0 + data = length 402, hash 51B5FAC9 + sample 30: + time = 500500 + flags = 0 + data = length 3, hash D610 + sample 31: + time = 517183 + flags = 0 + data = length 199, hash 12005069 + sample 32: + time = 533866 + flags = 0 + data = length 3, hash D5D0 + sample 33: + time = 550550 + flags = 0 + data = length 32362, hash F9FE31F7 + sample 34: + time = 567233 + flags = 0 + data = length 3, hash D5E0 + sample 35: + time = 583916 + flags = 0 + data = length 215, hash 2D4E3DC4 + sample 36: + time = 600600 + flags = 0 + data = length 3, hash D600 + sample 37: + time = 617283 + flags = 0 + data = length 450, hash C1A95E3 + sample 38: + time = 633966 + flags = 0 + data = length 3, hash D610 + sample 39: + time = 650650 + flags = 0 + data = length 221, hash 964386D9 + sample 40: + time = 667333 + flags = 0 + data = length 3, hash D5F0 + sample 41: + time = 684016 + flags = 0 + data = length 853, hash 2B9E0AAF + sample 42: + time = 700700 + flags = 0 + data = length 3, hash D5E0 + sample 43: + time = 717383 + flags = 0 + data = length 236, hash 7E84BBAE + sample 44: + time = 734066 + flags = 0 + data = length 3, hash D600 + sample 45: + time = 750750 + flags = 0 + data = length 419, hash 619235F2 + sample 46: + time = 767433 + flags = 0 + data = length 3, hash D5F0 + sample 47: + time = 784116 + flags = 0 + data = length 194, hash D386F352 + sample 48: + time = 800800 + flags = 0 + data = length 3, hash D5A0 + sample 49: + time = 817483 + flags = 0 + data = length 38679, hash 17E63FCD + sample 50: + time = 834166 + flags = 0 + data = length 3, hash D610 + sample 51: + time = 850850 + flags = 0 + data = length 183, hash C8DD98E2 + sample 52: + time = 867533 + flags = 0 + data = length 3, hash D600 + sample 53: + time = 884216 + flags = 0 + data = length 457, hash 2B4E3476 + sample 54: + time = 900900 + flags = 0 + data = length 3, hash D5F0 + sample 55: + time = 917583 + flags = 0 + data = length 216, hash 7233540A + sample 56: + time = 934266 + flags = 0 + data = length 3, hash D5C0 + sample 57: + time = 950950 + flags = 0 + data = length 894, hash 7319F313 + sample 58: + time = 967633 + flags = 0 + data = length 3, hash D610 + sample 59: + time = 984316 + flags = 536870912 + data = length 233, hash DE4DBE67 +track 1: + total output bytes = 11156 + sample count = 30 + format 0: + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 441 + channelCount = 2 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.76.100] + initializationData: + data = length 16, hash CAA21BBF + sample 0: + time = 325079 + flags = 1 + data = length 393, hash D5F53221 + sample 1: + time = 348299 + flags = 1 + data = length 375, hash 2437C16B + sample 2: + time = 371519 + flags = 1 + data = length 372, hash EE50108B + sample 3: + time = 394739 + flags = 1 + data = length 364, hash 9952E0FE + sample 4: + time = 417959 + flags = 1 + data = length 387, hash C4EC0E45 + sample 5: + time = 441179 + flags = 1 + data = length 384, hash 7DFB424F + sample 6: + time = 464399 + flags = 1 + data = length 370, hash 28619E43 + sample 7: + time = 487619 + flags = 1 + data = length 373, hash 440EB9E8 + sample 8: + time = 510839 + flags = 1 + data = length 363, hash B7655913 + sample 9: + time = 534058 + flags = 1 + data = length 362, hash A0690E92 + sample 10: + time = 557278 + flags = 1 + data = length 377, hash 41BF1244 + sample 11: + time = 580498 + flags = 1 + data = length 371, hash EE4124CD + sample 12: + time = 603718 + flags = 1 + data = length 372, hash 7A512168 + sample 13: + time = 626938 + flags = 1 + data = length 370, hash ED00D55C + sample 14: + time = 650158 + flags = 1 + data = length 356, hash 43F4FFCA + sample 15: + time = 673378 + flags = 1 + data = length 373, hash 1950F38C + sample 16: + time = 696598 + flags = 1 + data = length 366, hash 5F426A7A + sample 17: + time = 719818 + flags = 1 + data = length 371, hash FCC286D2 + sample 18: + time = 743038 + flags = 1 + data = length 366, hash CF6F5DD9 + sample 19: + time = 766258 + flags = 1 + data = length 386, hash 83E3B1E6 + sample 20: + time = 789478 + flags = 1 + data = length 369, hash 5BDF670B + sample 21: + time = 812698 + flags = 1 + data = length 367, hash DC847E4D + sample 22: + time = 835918 + flags = 1 + data = length 366, hash 8AC0C55C + sample 23: + time = 859138 + flags = 1 + data = length 375, hash C0D4BF4 + sample 24: + time = 882358 + flags = 1 + data = length 367, hash 6C5284E2 + sample 25: + time = 905578 + flags = 1 + data = length 380, hash BDFAB187 + sample 26: + time = 928798 + flags = 1 + data = length 372, hash CEF87EB6 + sample 27: + time = 952018 + flags = 1 + data = length 369, hash B0FF049B + sample 28: + time = 975238 + flags = 1 + data = length 366, hash BADD46E6 + sample 29: + time = 998458 + flags = 536870913 + data = length 374, hash 6102A531 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.2.dump new file mode 100644 index 0000000000..5b51396c83 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.2.dump @@ -0,0 +1,338 @@ +seekMap: + isSeekable = true + duration = 1022000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(511000) = [[timeUs=0, position=48]] + getPosition(1022000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 266091 + sample count = 60 + format 0: + id = 1 + sampleMimeType = video/av01 + maxInputSize = 144656 + width = 1920 + height = 1080 + frameRate = 59.940056 + colorInfo: + colorSpace = 6 + colorRange = 2 + colorTransfer = 6 + hdrStaticInfo = length 25, hash 423AFC35 + sample 0: + time = 0 + flags = 1 + data = length 144626, hash 7C021D5F + sample 1: + time = 16683 + flags = 0 + data = length 4018, hash FA5E79FA + sample 2: + time = 33366 + flags = 0 + data = length 3, hash D5E0 + sample 3: + time = 50050 + flags = 0 + data = length 144, hash 4A868A2F + sample 4: + time = 66733 + flags = 0 + data = length 3, hash D5D0 + sample 5: + time = 83416 + flags = 0 + data = length 342, hash 5A2E1C3C + sample 6: + time = 100100 + flags = 0 + data = length 3, hash D610 + sample 7: + time = 116783 + flags = 0 + data = length 173, hash CFE014B3 + sample 8: + time = 133466 + flags = 0 + data = length 3, hash D5C0 + sample 9: + time = 150150 + flags = 0 + data = length 655, hash 3A7738B6 + sample 10: + time = 166833 + flags = 0 + data = length 3, hash D5D0 + sample 11: + time = 183516 + flags = 0 + data = length 208, hash E7D2035A + sample 12: + time = 200200 + flags = 0 + data = length 3, hash D600 + sample 13: + time = 216883 + flags = 0 + data = length 385, hash 4D025B28 + sample 14: + time = 233566 + flags = 0 + data = length 3, hash D5E0 + sample 15: + time = 250250 + flags = 0 + data = length 192, hash CC0BD164 + sample 16: + time = 266933 + flags = 0 + data = length 3, hash D5B0 + sample 17: + time = 283616 + flags = 0 + data = length 36989, hash C213D35E + sample 18: + time = 300300 + flags = 0 + data = length 3, hash D5C0 + sample 19: + time = 316983 + flags = 0 + data = length 213, hash 2BBA39D3 + sample 20: + time = 333666 + flags = 0 + data = length 3, hash D600 + sample 21: + time = 350350 + flags = 0 + data = length 474, hash 83D66E3F + sample 22: + time = 367033 + flags = 0 + data = length 3, hash D5E0 + sample 23: + time = 383716 + flags = 0 + data = length 246, hash CF512AF0 + sample 24: + time = 400400 + flags = 0 + data = length 3, hash D610 + sample 25: + time = 417083 + flags = 0 + data = length 880, hash 8BFDE683 + sample 26: + time = 433766 + flags = 0 + data = length 3, hash D5C0 + sample 27: + time = 450450 + flags = 0 + data = length 246, hash 16B70503 + sample 28: + time = 467133 + flags = 0 + data = length 3, hash D600 + sample 29: + time = 483816 + flags = 0 + data = length 402, hash 51B5FAC9 + sample 30: + time = 500500 + flags = 0 + data = length 3, hash D610 + sample 31: + time = 517183 + flags = 0 + data = length 199, hash 12005069 + sample 32: + time = 533866 + flags = 0 + data = length 3, hash D5D0 + sample 33: + time = 550550 + flags = 0 + data = length 32362, hash F9FE31F7 + sample 34: + time = 567233 + flags = 0 + data = length 3, hash D5E0 + sample 35: + time = 583916 + flags = 0 + data = length 215, hash 2D4E3DC4 + sample 36: + time = 600600 + flags = 0 + data = length 3, hash D600 + sample 37: + time = 617283 + flags = 0 + data = length 450, hash C1A95E3 + sample 38: + time = 633966 + flags = 0 + data = length 3, hash D610 + sample 39: + time = 650650 + flags = 0 + data = length 221, hash 964386D9 + sample 40: + time = 667333 + flags = 0 + data = length 3, hash D5F0 + sample 41: + time = 684016 + flags = 0 + data = length 853, hash 2B9E0AAF + sample 42: + time = 700700 + flags = 0 + data = length 3, hash D5E0 + sample 43: + time = 717383 + flags = 0 + data = length 236, hash 7E84BBAE + sample 44: + time = 734066 + flags = 0 + data = length 3, hash D600 + sample 45: + time = 750750 + flags = 0 + data = length 419, hash 619235F2 + sample 46: + time = 767433 + flags = 0 + data = length 3, hash D5F0 + sample 47: + time = 784116 + flags = 0 + data = length 194, hash D386F352 + sample 48: + time = 800800 + flags = 0 + data = length 3, hash D5A0 + sample 49: + time = 817483 + flags = 0 + data = length 38679, hash 17E63FCD + sample 50: + time = 834166 + flags = 0 + data = length 3, hash D610 + sample 51: + time = 850850 + flags = 0 + data = length 183, hash C8DD98E2 + sample 52: + time = 867533 + flags = 0 + data = length 3, hash D600 + sample 53: + time = 884216 + flags = 0 + data = length 457, hash 2B4E3476 + sample 54: + time = 900900 + flags = 0 + data = length 3, hash D5F0 + sample 55: + time = 917583 + flags = 0 + data = length 216, hash 7233540A + sample 56: + time = 934266 + flags = 0 + data = length 3, hash D5C0 + sample 57: + time = 950950 + flags = 0 + data = length 894, hash 7319F313 + sample 58: + time = 967633 + flags = 0 + data = length 3, hash D610 + sample 59: + time = 984316 + flags = 536870912 + data = length 233, hash DE4DBE67 +track 1: + total output bytes = 5567 + sample count = 15 + format 0: + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 441 + channelCount = 2 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.76.100] + initializationData: + data = length 16, hash CAA21BBF + sample 0: + time = 673378 + flags = 1 + data = length 373, hash 1950F38C + sample 1: + time = 696598 + flags = 1 + data = length 366, hash 5F426A7A + sample 2: + time = 719818 + flags = 1 + data = length 371, hash FCC286D2 + sample 3: + time = 743038 + flags = 1 + data = length 366, hash CF6F5DD9 + sample 4: + time = 766258 + flags = 1 + data = length 386, hash 83E3B1E6 + sample 5: + time = 789478 + flags = 1 + data = length 369, hash 5BDF670B + sample 6: + time = 812698 + flags = 1 + data = length 367, hash DC847E4D + sample 7: + time = 835918 + flags = 1 + data = length 366, hash 8AC0C55C + sample 8: + time = 859138 + flags = 1 + data = length 375, hash C0D4BF4 + sample 9: + time = 882358 + flags = 1 + data = length 367, hash 6C5284E2 + sample 10: + time = 905578 + flags = 1 + data = length 380, hash BDFAB187 + sample 11: + time = 928798 + flags = 1 + data = length 372, hash CEF87EB6 + sample 12: + time = 952018 + flags = 1 + data = length 369, hash B0FF049B + sample 13: + time = 975238 + flags = 1 + data = length 366, hash BADD46E6 + sample 14: + time = 998458 + flags = 536870913 + data = length 374, hash 6102A531 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.3.dump new file mode 100644 index 0000000000..d66f9234a1 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.3.dump @@ -0,0 +1,282 @@ +seekMap: + isSeekable = true + duration = 1022000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(511000) = [[timeUs=0, position=48]] + getPosition(1022000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 266091 + sample count = 60 + format 0: + id = 1 + sampleMimeType = video/av01 + maxInputSize = 144656 + width = 1920 + height = 1080 + frameRate = 59.940056 + colorInfo: + colorSpace = 6 + colorRange = 2 + colorTransfer = 6 + hdrStaticInfo = length 25, hash 423AFC35 + sample 0: + time = 0 + flags = 1 + data = length 144626, hash 7C021D5F + sample 1: + time = 16683 + flags = 0 + data = length 4018, hash FA5E79FA + sample 2: + time = 33366 + flags = 0 + data = length 3, hash D5E0 + sample 3: + time = 50050 + flags = 0 + data = length 144, hash 4A868A2F + sample 4: + time = 66733 + flags = 0 + data = length 3, hash D5D0 + sample 5: + time = 83416 + flags = 0 + data = length 342, hash 5A2E1C3C + sample 6: + time = 100100 + flags = 0 + data = length 3, hash D610 + sample 7: + time = 116783 + flags = 0 + data = length 173, hash CFE014B3 + sample 8: + time = 133466 + flags = 0 + data = length 3, hash D5C0 + sample 9: + time = 150150 + flags = 0 + data = length 655, hash 3A7738B6 + sample 10: + time = 166833 + flags = 0 + data = length 3, hash D5D0 + sample 11: + time = 183516 + flags = 0 + data = length 208, hash E7D2035A + sample 12: + time = 200200 + flags = 0 + data = length 3, hash D600 + sample 13: + time = 216883 + flags = 0 + data = length 385, hash 4D025B28 + sample 14: + time = 233566 + flags = 0 + data = length 3, hash D5E0 + sample 15: + time = 250250 + flags = 0 + data = length 192, hash CC0BD164 + sample 16: + time = 266933 + flags = 0 + data = length 3, hash D5B0 + sample 17: + time = 283616 + flags = 0 + data = length 36989, hash C213D35E + sample 18: + time = 300300 + flags = 0 + data = length 3, hash D5C0 + sample 19: + time = 316983 + flags = 0 + data = length 213, hash 2BBA39D3 + sample 20: + time = 333666 + flags = 0 + data = length 3, hash D600 + sample 21: + time = 350350 + flags = 0 + data = length 474, hash 83D66E3F + sample 22: + time = 367033 + flags = 0 + data = length 3, hash D5E0 + sample 23: + time = 383716 + flags = 0 + data = length 246, hash CF512AF0 + sample 24: + time = 400400 + flags = 0 + data = length 3, hash D610 + sample 25: + time = 417083 + flags = 0 + data = length 880, hash 8BFDE683 + sample 26: + time = 433766 + flags = 0 + data = length 3, hash D5C0 + sample 27: + time = 450450 + flags = 0 + data = length 246, hash 16B70503 + sample 28: + time = 467133 + flags = 0 + data = length 3, hash D600 + sample 29: + time = 483816 + flags = 0 + data = length 402, hash 51B5FAC9 + sample 30: + time = 500500 + flags = 0 + data = length 3, hash D610 + sample 31: + time = 517183 + flags = 0 + data = length 199, hash 12005069 + sample 32: + time = 533866 + flags = 0 + data = length 3, hash D5D0 + sample 33: + time = 550550 + flags = 0 + data = length 32362, hash F9FE31F7 + sample 34: + time = 567233 + flags = 0 + data = length 3, hash D5E0 + sample 35: + time = 583916 + flags = 0 + data = length 215, hash 2D4E3DC4 + sample 36: + time = 600600 + flags = 0 + data = length 3, hash D600 + sample 37: + time = 617283 + flags = 0 + data = length 450, hash C1A95E3 + sample 38: + time = 633966 + flags = 0 + data = length 3, hash D610 + sample 39: + time = 650650 + flags = 0 + data = length 221, hash 964386D9 + sample 40: + time = 667333 + flags = 0 + data = length 3, hash D5F0 + sample 41: + time = 684016 + flags = 0 + data = length 853, hash 2B9E0AAF + sample 42: + time = 700700 + flags = 0 + data = length 3, hash D5E0 + sample 43: + time = 717383 + flags = 0 + data = length 236, hash 7E84BBAE + sample 44: + time = 734066 + flags = 0 + data = length 3, hash D600 + sample 45: + time = 750750 + flags = 0 + data = length 419, hash 619235F2 + sample 46: + time = 767433 + flags = 0 + data = length 3, hash D5F0 + sample 47: + time = 784116 + flags = 0 + data = length 194, hash D386F352 + sample 48: + time = 800800 + flags = 0 + data = length 3, hash D5A0 + sample 49: + time = 817483 + flags = 0 + data = length 38679, hash 17E63FCD + sample 50: + time = 834166 + flags = 0 + data = length 3, hash D610 + sample 51: + time = 850850 + flags = 0 + data = length 183, hash C8DD98E2 + sample 52: + time = 867533 + flags = 0 + data = length 3, hash D600 + sample 53: + time = 884216 + flags = 0 + data = length 457, hash 2B4E3476 + sample 54: + time = 900900 + flags = 0 + data = length 3, hash D5F0 + sample 55: + time = 917583 + flags = 0 + data = length 216, hash 7233540A + sample 56: + time = 934266 + flags = 0 + data = length 3, hash D5C0 + sample 57: + time = 950950 + flags = 0 + data = length 894, hash 7319F313 + sample 58: + time = 967633 + flags = 0 + data = length 3, hash D610 + sample 59: + time = 984316 + flags = 536870912 + data = length 233, hash DE4DBE67 +track 1: + total output bytes = 374 + sample count = 1 + format 0: + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 441 + channelCount = 2 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.76.100] + initializationData: + data = length 16, hash CAA21BBF + sample 0: + time = 998458 + flags = 536870913 + data = length 374, hash 6102A531 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.unknown_length.dump new file mode 100644 index 0000000000..8ef4f19b16 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_colr_mdcv_and_clli.mp4.unknown_length.dump @@ -0,0 +1,454 @@ +seekMap: + isSeekable = true + duration = 1022000 + getPosition(0) = [[timeUs=0, position=48]] + getPosition(1) = [[timeUs=0, position=48]] + getPosition(511000) = [[timeUs=0, position=48]] + getPosition(1022000) = [[timeUs=0, position=48]] +numberOfTracks = 2 +track 0: + total output bytes = 266091 + sample count = 60 + format 0: + id = 1 + sampleMimeType = video/av01 + maxInputSize = 144656 + width = 1920 + height = 1080 + frameRate = 59.940056 + colorInfo: + colorSpace = 6 + colorRange = 2 + colorTransfer = 6 + hdrStaticInfo = length 25, hash 423AFC35 + sample 0: + time = 0 + flags = 1 + data = length 144626, hash 7C021D5F + sample 1: + time = 16683 + flags = 0 + data = length 4018, hash FA5E79FA + sample 2: + time = 33366 + flags = 0 + data = length 3, hash D5E0 + sample 3: + time = 50050 + flags = 0 + data = length 144, hash 4A868A2F + sample 4: + time = 66733 + flags = 0 + data = length 3, hash D5D0 + sample 5: + time = 83416 + flags = 0 + data = length 342, hash 5A2E1C3C + sample 6: + time = 100100 + flags = 0 + data = length 3, hash D610 + sample 7: + time = 116783 + flags = 0 + data = length 173, hash CFE014B3 + sample 8: + time = 133466 + flags = 0 + data = length 3, hash D5C0 + sample 9: + time = 150150 + flags = 0 + data = length 655, hash 3A7738B6 + sample 10: + time = 166833 + flags = 0 + data = length 3, hash D5D0 + sample 11: + time = 183516 + flags = 0 + data = length 208, hash E7D2035A + sample 12: + time = 200200 + flags = 0 + data = length 3, hash D600 + sample 13: + time = 216883 + flags = 0 + data = length 385, hash 4D025B28 + sample 14: + time = 233566 + flags = 0 + data = length 3, hash D5E0 + sample 15: + time = 250250 + flags = 0 + data = length 192, hash CC0BD164 + sample 16: + time = 266933 + flags = 0 + data = length 3, hash D5B0 + sample 17: + time = 283616 + flags = 0 + data = length 36989, hash C213D35E + sample 18: + time = 300300 + flags = 0 + data = length 3, hash D5C0 + sample 19: + time = 316983 + flags = 0 + data = length 213, hash 2BBA39D3 + sample 20: + time = 333666 + flags = 0 + data = length 3, hash D600 + sample 21: + time = 350350 + flags = 0 + data = length 474, hash 83D66E3F + sample 22: + time = 367033 + flags = 0 + data = length 3, hash D5E0 + sample 23: + time = 383716 + flags = 0 + data = length 246, hash CF512AF0 + sample 24: + time = 400400 + flags = 0 + data = length 3, hash D610 + sample 25: + time = 417083 + flags = 0 + data = length 880, hash 8BFDE683 + sample 26: + time = 433766 + flags = 0 + data = length 3, hash D5C0 + sample 27: + time = 450450 + flags = 0 + data = length 246, hash 16B70503 + sample 28: + time = 467133 + flags = 0 + data = length 3, hash D600 + sample 29: + time = 483816 + flags = 0 + data = length 402, hash 51B5FAC9 + sample 30: + time = 500500 + flags = 0 + data = length 3, hash D610 + sample 31: + time = 517183 + flags = 0 + data = length 199, hash 12005069 + sample 32: + time = 533866 + flags = 0 + data = length 3, hash D5D0 + sample 33: + time = 550550 + flags = 0 + data = length 32362, hash F9FE31F7 + sample 34: + time = 567233 + flags = 0 + data = length 3, hash D5E0 + sample 35: + time = 583916 + flags = 0 + data = length 215, hash 2D4E3DC4 + sample 36: + time = 600600 + flags = 0 + data = length 3, hash D600 + sample 37: + time = 617283 + flags = 0 + data = length 450, hash C1A95E3 + sample 38: + time = 633966 + flags = 0 + data = length 3, hash D610 + sample 39: + time = 650650 + flags = 0 + data = length 221, hash 964386D9 + sample 40: + time = 667333 + flags = 0 + data = length 3, hash D5F0 + sample 41: + time = 684016 + flags = 0 + data = length 853, hash 2B9E0AAF + sample 42: + time = 700700 + flags = 0 + data = length 3, hash D5E0 + sample 43: + time = 717383 + flags = 0 + data = length 236, hash 7E84BBAE + sample 44: + time = 734066 + flags = 0 + data = length 3, hash D600 + sample 45: + time = 750750 + flags = 0 + data = length 419, hash 619235F2 + sample 46: + time = 767433 + flags = 0 + data = length 3, hash D5F0 + sample 47: + time = 784116 + flags = 0 + data = length 194, hash D386F352 + sample 48: + time = 800800 + flags = 0 + data = length 3, hash D5A0 + sample 49: + time = 817483 + flags = 0 + data = length 38679, hash 17E63FCD + sample 50: + time = 834166 + flags = 0 + data = length 3, hash D610 + sample 51: + time = 850850 + flags = 0 + data = length 183, hash C8DD98E2 + sample 52: + time = 867533 + flags = 0 + data = length 3, hash D600 + sample 53: + time = 884216 + flags = 0 + data = length 457, hash 2B4E3476 + sample 54: + time = 900900 + flags = 0 + data = length 3, hash D5F0 + sample 55: + time = 917583 + flags = 0 + data = length 216, hash 7233540A + sample 56: + time = 934266 + flags = 0 + data = length 3, hash D5C0 + sample 57: + time = 950950 + flags = 0 + data = length 894, hash 7319F313 + sample 58: + time = 967633 + flags = 0 + data = length 3, hash D610 + sample 59: + time = 984316 + flags = 536870912 + data = length 233, hash DE4DBE67 +track 1: + total output bytes = 16638 + sample count = 44 + format 0: + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 441 + channelCount = 2 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.76.100] + initializationData: + data = length 16, hash CAA21BBF + sample 0: + time = 0 + flags = 1 + data = length 393, hash 706D1B6F + sample 1: + time = 23219 + flags = 1 + data = length 400, hash B48107D1 + sample 2: + time = 46439 + flags = 1 + data = length 398, hash E5F4E9C1 + sample 3: + time = 69659 + flags = 1 + data = length 400, hash 4317B40D + sample 4: + time = 92879 + flags = 1 + data = length 403, hash CB949D88 + sample 5: + time = 116099 + flags = 1 + data = length 411, hash 616C8F82 + sample 6: + time = 139319 + flags = 1 + data = length 392, hash 3BA50F06 + sample 7: + time = 162539 + flags = 1 + data = length 401, hash 1C62F82C + sample 8: + time = 185759 + flags = 1 + data = length 400, hash 180FEA17 + sample 9: + time = 208979 + flags = 1 + data = length 378, hash 2F6B0AE6 + sample 10: + time = 232199 + flags = 1 + data = length 375, hash 6AE86D08 + sample 11: + time = 255419 + flags = 1 + data = length 375, hash EF2FD9CC + sample 12: + time = 278639 + flags = 1 + data = length 374, hash 97B83243 + sample 13: + time = 301859 + flags = 1 + data = length 382, hash 8BD6191C + sample 14: + time = 325079 + flags = 1 + data = length 393, hash D5F53221 + sample 15: + time = 348299 + flags = 1 + data = length 375, hash 2437C16B + sample 16: + time = 371519 + flags = 1 + data = length 372, hash EE50108B + sample 17: + time = 394739 + flags = 1 + data = length 364, hash 9952E0FE + sample 18: + time = 417959 + flags = 1 + data = length 387, hash C4EC0E45 + sample 19: + time = 441179 + flags = 1 + data = length 384, hash 7DFB424F + sample 20: + time = 464399 + flags = 1 + data = length 370, hash 28619E43 + sample 21: + time = 487619 + flags = 1 + data = length 373, hash 440EB9E8 + sample 22: + time = 510839 + flags = 1 + data = length 363, hash B7655913 + sample 23: + time = 534058 + flags = 1 + data = length 362, hash A0690E92 + sample 24: + time = 557278 + flags = 1 + data = length 377, hash 41BF1244 + sample 25: + time = 580498 + flags = 1 + data = length 371, hash EE4124CD + sample 26: + time = 603718 + flags = 1 + data = length 372, hash 7A512168 + sample 27: + time = 626938 + flags = 1 + data = length 370, hash ED00D55C + sample 28: + time = 650158 + flags = 1 + data = length 356, hash 43F4FFCA + sample 29: + time = 673378 + flags = 1 + data = length 373, hash 1950F38C + sample 30: + time = 696598 + flags = 1 + data = length 366, hash 5F426A7A + sample 31: + time = 719818 + flags = 1 + data = length 371, hash FCC286D2 + sample 32: + time = 743038 + flags = 1 + data = length 366, hash CF6F5DD9 + sample 33: + time = 766258 + flags = 1 + data = length 386, hash 83E3B1E6 + sample 34: + time = 789478 + flags = 1 + data = length 369, hash 5BDF670B + sample 35: + time = 812698 + flags = 1 + data = length 367, hash DC847E4D + sample 36: + time = 835918 + flags = 1 + data = length 366, hash 8AC0C55C + sample 37: + time = 859138 + flags = 1 + data = length 375, hash C0D4BF4 + sample 38: + time = 882358 + flags = 1 + data = length 367, hash 6C5284E2 + sample 39: + time = 905578 + flags = 1 + data = length 380, hash BDFAB187 + sample 40: + time = 928798 + flags = 1 + data = length 372, hash CEF87EB6 + sample 41: + time = 952018 + flags = 1 + data = length 369, hash B0FF049B + sample 42: + time = 975238 + flags = 1 + data = length 366, hash BADD46E6 + sample 43: + time = 998458 + flags = 536870913 + data = length 374, hash 6102A531 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/mp4/sample_with_colr_mdcv_and_clli.mp4 b/libraries/test_data/src/test/assets/media/mp4/sample_with_colr_mdcv_and_clli.mp4 new file mode 100644 index 0000000000..608d6ec440 Binary files /dev/null and b/libraries/test_data/src/test/assets/media/mp4/sample_with_colr_mdcv_and_clli.mp4 differ