From 640b64ee58d9997cd3e019b9670c2cdee7316158 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 30 Aug 2026 11:58:39 +1000 Subject: [PATCH] Add HEVC Range Extensions presentation matrix --- .../Formats/Heif/HeifDecoderTests.cs | 215 ++++++++++++++++++ ...NGLE_A_RExt_Mitsubishi_2_frame0-ffmpeg.png | 3 + ...PRED_ANGLE_A_RExt_Mitsubishi_2_frame0.heic | 3 + .../Bitdepth_A_RExt_Sony_1_frame0.heic | 3 + .../Bitdepth_B_RExt_Sony_1_frame0.heic | 3 + .../CCP_10bit_RExt_QCOM_frame0-ffmpeg.png | 3 + .../CCP_10bit_RExt_QCOM_frame0.heic | 3 + .../CCP_12bit_RExt_QCOM_frame0-ffmpeg.png | 3 + .../CCP_12bit_RExt_QCOM_frame0.heic | 3 + .../CCP_8bit_RExt_QCOM_frame0-ffmpeg.png | 3 + .../CCP_8bit_RExt_QCOM_frame0.heic | 3 + ...A_10BIT_RExt_Sony_1_extended-hm-ffmpeg.png | 3 + ...4_16_INTRA_10BIT_RExt_Sony_1_extended.heic | 3 + ...A_12BIT_RExt_Sony_1_extended-hm-ffmpeg.png | 3 + ...4_16_INTRA_12BIT_RExt_Sony_1_extended.heic | 3 + ...RA_8BIT_RExt_Sony_1_extended-hm-ffmpeg.png | 3 + ...44_16_INTRA_8BIT_RExt_Sony_1_extended.heic | 3 + ...NTRA_10BIT_RExt_Sony_1_extended-ffmpeg.png | 3 + ...4_16_INTRA_10BIT_RExt_Sony_1_extended.heic | 3 + ..._444_16_INTRA_12BIT_RExt_Sony_1-ffmpeg.png | 3 + ...C_MAIN_444_16_INTRA_12BIT_RExt_Sony_1.heic | 3 + ...INTRA_8BIT_RExt_Sony_1_extended-ffmpeg.png | 3 + ...44_16_INTRA_8BIT_RExt_Sony_1_extended.heic | 3 + .../GENERAL_10b_420_RExt_Sony_1-ffmpeg.png | 3 + .../GENERAL_10b_420_RExt_Sony_1.heic | 3 + .../GENERAL_10b_422_RExt_Sony_1-ffmpeg.png | 3 + .../GENERAL_10b_422_RExt_Sony_1.heic | 3 + .../GENERAL_10b_444_RExt_Sony_2-ffmpeg.png | 3 + .../GENERAL_10b_444_RExt_Sony_2.heic | 3 + .../GENERAL_12b_400_RExt_Sony_1-hm-ffmpeg.png | 3 + .../GENERAL_12b_400_RExt_Sony_1.heic | 3 + .../GENERAL_12b_420_RExt_Sony_1-ffmpeg.png | 3 + .../GENERAL_12b_420_RExt_Sony_1.heic | 3 + .../GENERAL_12b_422_RExt_Sony_1-ffmpeg.png | 3 + .../GENERAL_12b_422_RExt_Sony_1.heic | 3 + .../GENERAL_12b_444_RExt_Sony_2-ffmpeg.png | 3 + .../GENERAL_12b_444_RExt_Sony_2.heic | 3 + .../GENERAL_8b_400_RExt_Sony_1-hm-ffmpeg.png | 3 + .../GENERAL_8b_400_RExt_Sony_1.heic | 3 + .../GENERAL_8b_420_RExt_Sony_1-ffmpeg.png | 3 + .../GENERAL_8b_420_RExt_Sony_1.heic | 3 + .../GENERAL_8b_444_RExt_Sony_2-ffmpeg.png | 3 + .../GENERAL_8b_444_RExt_Sony_2.heic | 3 + .../IPCM_A_RExt_NEC_2_frame0-ffmpeg.png | 3 + .../Conformance/IPCM_A_RExt_NEC_2_frame0.heic | 3 + .../IPCM_B_RExt_NEC_frame0-ffmpeg.png | 3 + .../Conformance/IPCM_B_RExt_NEC_frame0.heic | 3 + ...ain_422_10_A_RExt_Sony_2_frame0-ffmpeg.png | 3 + .../Main_422_10_A_RExt_Sony_2_frame0.heic | 3 + ...ain_422_10_B_RExt_Sony_2_frame0-ffmpeg.png | 3 + .../Main_422_10_B_RExt_Sony_2_frame0.heic | 3 + ...IST_RPARAM_A_RExt_Sony_3_frame0-ffmpeg.png | 3 + .../PERSIST_RPARAM_A_RExt_Sony_3_frame0.heic | 3 + .../Hevc/Conformance/PRESENTATION_SHA256.md | 74 ++++++ .../Input/Heif/Hevc/Conformance/README.md | 21 ++ ...CTX_10bit_I_RExt_SHARP_1_frame0-ffmpeg.png | 3 + .../TSCTX_10bit_I_RExt_SHARP_1_frame0.heic | 3 + ...CTX_12bit_I_RExt_SHARP_1_frame0-ffmpeg.png | 3 + .../TSCTX_12bit_I_RExt_SHARP_1_frame0.heic | 3 + ...SCTX_8bit_I_RExt_SHARP_1_frame0-ffmpeg.png | 3 + .../TSCTX_8bit_I_RExt_SHARP_1_frame0.heic | 3 + ...44_10BIT_RExt_Apple_2_frame0-hm-ffmpeg.png | 3 + ...HIGH_TP_444_10BIT_RExt_Apple_2_frame0.heic | 3 + ...44_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png | 3 + ...HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic | 3 + ...44_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png | 3 + ...HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic | 3 + ...444_8BIT_RExt_Apple_2_frame0-hm-ffmpeg.png | 3 + ..._HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic | 3 + ...TP_444_8BIT_RExt_Apple_2_frame0-ffmpeg.png | 3 + ..._HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic | 3 + 71 files changed, 514 insertions(+) create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/Bitdepth_A_RExt_Sony_1_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/Bitdepth_B_RExt_Sony_1_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/CCP_10bit_RExt_QCOM_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/CCP_10bit_RExt_QCOM_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/CCP_12bit_RExt_QCOM_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/CCP_12bit_RExt_QCOM_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/CCP_8bit_RExt_QCOM_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/CCP_8bit_RExt_QCOM_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended-hm-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended-hm-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended-hm-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_420_RExt_Sony_1-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_420_RExt_Sony_1.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_422_RExt_Sony_1-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_422_RExt_Sony_1.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_444_RExt_Sony_2-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_444_RExt_Sony_2.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_400_RExt_Sony_1-hm-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_400_RExt_Sony_1.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_420_RExt_Sony_1-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_420_RExt_Sony_1.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_422_RExt_Sony_1-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_422_RExt_Sony_1.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_444_RExt_Sony_2-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_444_RExt_Sony_2.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_400_RExt_Sony_1-hm-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_400_RExt_Sony_1.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_420_RExt_Sony_1-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_420_RExt_Sony_1.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_444_RExt_Sony_2-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_444_RExt_Sony_2.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/IPCM_A_RExt_NEC_2_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/IPCM_A_RExt_NEC_2_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/IPCM_B_RExt_NEC_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/IPCM_B_RExt_NEC_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_A_RExt_Sony_2_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_A_RExt_Sony_2_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_B_RExt_Sony_2_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_B_RExt_Sony_2_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/PERSIST_RPARAM_A_RExt_Sony_3_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/PERSIST_RPARAM_A_RExt_Sony_3_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/PRESENTATION_SHA256.md create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/TSCTX_10bit_I_RExt_SHARP_1_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/TSCTX_10bit_I_RExt_SHARP_1_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/TSCTX_12bit_I_RExt_SHARP_1_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/TSCTX_12bit_I_RExt_SHARP_1_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/TSCTX_8bit_I_RExt_SHARP_1_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/TSCTX_8bit_I_RExt_SHARP_1_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0-hm-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-hm-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-ffmpeg.png create mode 100644 tests/Images/Input/Heif/Hevc/Conformance/WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic diff --git a/tests/ImageSharp.Tests/Formats/Heif/HeifDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Heif/HeifDecoderTests.cs index a8e1528bf..eb1ecaa6e 100644 --- a/tests/ImageSharp.Tests/Formats/Heif/HeifDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Heif/HeifDecoderTests.cs @@ -10,6 +10,8 @@ using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Tests.ColorProfiles.Icc; +using SixLabors.ImageSharp.Tests.Memory; +using SixLabors.ImageSharp.Tests.TestUtilities; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; namespace SixLabors.ImageSharp.Tests.Formats.Heif; @@ -20,6 +22,9 @@ public class HeifDecoderTests { private const uint UnknownBoxType = 0x74657374U; + private const HwIntrinsics HevcPresentationConfigurations = + HwIntrinsics.AllowAll | HwIntrinsics.DisableAVX512F | HwIntrinsics.DisableAVX | HwIntrinsics.DisableHWIntrinsic; + private static ReadOnlySpan MalformedJpegApp13 => [ 0xFF, 0xED, @@ -92,6 +97,216 @@ public class HeifDecoderTests Assert.Equal(hasIccProfile, image.Metadata.IccProfile is not null); } + /// + /// Verifies genuine HEIC presentation for the official HEVC profile and Range Extensions matrix against + /// independently decoded FFmpeg output. + /// + /// The retained official elementary-stream path used to derive the HEIC and reference paths. + /// The independently reported presented width. + /// The independently reported presented height. + /// The maximum coded component precision. + [Theory] + [InlineData(TestImages.Heif.General8Bit420, 400, 384, HeifBitDepth.Bit8)] + [InlineData(TestImages.Heif.General8Bit444, 400, 384, HeifBitDepth.Bit8)] + [InlineData(TestImages.Heif.General10Bit420, 400, 384, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.General10Bit422, 400, 384, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.General10Bit444, 400, 384, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.General12Bit420, 400, 384, HeifBitDepth.Bit12)] + [InlineData(TestImages.Heif.General12Bit422, 400, 384, HeifBitDepth.Bit12)] + [InlineData(TestImages.Heif.General12Bit444, 400, 384, HeifBitDepth.Bit12)] + [InlineData(TestImages.Heif.RangeExtensionChromaAngle422, 1920, 1080, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.RangeExtensionCrossComponent8Bit444, 1280, 720, HeifBitDepth.Bit8)] + [InlineData(TestImages.Heif.RangeExtensionCrossComponent10Bit444, 1920, 1080, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.RangeExtensionCrossComponent12Bit444, 2560, 1600, HeifBitDepth.Bit12)] + [InlineData(TestImages.Heif.ExtendedPrecision8Bit444, 400, 384, HeifBitDepth.Bit8)] + [InlineData(TestImages.Heif.ExtendedPrecision10Bit444, 400, 384, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.ExtendedPrecision12Bit444, 400, 384, HeifBitDepth.Bit12)] + [InlineData(TestImages.Heif.RangeExtensionPcm10Bit422, 416, 240, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.RangeExtensionPcm12Bit444, 416, 240, HeifBitDepth.Bit12)] + [InlineData(TestImages.Heif.PersistentRice12Bit444, 400, 384, HeifBitDepth.Bit12)] + [InlineData(TestImages.Heif.TransformSkipContext8Bit444, 1920, 1080, HeifBitDepth.Bit8)] + [InlineData(TestImages.Heif.TransformSkipContext10Bit444, 1920, 1080, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.TransformSkipContext12Bit444, 2560, 1600, HeifBitDepth.Bit12)] + [InlineData(TestImages.Heif.Main42210A, 1920, 1080, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.Main42210B, 2560, 1600, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.HighThroughput8Bit420Wavefront, 1024, 768, HeifBitDepth.Bit8)] + public void DecodeHevcRangeExtensionStillImageMatchesFfmpeg( + string bitstreamPath, + int width, + int height, + HeifBitDepth bitDepth) + { + string heicPath = $"{bitstreamPath[..^4]}.heic"; + string referencePath = $"{bitstreamPath[..^4]}-ffmpeg.png"; + using Image expected = TestFile.Create(referencePath).CreateRgba32Image(); + using Image actual = TestFile.Create(heicPath).CreateRgba32Image(); + HeifMetadata metadata = actual.Metadata.GetHeifMetadata(); + + // HEVC leaves the chroma upsampling filter implementation-defined. The per-pixel threshold absorbs + // rounding-scale filter differences while the exact native-plane tests continue to prove reconstruction. + ImageComparer.TolerantPercentage(1F, 20).VerifySimilarity(expected, actual); + + Assert.Equal(new Size(width, height), actual.Size); + Assert.Equal(HeifCompressionMethod.Hevc, metadata.CompressionMethod); + Assert.Equal(bitDepth, metadata.BitDepth); + Assert.Null(actual.Metadata.IccProfile); + } + + /// + /// Verifies genuine monochrome HEIC presentation against FFmpeg presentation derived from official native output. + /// + /// The retained official elementary-stream path used to derive the HEIC and reference paths. + /// The coded luma precision. + [Theory] + [InlineData(TestImages.Heif.General8BitMonochrome, HeifBitDepth.Bit8)] + [InlineData(TestImages.Heif.General12BitMonochrome, HeifBitDepth.Bit12)] + public void DecodeHevcMonochromeStillImageMatchesHmFfmpeg(string bitstreamPath, HeifBitDepth bitDepth) + { + string heicPath = $"{bitstreamPath[..^4]}.heic"; + string referencePath = $"{bitstreamPath[..^4]}-hm-ffmpeg.png"; + using Image expected = TestFile.Create(referencePath).CreateRgba32Image(); + using Image actual = TestFile.Create(heicPath).CreateRgba32Image(); + HeifMetadata metadata = actual.Metadata.GetHeifMetadata(); + + // The reference explicitly expands the limited-range official luma samples before RGB packing. The exact + // published luma-plane comparison remains responsible for proving HEVC reconstruction. + ImageComparer.TolerantPercentage(1F, 20).VerifySimilarity(expected, actual); + + Assert.Equal(new Size(400, 384), actual.Size); + Assert.Equal(HeifCompressionMethod.Hevc, metadata.CompressionMethod); + Assert.Equal(bitDepth, metadata.BitDepth); + Assert.Null(actual.Metadata.IccProfile); + } + + /// + /// Verifies genuine HEIC presentation for the official high-throughput Range Extensions streams against + /// FFmpeg presentation derived from pinned HM reference-decoder output. + /// + /// The retained official elementary-stream path used to derive the HEIC and reference paths. + /// The independently reported presented width. + /// The independently reported presented height. + /// The maximum coded component precision. + [Theory] + [InlineData(TestImages.Heif.HighThroughputExtendedPrecision8Bit444, 400, 384, HeifBitDepth.Bit8)] + [InlineData(TestImages.Heif.HighThroughputExtendedPrecision10Bit444, 400, 384, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.HighThroughputExtendedPrecision12Bit444, 400, 384, HeifBitDepth.Bit12)] + [InlineData(TestImages.Heif.HighThroughput10Bit422TilesWavefront, 1920, 1080, HeifBitDepth.Bit10)] + [InlineData(TestImages.Heif.HighThroughput8Bit420TilesWavefront, 1024, 768, HeifBitDepth.Bit8)] + [InlineData(TestImages.Heif.HighThroughput8Bit420CabacBypassAlignment, 1024, 768, HeifBitDepth.Bit8)] + [InlineData(TestImages.Heif.HighThroughput8Bit420ExtendedPrecision, 1024, 768, HeifBitDepth.Bit8)] + public void DecodeHevcHighThroughputStillImageMatchesHmFfmpeg( + string bitstreamPath, + int width, + int height, + HeifBitDepth bitDepth) + { + string heicPath = $"{bitstreamPath[..^4]}.heic"; + string referencePath = $"{bitstreamPath[..^4]}-hm-ffmpeg.png"; + using Image expected = TestFile.Create(referencePath).CreateRgba32Image(); + using Image actual = TestFile.Create(heicPath).CreateRgba32Image(); + HeifMetadata metadata = actual.Metadata.GetHeifMetadata(); + + // The HM native outputs match the published plane digests, and the matching ImageSharp tests prove exact + // reconstruction. This comparison therefore isolates the shared color-presentation path. + ImageComparer.TolerantPercentage(1F, 20).VerifySimilarity(expected, actual); + + Assert.Equal(new Size(width, height), actual.Size); + Assert.Equal(HeifCompressionMethod.Hevc, metadata.CompressionMethod); + Assert.Equal(bitDepth, metadata.BitDepth); + Assert.Null(actual.Metadata.IccProfile); + } + + /// + /// Verifies genuine HEIC presentation for unequal luma and chroma precision, which independent HEIF decoders + /// currently reject after reconstructing the native planes. + /// + /// The retained official elementary-stream path used to derive the HEIC path. + [Theory] + [InlineData(TestImages.Heif.RangeExtensionLuma12Chroma8)] + [InlineData(TestImages.Heif.RangeExtensionLuma8Chroma12)] + public void DecodeHevcRangeExtensionUnequalBitDepthStillImage(string bitstreamPath) + { + string heicPath = $"{bitstreamPath[..^4]}.heic"; + using Image image = TestFile.Create(heicPath).CreateRgba32Image(); + HeifMetadata metadata = image.Metadata.GetHeifMetadata(); + + Assert.Equal(new Size(1920, 1080), image.Size); + Assert.Equal(HeifCompressionMethod.Hevc, metadata.CompressionMethod); + Assert.Equal(HeifBitDepth.Bit12, metadata.BitDepth); + Assert.Null(image.Metadata.IccProfile); + } + + /// + /// Verifies representative genuine HEIC Range Extensions presentation with allocator-split buffers and + /// exactly-once final disposal. + /// + /// The retained official elementary-stream path used to derive the HEIC and reference paths. + /// The suffix identifying the independently produced presentation reference. + /// The independently reported presented width. + /// The independently reported presented height. + [Theory] + [InlineData(TestImages.Heif.General8Bit420, "-ffmpeg.png", 400, 384)] + [InlineData(TestImages.Heif.General10Bit422, "-ffmpeg.png", 400, 384)] + [InlineData(TestImages.Heif.General12Bit444, "-ffmpeg.png", 400, 384)] + [InlineData(TestImages.Heif.General12BitMonochrome, "-hm-ffmpeg.png", 400, 384)] + [InlineData(TestImages.Heif.HighThroughput8Bit420ExtendedPrecision, "-hm-ffmpeg.png", 1024, 768)] + public void DecodeHevcRangeExtensionStillImageWithConstrainedAllocator( + string bitstreamPath, + string referenceSuffix, + int width, + int height) + { + string heicPath = $"{bitstreamPath[..^4]}.heic"; + string referencePath = $"{bitstreamPath[..^4]}{referenceSuffix}"; + byte[] imageBytes = TestFile.Create(heicPath).Bytes; + TestMemoryAllocator allocator = new() { BufferCapacityInBytes = 4_096 }; + allocator.EnableNonThreadSafeLogging(); + Configuration configuration = Configuration.Default.Clone(); + configuration.MemoryAllocator = allocator; + DecoderOptions options = new() { Configuration = configuration }; + + using (Image expected = TestFile.Create(referencePath).CreateRgba32Image()) + using (Image actual = Image.Load(options, imageBytes)) + { + Assert.Equal(new Size(width, height), actual.Size); + ImageComparer.TolerantPercentage(1F, 20).VerifySimilarity(expected, actual); + } + + Assert.NotEmpty(allocator.AllocationLog); + Assert.Equal(allocator.AllocationLog.Count, allocator.ReturnLog.Count); + Assert.All( + allocator.AllocationLog, + allocation => Assert.Single( + allocator.ReturnLog, + returned => returned.AllocationId == allocation.AllocationId)); + + } + + /// + /// Verifies representative eight-bit subsampled and high-bit-depth full-resolution presentation through every + /// available vector width and the scalar fallback. + /// + [Fact] + public void DecodeHevcRangeExtensionPresentationMatchesAcrossIntrinsicWidths() + => FeatureTestRunner.RunWithHwIntrinsicsFeature( + ValidateHevcRangeExtensionPresentation, + HevcPresentationConfigurations); + + private static void ValidateHevcRangeExtensionPresentation() + { + string subsampledPath = TestImages.Heif.General8Bit420[..^4]; + using Image subsampledExpected = TestFile.Create($"{subsampledPath}-ffmpeg.png").CreateRgba32Image(); + using Image subsampledActual = TestFile.Create($"{subsampledPath}.heic").CreateRgba32Image(); + + ImageComparer.TolerantPercentage(1F, 20).VerifySimilarity(subsampledExpected, subsampledActual); + + string fullResolutionPath = TestImages.Heif.HighThroughputExtendedPrecision12Bit444[..^4]; + using Image fullResolutionExpected = TestFile.Create($"{fullResolutionPath}-hm-ffmpeg.png").CreateRgba32Image(); + using Image fullResolutionActual = TestFile.Create($"{fullResolutionPath}.heic").CreateRgba32Image(); + + ImageComparer.TolerantPercentage(1F, 20).VerifySimilarity(fullResolutionExpected, fullResolutionActual); + } + /// /// Verifies that AVIF decoding preserves the exact embedded ICC profile bytes. /// diff --git a/tests/Images/Input/Heif/Hevc/Conformance/ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0-ffmpeg.png new file mode 100644 index 000000000..6cce68c2f --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3d467add4b0a41575228af86011a4f0d003003df267c639ca7dab4a290997a2 +size 2729225 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0.heic new file mode 100644 index 000000000..c6fe8aec2 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b36e994059522739e53eedbacae7ccca5edfe67934fe841fbb400388b926abc +size 77732 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/Bitdepth_A_RExt_Sony_1_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/Bitdepth_A_RExt_Sony_1_frame0.heic new file mode 100644 index 000000000..3dc03cedd --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/Bitdepth_A_RExt_Sony_1_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83a143499278c1950f191ffe84d04d6aaf6cfb41077f52a78dd686de0e4a9cd2 +size 27087 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/Bitdepth_B_RExt_Sony_1_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/Bitdepth_B_RExt_Sony_1_frame0.heic new file mode 100644 index 000000000..38871a3b8 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/Bitdepth_B_RExt_Sony_1_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dd4464942006d50126b6a79db8e7e1ab6c53833cf1802eca047803086f4bc4b +size 27115 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/CCP_10bit_RExt_QCOM_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/CCP_10bit_RExt_QCOM_frame0-ffmpeg.png new file mode 100644 index 000000000..fa7a35602 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/CCP_10bit_RExt_QCOM_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d94be2ff029467ba3f0cc6e48c735966edf9c57424c0175fceed14a5d9434dbb +size 2427308 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/CCP_10bit_RExt_QCOM_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/CCP_10bit_RExt_QCOM_frame0.heic new file mode 100644 index 000000000..b130c7884 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/CCP_10bit_RExt_QCOM_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3c9f9adce22f14fa9f9fe6cf566a0cb3336e0ce71dc98d763b49f268c19b425 +size 44695 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/CCP_12bit_RExt_QCOM_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/CCP_12bit_RExt_QCOM_frame0-ffmpeg.png new file mode 100644 index 000000000..930d4178a --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/CCP_12bit_RExt_QCOM_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f27738eb42338db6db0ab3e8b392ac5407e51473ffceefd00f318b06b124d249 +size 5167261 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/CCP_12bit_RExt_QCOM_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/CCP_12bit_RExt_QCOM_frame0.heic new file mode 100644 index 000000000..b9f6ab636 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/CCP_12bit_RExt_QCOM_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d42fc1b58c55a4d1ab7f385a4479a7dd029c0f3a4fd4244eab11f3147a90270a +size 365792 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/CCP_8bit_RExt_QCOM_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/CCP_8bit_RExt_QCOM_frame0-ffmpeg.png new file mode 100644 index 000000000..d091c039b --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/CCP_8bit_RExt_QCOM_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4b107ab968f826a9d710be90255842af0315e475516b3b5cf3361dcd226fd81 +size 953520 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/CCP_8bit_RExt_QCOM_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/CCP_8bit_RExt_QCOM_frame0.heic new file mode 100644 index 000000000..4783651f2 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/CCP_8bit_RExt_QCOM_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4b6ba7ec0edc57e4ae3a50369d83a53382801dd413412c5224896c8f71cafd6 +size 29269 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended-hm-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended-hm-ffmpeg.png new file mode 100644 index 000000000..0cfcd1e11 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended-hm-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf61f91cbc21d8172d4000dcffb2e5a6e1d56877cc354465548f00bf106b8923 +size 255832 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic new file mode 100644 index 000000000..c309b49b5 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9b828da68543a5a8724bf317cec4b7c63289322338a98e8164c3a51668a749b +size 149669 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended-hm-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended-hm-ffmpeg.png new file mode 100644 index 000000000..d51c6445b --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended-hm-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66d5e15924db6ca2b7344edc8e200a6cc00674369105d23ebe67b03b39e782f8 +size 250554 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended.heic b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended.heic new file mode 100644 index 000000000..93b061e31 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b50903b1cd8bef1ca9a7128a09c11fe29a0cca4bfa76d9fd5360a81d3093f216 +size 207122 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended-hm-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended-hm-ffmpeg.png new file mode 100644 index 000000000..eeba679b5 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended-hm-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bae712cbd64ba5eb491780509b483b2d83ea531a630a9913b2a9af649a70b096 +size 259753 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic new file mode 100644 index 000000000..5ffc00ff6 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ff37e993f514becbf9ccc055863fb105c0e506f99caeb2a0f576c27f4a9cf67 +size 93916 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended-ffmpeg.png new file mode 100644 index 000000000..da15aed06 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27fafaa241c530ee7c4b0b22cdbcac13414b2a5bd742c61f31d9857e1ea52f3f +size 256815 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic new file mode 100644 index 000000000..06154d230 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e05c498eccf1c6fa5f273a8a61441b703df82eb6267ba6add646f22a328ee8b1 +size 148409 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1-ffmpeg.png new file mode 100644 index 000000000..9288ec980 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35c73148eb3eeff74890086d82514d9419e9c2d672a6e0eb5a25ac97752422a8 +size 251208 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1.heic b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1.heic new file mode 100644 index 000000000..17c8c614d --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63bb00619cb2deb4986df6d42ec805ba0c1895e7ab0534e4a81ca43ada140861 +size 205642 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended-ffmpeg.png new file mode 100644 index 000000000..32bcf7840 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70b46a41052be1727ee286c84b71e6952e363ce9ff1af35b7c571280d40c59d2 +size 260306 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic new file mode 100644 index 000000000..85b394556 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72e84f04f278d7a3bd02e215a2fd7d0bbe5dfc6d1ac2048dca57ec4ef36b6a73 +size 93073 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_420_RExt_Sony_1-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_420_RExt_Sony_1-ffmpeg.png new file mode 100644 index 000000000..d05cd4cd8 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_420_RExt_Sony_1-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9196dfaaaf4fc256e663b2b6974671bed9dfb19b26211af936ccf389cb7de156 +size 195771 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_420_RExt_Sony_1.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_420_RExt_Sony_1.heic new file mode 100644 index 000000000..92d10ac81 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_420_RExt_Sony_1.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:091a1dc8aaf44706b153d61c35f4eb93e27c458704a41f3f2e645b81e5e7d845 +size 30801 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_422_RExt_Sony_1-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_422_RExt_Sony_1-ffmpeg.png new file mode 100644 index 000000000..2866f9f4b --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_422_RExt_Sony_1-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d865c89c8ed3a0315ed37ecae3a8738d0abdac92fb890b94024bbd6e6c0a981 +size 208613 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_422_RExt_Sony_1.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_422_RExt_Sony_1.heic new file mode 100644 index 000000000..2c993558e --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_422_RExt_Sony_1.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18644ca5cfe89c4a50145d4a9ce5e5cd9ef240b6bea134f13020e2194889b538 +size 36130 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_444_RExt_Sony_2-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_444_RExt_Sony_2-ffmpeg.png new file mode 100644 index 000000000..20fffad0f --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_444_RExt_Sony_2-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbdb9ac98e1a65f6b0f9f6d4e8d3d3128179f330f9160862755204f01bf15670 +size 205100 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_444_RExt_Sony_2.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_444_RExt_Sony_2.heic new file mode 100644 index 000000000..97881385b --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_10b_444_RExt_Sony_2.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7070b0a6368ca02fe33310dcf54b7f5da61a4413444308cf99b1a8e49dab43b4 +size 43247 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_400_RExt_Sony_1-hm-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_400_RExt_Sony_1-hm-ffmpeg.png new file mode 100644 index 000000000..58347e181 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_400_RExt_Sony_1-hm-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90ec0f69b33f264b98a07885815d2b5e1bb8dfb2cdcef61ecbc06bc47ec36eb9 +size 87886 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_400_RExt_Sony_1.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_400_RExt_Sony_1.heic new file mode 100644 index 000000000..61fc4f88b --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_400_RExt_Sony_1.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af534c6238e9fb7c2b4f2a97f053b232d073eb31bd175b4d32e83e2128bb4d67 +size 38595 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_420_RExt_Sony_1-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_420_RExt_Sony_1-ffmpeg.png new file mode 100644 index 000000000..f24188d8b --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_420_RExt_Sony_1-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51fe712b737f62227437fcd33c02aa223b618d051a6da300637bbf7e3cca92f2 +size 204265 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_420_RExt_Sony_1.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_420_RExt_Sony_1.heic new file mode 100644 index 000000000..392b3934c --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_420_RExt_Sony_1.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:814433b3109b2fa1f2408f424f6aa38e17f92b4e50f4996d2ca59a2baa84a30a +size 57541 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_422_RExt_Sony_1-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_422_RExt_Sony_1-ffmpeg.png new file mode 100644 index 000000000..8ff90507c --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_422_RExt_Sony_1-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e365ce81652df437b699d4e4a438be7cc3b48b64488600e5bfb133299da59f5 +size 216345 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_422_RExt_Sony_1.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_422_RExt_Sony_1.heic new file mode 100644 index 000000000..70bf1a7b9 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_422_RExt_Sony_1.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d88d5f0225061eef053bfc193d83334624ec80a6653a8e15792bc320973d25f5 +size 69910 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_444_RExt_Sony_2-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_444_RExt_Sony_2-ffmpeg.png new file mode 100644 index 000000000..5b14f909f --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_444_RExt_Sony_2-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09f1244f554076b1452fa1a8c280f87d876d7eaee6b81fda23448648c8749a8f +size 210526 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_444_RExt_Sony_2.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_444_RExt_Sony_2.heic new file mode 100644 index 000000000..f9db83f87 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_12b_444_RExt_Sony_2.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da264470c99586d99280fb861273c69b982a2ac6d962bd7408751c8bfe186332 +size 85534 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_400_RExt_Sony_1-hm-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_400_RExt_Sony_1-hm-ffmpeg.png new file mode 100644 index 000000000..2400d3ede --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_400_RExt_Sony_1-hm-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2dab4ae93efc085770d811887e171d7b8de0c41aa670cb945429f7b198b0ffd9 +size 85162 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_400_RExt_Sony_1.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_400_RExt_Sony_1.heic new file mode 100644 index 000000000..3108015af --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_400_RExt_Sony_1.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dfce3b603a81c253d0a70827d1edea45554adc405068a4a277eea2286af8304 +size 10712 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_420_RExt_Sony_1-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_420_RExt_Sony_1-ffmpeg.png new file mode 100644 index 000000000..01ca19289 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_420_RExt_Sony_1-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea750b757fec4eb5650ac28454a98a0117a810b01bdeb29b0c91aab5ccaa5e44 +size 161043 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_420_RExt_Sony_1.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_420_RExt_Sony_1.heic new file mode 100644 index 000000000..ed17c27f2 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_420_RExt_Sony_1.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68bcd1fa5e8ffcfa7e9fb4a7c9b091b9096db4e7be27b8bd6c336439df217f1d +size 14457 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_444_RExt_Sony_2-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_444_RExt_Sony_2-ffmpeg.png new file mode 100644 index 000000000..f519ab3b4 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_444_RExt_Sony_2-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad14c2742160a9fc9443833d16822de1231b253e50a8eef9cf325bdfc7b0686a +size 189475 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_444_RExt_Sony_2.heic b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_444_RExt_Sony_2.heic new file mode 100644 index 000000000..720c25036 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/GENERAL_8b_444_RExt_Sony_2.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cacde3604855b57280977daa9ecc4073f4ac30973aa530a30727b88d3395763f +size 19050 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/IPCM_A_RExt_NEC_2_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/IPCM_A_RExt_NEC_2_frame0-ffmpeg.png new file mode 100644 index 000000000..b242252b1 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/IPCM_A_RExt_NEC_2_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd910cd903aebb550143f498e25cfec9505c63181116499f6693985fb332c5e6 +size 149133 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/IPCM_A_RExt_NEC_2_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/IPCM_A_RExt_NEC_2_frame0.heic new file mode 100644 index 000000000..29b2629cc --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/IPCM_A_RExt_NEC_2_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6575bd13224e8c48db8ea3b2ffea9cfdb4b2444c84193f43a1eabef2c6f76342 +size 4637 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/IPCM_B_RExt_NEC_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/IPCM_B_RExt_NEC_frame0-ffmpeg.png new file mode 100644 index 000000000..21a75af14 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/IPCM_B_RExt_NEC_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:068d8a89a8cae39d87c3768f8a2894387159557433d57aacda5115a27869c9ba +size 149637 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/IPCM_B_RExt_NEC_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/IPCM_B_RExt_NEC_frame0.heic new file mode 100644 index 000000000..786bd07e1 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/IPCM_B_RExt_NEC_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20b2814c29ae04acd57718ab75fd8fc32b49975a08af9ace98918af1dff814fe +size 5337 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_A_RExt_Sony_2_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_A_RExt_Sony_2_frame0-ffmpeg.png new file mode 100644 index 000000000..a6593d28c --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_A_RExt_Sony_2_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d56d487a16836ac7d4016bc57eedcbf586e401962c5740879f7760e63ba6788e +size 3728772 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_A_RExt_Sony_2_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_A_RExt_Sony_2_frame0.heic new file mode 100644 index 000000000..2b849e969 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_A_RExt_Sony_2_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ee8360a7400db49f7d9ca790e73eed7947b3a267e115714d2581bdea628f04e +size 633003 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_B_RExt_Sony_2_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_B_RExt_Sony_2_frame0-ffmpeg.png new file mode 100644 index 000000000..6865f838c --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_B_RExt_Sony_2_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acdde43497ae13edc07a74ae182877dd1cc9b98da81fc9c3b5ac1cb02210186a +size 6566287 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_B_RExt_Sony_2_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_B_RExt_Sony_2_frame0.heic new file mode 100644 index 000000000..c345a56ad --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/Main_422_10_B_RExt_Sony_2_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efeff0451cce627bbd73fec725cc38c759cf3de07010050642e6debcc3f57448 +size 1114175 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/PERSIST_RPARAM_A_RExt_Sony_3_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/PERSIST_RPARAM_A_RExt_Sony_3_frame0-ffmpeg.png new file mode 100644 index 000000000..b77efdc2f --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/PERSIST_RPARAM_A_RExt_Sony_3_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11758488f57cdcf97ece9dfcc35b467c349ac79cb3b8855a6e3fa7753052e59f +size 246886 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/PERSIST_RPARAM_A_RExt_Sony_3_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/PERSIST_RPARAM_A_RExt_Sony_3_frame0.heic new file mode 100644 index 000000000..da42f2f7d --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/PERSIST_RPARAM_A_RExt_Sony_3_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fc9c32108dd3ee8b37f138428f39caf6a1701f161778c1258100c754ed9378b +size 329635 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/PRESENTATION_SHA256.md b/tests/Images/Input/Heif/Hevc/Conformance/PRESENTATION_SHA256.md new file mode 100644 index 000000000..4b7d3618e --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/PRESENTATION_SHA256.md @@ -0,0 +1,74 @@ +# Genuine HEIC presentation fixture SHA-256 + +These hashes cover every retained genuine HEIC container and independent PNG presentation reference used by the HEVC Range Extensions presentation matrix. + +| File | SHA-256 | +| --- | --- | +| `ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0-ffmpeg.png` | `B3D467ADD4B0A41575228AF86011A4F0D003003DF267C639CA7DAB4A290997A2` | +| `ADJUST_IPRED_ANGLE_A_RExt_Mitsubishi_2_frame0.heic` | `0B36E994059522739E53EEDBACAE7CCCA5EDFE67934FE841FBB400388B926ABC` | +| `Bitdepth_A_RExt_Sony_1_frame0.heic` | `83A143499278C1950F191FFE84D04D6AAF6CFB41077F52A78DD686DE0E4A9CD2` | +| `Bitdepth_B_RExt_Sony_1_frame0.heic` | `1DD4464942006D50126B6A79DB8E7E1AB6C53833CF1802ECA047803086F4BC4B` | +| `CCP_10bit_RExt_QCOM_frame0-ffmpeg.png` | `D94BE2FF029467BA3F0CC6E48C735966EDF9C57424C0175FCEED14A5D9434DBB` | +| `CCP_10bit_RExt_QCOM_frame0.heic` | `F3C9F9ADCE22F14FA9F9FE6CF566A0CB3336E0CE71DC98D763B49F268C19B425` | +| `CCP_12bit_RExt_QCOM_frame0-ffmpeg.png` | `F27738EB42338DB6DB0AB3E8B392AC5407E51473FFCEEFD00F318B06B124D249` | +| `CCP_12bit_RExt_QCOM_frame0.heic` | `D42FC1B58C55A4D1AB7F385A4479A7DD029C0F3A4FD4244EAB11F3147A90270A` | +| `CCP_8bit_RExt_QCOM_frame0-ffmpeg.png` | `E4B107AB968F826A9D710BE90255842AF0315E475516B3B5CF3361DCD226FD81` | +| `CCP_8bit_RExt_QCOM_frame0.heic` | `D4B6BA7EC0EDC57E4AE3A50369D83A53382801DD413412C5224896C8F71CAFD6` | +| `EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended-hm-ffmpeg.png` | `BF61F91CBC21D8172D4000DCFFB2E5A6E1D56877CC354465548F00BF106B8923` | +| `EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic` | `F9B828DA68543A5A8724BF317CEC4B7C63289322338A98E8164C3A51668A749B` | +| `EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended-hm-ffmpeg.png` | `66D5E15924DB6CA2B7344EDC8E200A6CC00674369105D23EBE67B03B39E782F8` | +| `EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_12BIT_RExt_Sony_1_extended.heic` | `B50903B1CD8BEF1CA9A7128A09C11FE29A0CCA4BFA76D9FD5360A81D3093F216` | +| `EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended-hm-ffmpeg.png` | `BAE712CBD64BA5EB491780509B483B2D83EA531A630A9913B2A9AF649A70B096` | +| `EXTPREC_HIGHTHROUGHPUT_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic` | `6FF37E993F514BECBF9CCC055863FB105C0E506F99CAEB2A0F576C27F4A9CF67` | +| `EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended-ffmpeg.png` | `27FAFAA241C530EE7C4B0B22CDBCAC13414B2A5BD742C61F31D9857E1EA52F3F` | +| `EXTPREC_MAIN_444_16_INTRA_10BIT_RExt_Sony_1_extended.heic` | `E05C498ECCF1C6FA5F273A8A61441B703DF82EB6267BA6ADD646F22A328EE8B1` | +| `EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1-ffmpeg.png` | `35C73148EB3EEFF74890086D82514D9419E9C2D672A6E0EB5A25AC97752422A8` | +| `EXTPREC_MAIN_444_16_INTRA_12BIT_RExt_Sony_1.heic` | `63BB00619CB2DEB4986DF6D42EC805BA0C1895E7AB0534E4A81CA43ADA140861` | +| `EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended-ffmpeg.png` | `70B46A41052BE1727EE286C84B71E6952E363CE9FF1AF35B7C571280D40C59D2` | +| `EXTPREC_MAIN_444_16_INTRA_8BIT_RExt_Sony_1_extended.heic` | `72E84F04F278D7A3BD02E215A2FD7D0BBE5DFC6D1AC2048DCA57EC4EF36B6A73` | +| `GENERAL_10b_420_RExt_Sony_1-ffmpeg.png` | `9196DFAAAF4FC256E663B2B6974671BED9DFB19B26211AF936CCF389CB7DE156` | +| `GENERAL_10b_420_RExt_Sony_1.heic` | `091A1DC8AAF44706B153D61C35F4EB93E27C458704A41F3F2E645B81E5E7D845` | +| `GENERAL_10b_422_RExt_Sony_1-ffmpeg.png` | `8D865C89C8ED3A0315ED37ECAE3A8738D0ABDAC92FB890B94024BBD6E6C0A981` | +| `GENERAL_10b_422_RExt_Sony_1.heic` | `18644CA5CFE89C4A50145D4A9CE5E5CD9EF240B6BEA134F13020E2194889B538` | +| `GENERAL_10b_444_RExt_Sony_2-ffmpeg.png` | `BBDB9AC98E1A65F6B0F9F6D4E8D3D3128179F330F9160862755204F01BF15670` | +| `GENERAL_10b_444_RExt_Sony_2.heic` | `7070B0A6368CA02FE33310DCF54B7F5DA61A4413444308CF99B1A8E49DAB43B4` | +| `GENERAL_12b_400_RExt_Sony_1-hm-ffmpeg.png` | `90EC0F69B33F264B98A07885815D2B5E1BB8DFB2CDCEF61ECBC06BC47EC36EB9` | +| `GENERAL_12b_400_RExt_Sony_1.heic` | `AF534C6238E9FB7C2B4F2A97F053B232D073EB31BD175B4D32E83E2128BB4D67` | +| `GENERAL_12b_420_RExt_Sony_1-ffmpeg.png` | `51FE712B737F62227437FCD33C02AA223B618D051A6DA300637BBF7E3CCA92F2` | +| `GENERAL_12b_420_RExt_Sony_1.heic` | `814433B3109B2FA1F2408F424F6AA38E17F92B4E50F4996D2CA59A2BAA84A30A` | +| `GENERAL_12b_422_RExt_Sony_1-ffmpeg.png` | `3E365CE81652DF437B699D4E4A438BE7CC3B48B64488600E5BFB133299DA59F5` | +| `GENERAL_12b_422_RExt_Sony_1.heic` | `D88D5F0225061EEF053BFC193D83334624EC80A6653A8E15792BC320973D25F5` | +| `GENERAL_12b_444_RExt_Sony_2-ffmpeg.png` | `09F1244F554076B1452FA1A8C280F87D876D7EAEE6B81FDA23448648C8749A8F` | +| `GENERAL_12b_444_RExt_Sony_2.heic` | `DA264470C99586D99280FB861273C69B982A2AC6D962BD7408751C8BFE186332` | +| `GENERAL_8b_400_RExt_Sony_1-hm-ffmpeg.png` | `2DAB4AE93EFC085770D811887E171D7B8DE0C41AA670CB945429F7B198B0FFD9` | +| `GENERAL_8b_400_RExt_Sony_1.heic` | `0DFCE3B603A81C253D0A70827D1EDEA45554ADC405068A4A277EEA2286AF8304` | +| `GENERAL_8b_420_RExt_Sony_1-ffmpeg.png` | `EA750B757FEC4EB5650AC28454A98A0117A810B01BDEB29B0C91AAB5CCAA5E44` | +| `GENERAL_8b_420_RExt_Sony_1.heic` | `68BCD1FA5E8FFCFA7E9FB4A7C9B091B9096DB4E7BE27B8BD6C336439DF217F1D` | +| `GENERAL_8b_444_RExt_Sony_2-ffmpeg.png` | `AD14C2742160A9FC9443833D16822DE1231B253E50A8EEF9CF325BDFC7B0686A` | +| `GENERAL_8b_444_RExt_Sony_2.heic` | `CACDE3604855B57280977DAA9ECC4073F4AC30973AA530A30727B88D3395763F` | +| `IPCM_A_RExt_NEC_2_frame0-ffmpeg.png` | `DD910CD903AEBB550143F498E25CFEC9505C63181116499F6693985FB332C5E6` | +| `IPCM_A_RExt_NEC_2_frame0.heic` | `6575BD13224E8C48DB8EA3B2FFEA9CFDB4B2444C84193F43A1EABEF2C6F76342` | +| `IPCM_B_RExt_NEC_frame0-ffmpeg.png` | `068D8A89A8CAE39D87C3768F8A2894387159557433D57AACDA5115A27869C9BA` | +| `IPCM_B_RExt_NEC_frame0.heic` | `20B2814C29AE04ACD57718AB75FD8FC32B49975A08AF9ACE98918AF1DFF814FE` | +| `Main_422_10_A_RExt_Sony_2_frame0-ffmpeg.png` | `D56D487A16836AC7D4016BC57EEDCBF586E401962C5740879F7760E63BA6788E` | +| `Main_422_10_A_RExt_Sony_2_frame0.heic` | `5EE8360A7400DB49F7D9CA790E73EED7947B3A267E115714D2581BDEA628F04E` | +| `Main_422_10_B_RExt_Sony_2_frame0-ffmpeg.png` | `ACDDE43497AE13EDC07A74AE182877DD1CC9B98DA81FC9C3B5AC1CB02210186A` | +| `Main_422_10_B_RExt_Sony_2_frame0.heic` | `EFEFF0451CCE627BBD73FEC725CC38C759CF3DE07010050642E6DEBCC3F57448` | +| `PERSIST_RPARAM_A_RExt_Sony_3_frame0-ffmpeg.png` | `11758488F57CDCF97ECE9DFCC35B467C349AC79CB3B8855A6E3FA7753052E59F` | +| `PERSIST_RPARAM_A_RExt_Sony_3_frame0.heic` | `9FC9C32108DD3EE8B37F138428F39CAF6A1701F161778C1258100C754ED9378B` | +| `TSCTX_10bit_I_RExt_SHARP_1_frame0-ffmpeg.png` | `F6C36D8FF915D65405C3D5705C9525FBA76B751ECD50BD64AD1470BA0BA42035` | +| `TSCTX_10bit_I_RExt_SHARP_1_frame0.heic` | `FF99931C1DA27FB150F17B67DC1BF8F167439E78EF5611F51AF5ECDDFBA5B720` | +| `TSCTX_12bit_I_RExt_SHARP_1_frame0-ffmpeg.png` | `0BCB4BBB62CAAA7D8F24BE3FDB0EECAE26EA66CD55E23D683AEBC0FBBEABEDD4` | +| `TSCTX_12bit_I_RExt_SHARP_1_frame0.heic` | `B3031636E37F8534F28FA54304287208784476AE709F52F64C54CBF5E55A3773` | +| `TSCTX_8bit_I_RExt_SHARP_1_frame0-ffmpeg.png` | `991D37D4476D2A87BA5465A96462D84B40E5CAF234F38B00A7E90215DA7F68DC` | +| `TSCTX_8bit_I_RExt_SHARP_1_frame0.heic` | `C4A1653681D5DCDE1E0B9F35C7BA6E6D546CF237F4C8D724123DA631E2C57148` | +| `WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0-hm-ffmpeg.png` | `1BBE3271FDEF0AE1328E7196D9841476C75A5865BDC40EB4D417FDFBA17B6A07` | +| `WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0.heic` | `E7C9278743E5CF8B964953FB15AC0590A9FB476959C995A8089E730D0D531D29` | +| `WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png` | `C1E85593BBB0523EC5D8E3DC2F97895355B9CB8D468898AC32E7622158FFFFBC` | +| `WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic` | `BE215D5A7AB4A91B99080ED3E80BF48C93F921003A6642C2D4C92C779B8211DF` | +| `WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png` | `D7359C4CA58001556C3F0DA0277919BD832551C706DF8B91EC3FCA6D52E6AE9F` | +| `WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic` | `9A685B86DD0B6A7EEFDF268F8D908E61A0FB6154AAAA86BB640B04B3E7D6FD14` | +| `WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-hm-ffmpeg.png` | `98737664EA21735A32BAC4DD3A8D8606AEB9DE2752418682FE3C91EBD4EDDA72` | +| `WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic` | `099E54D9B44702A852B9C6C37F70BD2EB31D3A0BD9BA16767E09E6CE2904FC33` | +| `WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-ffmpeg.png` | `8A52D404EB5B4E82443B97FC11FCCEECC2886E48D651A577CDCA5E858A871CCD` | +| `WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic` | `000C9E50DA7654FC76374A42A8EA3EAD12890B02E26FEDD103E42FD57D28AAE5` | diff --git a/tests/Images/Input/Heif/Hevc/Conformance/README.md b/tests/Images/Input/Heif/Hevc/Conformance/README.md index dab1b573d..6ed265df7 100644 --- a/tests/Images/Input/Heif/Hevc/Conformance/README.md +++ b/tests/Images/Input/Heif/Hevc/Conformance/README.md @@ -35,6 +35,27 @@ The remaining Range Extensions fixtures come from the official H.265.1 RExt atta The expected plane hashes come directly from each selected picture's decoded-picture-hash SEI message when present. The CCP 8/10/12-bit, IPCM A/B, and Main 4:2:2 10 B streams omit that per-picture message. Their first reference pictures were extracted only after FFmpeg 9.0.1 reproduced the archives' published complete-output MD5 values `54231c6f121ca65d8b94a747b9504b8b`, `363f55fc6097a3bb7525392b87a6498a`, `f3e914fccdb820eac85f46642ea0e168`, `8d4eb18812338f9f475035b8da27e74a`, `eea32e6e1f88b7782515e53f8122be7d`, and `fd163bcbdc24792a23781ee7aace74eb`, respectively. +## Genuine HEIC presentation matrix + +The 35 `.heic` files pair every retained official Range Extensions picture above with a real ISO BMFF image item. GPAC `MP4Box` 26.07 (`26.07-rev0-ga07cbfff-master`) wrote the containers. FFmpeg 9.0.1 first copied one complete picture, including its active VPS, SPS, and PPS, from each supported Annex B stream so the `hvcC` configuration and item payload cannot select parameter sets from different concatenated pictures. The two unequal-precision streams are already bounded pictures and were passed directly to GPAC because FFmpeg rejects unequal luma and chroma precision. + +The generation templates were: + +```text +ffmpeg -threads 1 -i input.bit -map 0:v:0 -frames:v 1 -c copy frame0.hevc +MP4Box -add-image frame0.hevc:primary -new output.heic +``` + +The monochrome files add `image-pixi=8` or `image-pixi=12` to the `-add-image` argument so their `pixi` property contains exactly one channel. No `colr` property is added; the decoder must retain the HEVC VUI color description. + +Twenty-four `*-ffmpeg.png` files are FFmpeg 9.0.1 presentations decoded directly from the resulting HEIC files. Nine `*-hm-ffmpeg.png` files use native samples from pinned HM commit `9c1f298659ab0cee9dc13d23d0304221575410b9`, built with `HIGH_BITDEPTH=ON`, followed by FFmpeg raw-video color conversion. Every HM plane used by those references matches the official decoded-picture-hash values. This split is intentional: FFmpeg does not reconstruct seven of the retained high-throughput pictures to their published plane digests, and its direct monochrome-to-PNG path does not expand the signaled limited luma range. The monochrome references therefore apply the exact 8- or 12-bit limited-range scale before RGB packing. + +The two unequal-precision HEIC files have no PNG reference because FFmpeg and libheif reject that HEVC profile combination. Their public tests require successful bounded HEIC presentation and correct metadata, while the companion native tests compare all three planes with the published digests. + +`HeifDecoderTests` covers all 35 genuine HEIC files. The 33 independently presentable cases use the repository's narrow `TolerantPercentage(1F, 20)` public-pixel contract because HEVC does not prescribe one chroma upsampling filter. Exact native-plane tests remain the reconstruction oracle. Representative 8/10/12-bit, monochrome, 4:2:0, 4:2:2, 4:4:4, and high-throughput files also pass with 4 KiB allocator groups and exactly-once returns. Eight-bit subsampled and 12-bit full-resolution presentation repeat through AVX-512, AVX, narrower vector, and scalar `FeatureTestRunner` configurations. + +[`PRESENTATION_SHA256.md`](PRESENTATION_SHA256.md) records every retained HEIC and PNG SHA-256. + The SHA-256 columns below identify the downloaded archive, its original Annex B payload, and the retained bounded picture: | Retained picture | Archive SHA-256 | Original payload SHA-256 | Retained SHA-256 | diff --git a/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_10bit_I_RExt_SHARP_1_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_10bit_I_RExt_SHARP_1_frame0-ffmpeg.png new file mode 100644 index 000000000..e3dd49b6b --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_10bit_I_RExt_SHARP_1_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6c36d8ff915d65405c3d5705c9525fba76b751ecd50bd64ad1470ba0ba42035 +size 4139230 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_10bit_I_RExt_SHARP_1_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_10bit_I_RExt_SHARP_1_frame0.heic new file mode 100644 index 000000000..52687367e --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_10bit_I_RExt_SHARP_1_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff99931c1da27fb150f17b67dc1bf8f167439e78ef5611f51af5ecddfba5b720 +size 165477 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_12bit_I_RExt_SHARP_1_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_12bit_I_RExt_SHARP_1_frame0-ffmpeg.png new file mode 100644 index 000000000..3d1d95953 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_12bit_I_RExt_SHARP_1_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bcb4bbb62caaa7d8f24be3fdb0eecae26ea66cd55e23d683aebc0fbbeabedd4 +size 5038948 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_12bit_I_RExt_SHARP_1_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_12bit_I_RExt_SHARP_1_frame0.heic new file mode 100644 index 000000000..8696a5f9a --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_12bit_I_RExt_SHARP_1_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3031636e37f8534f28fa54304287208784476ae709f52f64c54cbf5e55a3773 +size 382898 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_8bit_I_RExt_SHARP_1_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_8bit_I_RExt_SHARP_1_frame0-ffmpeg.png new file mode 100644 index 000000000..90dd677f7 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_8bit_I_RExt_SHARP_1_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:991d37d4476d2a87ba5465a96462d84b40e5caf234f38b00a7e90215da7f68dc +size 4113423 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_8bit_I_RExt_SHARP_1_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_8bit_I_RExt_SHARP_1_frame0.heic new file mode 100644 index 000000000..1f55945f7 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/TSCTX_8bit_I_RExt_SHARP_1_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4a1653681d5dcde1e0b9f35c7ba6e6d546cf237f4c8d724123da631e2c57148 +size 165950 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0-hm-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0-hm-ffmpeg.png new file mode 100644 index 000000000..ef8ad6ec1 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0-hm-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bbe3271fdef0ae1328e7196d9841476c75a5865bdc40eb4d417fdfba17b6a07 +size 2225212 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0.heic new file mode 100644 index 000000000..b169e63b3 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_10Bit422Test_HIGH_TP_444_10BIT_RExt_Apple_2_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7c9278743e5cf8b964953fb15ac0590a9fb476959c995a8089e730d0d531d29 +size 37516 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png new file mode 100644 index 000000000..860e5566e --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c1e85593bbb0523ec5d8e3dc2f97895355b9cb8d468898ac32e7622158ffffbc +size 535609 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic new file mode 100644 index 000000000..3d44ff999 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_BYPASS_ALIGN_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be215d5a7ab4a91b99080ed3e80bf48c93f921003a6642c2d4c92c779b8211df +size 42514 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png new file mode 100644 index 000000000..aad31cd2e --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0-hm-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7359c4ca58001556c3f0da0277919bd832551c706df8b91ec3fca6d52e6ae9f +size 534581 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic new file mode 100644 index 000000000..55ca09470 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_AND_CABAC_EXT_PREC_1_HIGH_TP_444_14BIT_RExt_Apple_2_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a685b86dd0b6a7eefdf268f8d908e61a0fb6154aaaa86bb640b04b3e7d6fd14 +size 42164 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-hm-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-hm-ffmpeg.png new file mode 100644 index 000000000..f1055c46d --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-hm-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98737664ea21735a32bac4dd3a8d8606aeb9de2752418682fe3c91ebd4edda72 +size 533914 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic new file mode 100644 index 000000000..1fb7de8d3 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_AND_TILE_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:099e54d9b44702a852b9c6c37f70bd2eb31d3a0bd9ba16767e09e6ce2904fc33 +size 42140 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-ffmpeg.png b/tests/Images/Input/Heif/Hevc/Conformance/WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-ffmpeg.png new file mode 100644 index 000000000..ab39bf637 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0-ffmpeg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a52d404eb5b4e82443b97fc11fcceecc2886e48d651a577cdca5e858a871ccd +size 532122 diff --git a/tests/Images/Input/Heif/Hevc/Conformance/WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic b/tests/Images/Input/Heif/Hevc/Conformance/WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic new file mode 100644 index 000000000..df945ac32 --- /dev/null +++ b/tests/Images/Input/Heif/Hevc/Conformance/WPP_HIGH_TP_444_8BIT_RExt_Apple_2_frame0.heic @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:000c9e50da7654fc76374a42a8ea3ead12890b02e26fedd103e42fd57d28aae5 +size 41933