This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 61ae1901c753c2550d184c4e0ef237b4229cf828 Author: Kacper Michajłow <[email protected]> AuthorDate: Sat Oct 24 20:12:25 2026 +0200 Commit: Kacper Michajłow <[email protected]> CommitDate: Wed Oct 28 19:22:28 2026 +0000 swscale: scale the X'Y'Z' conversion as SMPTE ST 428-1 defines it The gamma tables put the top code of X'Y'Z' at linear 1.0, so the 48 cd/m2 reference white of a DCDM, code 3960, came out at 0.918, about 8 percent dark. ST 428-1 (H.273 transfer 17) puts 52.37 cd/m2 at the top code, L = 52.37/48 * V^2.6, so that the white lands on 1.0 and the codes above it are headroom. Fold the factor into the matrices, since the X and Z of a white exceed 1.0 and a 16-bit table cannot hold them: the headroom clips in RGB after the matrix, and RGB white encodes to code 3960. Signed-off-by: Kacper Michajłow <[email protected]> --- libswscale/utils.c | 11 +++++++---- tests/ref/fate/filter-pixdesc-xyz12be | 2 +- tests/ref/fate/filter-pixdesc-xyz12le | 2 +- tests/ref/fate/filter-pixfmts-copy | 4 ++-- tests/ref/fate/filter-pixfmts-crop | 4 ++-- tests/ref/fate/filter-pixfmts-field | 4 ++-- tests/ref/fate/filter-pixfmts-fieldorder | 4 ++-- tests/ref/fate/filter-pixfmts-hflip | 4 ++-- tests/ref/fate/filter-pixfmts-il | 4 ++-- tests/ref/fate/filter-pixfmts-null | 4 ++-- tests/ref/fate/filter-pixfmts-scale | 4 ++-- tests/ref/fate/filter-pixfmts-transpose | 4 ++-- tests/ref/fate/filter-pixfmts-vflip | 4 ++-- tests/ref/pixfmt/gbrp-xyz12le | 2 +- tests/ref/pixfmt/gbrp10-xyz12le | 2 +- tests/ref/pixfmt/gbrp12-xyz12le | 2 +- tests/ref/pixfmt/nv24-xyz12le | 2 +- tests/ref/pixfmt/p410-xyz12le | 2 +- tests/ref/pixfmt/p412-xyz12le | 2 +- tests/ref/pixfmt/rgb24-xyz12le | 2 +- tests/ref/pixfmt/rgb48-xyz12le | 2 +- tests/ref/pixfmt/xyz12le | 2 +- tests/ref/pixfmt/yuv444p-xyz12le | 2 +- tests/ref/pixfmt/yuv444p10-xyz12le | 2 +- tests/ref/pixfmt/yuv444p12-xyz12le | 2 +- 25 files changed, 41 insertions(+), 38 deletions(-) diff --git a/libswscale/utils.c b/libswscale/utils.c index 4399d267cf..3960991563 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -750,11 +750,11 @@ static av_cold void init_xyz_tables(void) } } -static void fill_xyz_matrix(int16_t mat[3][3], const SwsMatrix3x3 *m) +static void fill_xyz_matrix(int16_t mat[3][3], const SwsMatrix3x3 *m, double scale) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { - const double v = m->m[i][j] * 4096.0; + const double v = m->m[i][j] * scale * 4096.0; av_assert1(fabs(v) <= INT16_MAX); mat[i][j] = lrint(v); } @@ -763,6 +763,9 @@ static void fill_xyz_matrix(int16_t mat[3][3], const SwsMatrix3x3 *m) av_cold int ff_sws_fill_st428_tables(SwsInternal *c) { + /* X'Y'Z' puts its 48 cd/m2 white at code 3960 and the top code at + * 52.37 cd/m2 (ST 428-1), the codes above the white clip in RGB */ + const double peak = av_csp_trc_func_inv_from_id(AVCOL_TRC_SMPTE428)(1.0); const AVColorPrimariesDesc *bt709 = av_csp_primaries_desc_from_id(AVCOL_PRI_BT709); const SwsMatrix3x3 xyz2rgb = ff_sws_xyz2rgb(bt709); const SwsMatrix3x3 rgb2xyz = ff_sws_rgb2xyz(bt709); @@ -770,8 +773,8 @@ av_cold int ff_sws_fill_st428_tables(SwsInternal *c) if (c->xyz2rgb.gamma.in) return 0; - fill_xyz_matrix(c->xyz2rgb.mat, &xyz2rgb); - fill_xyz_matrix(c->rgb2xyz.mat, &rgb2xyz); + fill_xyz_matrix(c->xyz2rgb.mat, &xyz2rgb, peak); + fill_xyz_matrix(c->rgb2xyz.mat, &rgb2xyz, 1.0 / peak); #if CONFIG_SMALL c->xyz2rgb.gamma.in = av_malloc(sizeof(uint16_t) * 2 * (4096 + 65536)); diff --git a/tests/ref/fate/filter-pixdesc-xyz12be b/tests/ref/fate/filter-pixdesc-xyz12be index afee7450cc..de4aa304e9 100644 --- a/tests/ref/fate/filter-pixdesc-xyz12be +++ b/tests/ref/fate/filter-pixdesc-xyz12be @@ -1 +1 @@ -pixdesc-xyz12be 03b78ced8e69fd61e55040a3926e10a0 +pixdesc-xyz12be 1cb3b45b4be372ea5392f89a2cba9b97 diff --git a/tests/ref/fate/filter-pixdesc-xyz12le b/tests/ref/fate/filter-pixdesc-xyz12le index 02a372b15d..b815f93823 100644 --- a/tests/ref/fate/filter-pixdesc-xyz12le +++ b/tests/ref/fate/filter-pixdesc-xyz12le @@ -1 +1 @@ -pixdesc-xyz12le 2e028ed810f75ee2cda02b1f90519284 +pixdesc-xyz12le 46b9b7bdc4732d2370ebe89c56bc60f7 diff --git a/tests/ref/fate/filter-pixfmts-copy b/tests/ref/fate/filter-pixfmts-copy index 1c8218b66c..3993153352 100644 --- a/tests/ref/fate/filter-pixfmts-copy +++ b/tests/ref/fate/filter-pixfmts-copy @@ -117,8 +117,8 @@ xv36be 9f556ee59a672fd8725f0bb36ce3e4b0 xv36le e08dcbde02f1c28a3554f372ad1278e2 xv48be ce34993b4b4411bba1d852b9b86aa39e xv48le df913a7e61b162aa98303e5393e60c63 -xyz12be c4f3cb794f1c15770c2a8690f49e4395 -xyz12le 938885a1a9150b103adab1d3aefad5f6 +xyz12be c10b0f0f886ff1444d27cb6add490b77 +xyz12le e6739a863ccf9b26bf6991dc370b4f27 y210le 04e9487b6cce38e7531437e946cdd586 y212le 825768be8fe92708ae80be84855066ed y216le 0e99aeddfee304e72d525d72998d9e9b diff --git a/tests/ref/fate/filter-pixfmts-crop b/tests/ref/fate/filter-pixfmts-crop index 1eec02d7c8..73750a265a 100644 --- a/tests/ref/fate/filter-pixfmts-crop +++ b/tests/ref/fate/filter-pixfmts-crop @@ -114,8 +114,8 @@ xv36be 23b6f253fcb375e4145cfcb562268c5f xv36le 778286003497f92b84d0bd8258d6b85d xv48be c90889b2cf54cc78bd58e8c47d4eb791 xv48le 2c15c1254449ec5f9135ae61bdf4e1d5 -xyz12be 117d5a92f98bba9dcea367d8d731c80a -xyz12le baa4f90965b2964b7b1ecd2a8dbcce60 +xyz12be 1d86d11684be38cacce52f63fc0f20c5 +xyz12le 122fb7eea3575b4edbbd83219bc7af91 ya16be e2b490dc18f6ca3814fe9d68193ba263 ya16le 33b0e26f3c2e89c651345970474f6703 ya8 51a8dd297e35d40b06d3ebe8f4717895 diff --git a/tests/ref/fate/filter-pixfmts-field b/tests/ref/fate/filter-pixfmts-field index e7022d5bfd..6cec41fe39 100644 --- a/tests/ref/fate/filter-pixfmts-field +++ b/tests/ref/fate/filter-pixfmts-field @@ -117,8 +117,8 @@ xv36be bcc7bda2d0a5d43db4464af6a4cb5d65 xv36le ba99f258370f2a56993e8760e6b30194 xv48be 2abcd986a34789ba4310be3969020d0d xv48le f6f2e33f260f48334197538f3331f7bc -xyz12be 5f472c753927b9b672d9f54a4d50be2f -xyz12le 1c57f2d6fbc86123674620fe16762b70 +xyz12be aa529d2ea8ec254a6e54d90d64be0937 +xyz12le ad85650ceb61a71bb89acca7cd24c24e y210le 4c2fba1dc40322584977d15dd07c9146 y212le ac2a47c45187dd54d0f55293cbffd954 y216le e65b5bfae1b40edbbed2012e9cd45e31 diff --git a/tests/ref/fate/filter-pixfmts-fieldorder b/tests/ref/fate/filter-pixfmts-fieldorder index bbf9e39543..003a9ac5f7 100644 --- a/tests/ref/fate/filter-pixfmts-fieldorder +++ b/tests/ref/fate/filter-pixfmts-fieldorder @@ -106,8 +106,8 @@ xv36be 962386c88268f4382004c3a7a82c5eb8 xv36le bcceffc985aaa8414c4b8072aa0889bd xv48be 4d6e4004b03767f12df8bb4e76c98ddf xv48le 9e94d82461a2131063157ac0dbe9467b -xyz12be 4d1f54d3d5140b23a7ed8d6746e9c08e -xyz12le a12154aa9b0f61c6a76382a5515b9234 +xyz12be ec36fb7f51df4859b71e290c6a44b7b7 +xyz12le 413a52726d022bec91222a36f9e683cd y210le 22b1a02a39c4b325726bf8793bf1e8f2 y212le 2f08fb195b948056c844acb1eee8d649 y216le 360cb98ac80b13d3a8ec61c9f1ff3bac diff --git a/tests/ref/fate/filter-pixfmts-hflip b/tests/ref/fate/filter-pixfmts-hflip index c379b42d6f..75e3a566ea 100644 --- a/tests/ref/fate/filter-pixfmts-hflip +++ b/tests/ref/fate/filter-pixfmts-hflip @@ -114,8 +114,8 @@ xv36be 98f578df965eed369f46cb135e2d1345 xv36le e478b4b54698beb3ce1b9a2dd691d544 xv48be e030a2c7b1b600cfacb691b6e90c2e3d xv48le fbd7f8c65cd6fc9f9108dc9a1f977dc3 -xyz12be 4b778cc2db5060f76db855f7800de41d -xyz12le f39689517dbee5988a9cc94f1b0db438 +xyz12be 271a65e4bea9175cb9d7e2c0ea0ba14d +xyz12le a8273fe17f2a738f3fd7f457de5c1df4 ya16be e7665e62e476df4eb143420e57cc9ec2 ya16le 3a23b71db418b74e1cc304d7cd3e1989 ya8 4ad5920716de3d2fbbc49f95adb60345 diff --git a/tests/ref/fate/filter-pixfmts-il b/tests/ref/fate/filter-pixfmts-il index ce887db6f0..3f76be05b5 100644 --- a/tests/ref/fate/filter-pixfmts-il +++ b/tests/ref/fate/filter-pixfmts-il @@ -116,8 +116,8 @@ xv36be 3bbb949278ea55cc947ee03bd9c27c2d xv36le 102c0e817d375ddd6b2cfbb4262dec95 xv48be 4d7376651fb7b3e84d00abad6c785aad xv48le a1a8ff16d9a864568e5e557734bf3d6d -xyz12be aec98321799e590cc58aed1202da70a3 -xyz12le 7e54e36d02b73747c47574aa25e83d8a +xyz12be fa10b075452f6fe0b5825453d89eeb81 +xyz12le 5c0bd08982a5219266cd1d3026a08c52 y210le d4cf9b53cd7ff22f087743d483e88480 y212le d5a2b4677ddb4a3bc3e5cd5cbb20f426 y216le 9e44c6d76b09bcbe71738423b4b3d67a diff --git a/tests/ref/fate/filter-pixfmts-null b/tests/ref/fate/filter-pixfmts-null index 1c8218b66c..3993153352 100644 --- a/tests/ref/fate/filter-pixfmts-null +++ b/tests/ref/fate/filter-pixfmts-null @@ -117,8 +117,8 @@ xv36be 9f556ee59a672fd8725f0bb36ce3e4b0 xv36le e08dcbde02f1c28a3554f372ad1278e2 xv48be ce34993b4b4411bba1d852b9b86aa39e xv48le df913a7e61b162aa98303e5393e60c63 -xyz12be c4f3cb794f1c15770c2a8690f49e4395 -xyz12le 938885a1a9150b103adab1d3aefad5f6 +xyz12be c10b0f0f886ff1444d27cb6add490b77 +xyz12le e6739a863ccf9b26bf6991dc370b4f27 y210le 04e9487b6cce38e7531437e946cdd586 y212le 825768be8fe92708ae80be84855066ed y216le 0e99aeddfee304e72d525d72998d9e9b diff --git a/tests/ref/fate/filter-pixfmts-scale b/tests/ref/fate/filter-pixfmts-scale index ecc9a8c312..3a7b34ad96 100644 --- a/tests/ref/fate/filter-pixfmts-scale +++ b/tests/ref/fate/filter-pixfmts-scale @@ -117,8 +117,8 @@ xv36be 4d084adca0228d7750d1e2e877e0d79b xv36le de9c74e94dc19c828e1572aa283d8aca xv48be 9e58d1a045df100b0dec116e13be5b4e xv48le fd873d53609b2fbdfe99470f515a234c -xyz12be 681537982da2c5cfaa99912100d5a81d -xyz12le 17c835d55db8d8177b018f9d4461960d +xyz12be 0866f8e5493ea93f4523a9e873a14b1e +xyz12le d6990efe1c7141227054cbcda28ea6fb y210le 7c2aef142d88ab343ec01acd45f38466 y212le 39a3c0c843041ad4501b3107dd91ef17 y216le 17be2999e97d36b8ed903f07ef428c09 diff --git a/tests/ref/fate/filter-pixfmts-transpose b/tests/ref/fate/filter-pixfmts-transpose index 628c7652d5..300e616e04 100644 --- a/tests/ref/fate/filter-pixfmts-transpose +++ b/tests/ref/fate/filter-pixfmts-transpose @@ -104,8 +104,8 @@ xv36be 2261a0e3db5ee607d37f68d19704ae15 xv36le 9202133de91bf64c76ca27d5cd0c816a xv48be 14373b7fe123225689e76fe2ce43fb93 xv48le 319df9724a067c7b5efa215f9f54d127 -xyz12be fc838024ab1eebf3a400e8a4a1f980d9 -xyz12le 33ab866ecb98fe6d028123ea9906e9a6 +xyz12be 8ac923c86bd11a04b049d083d857d116 +xyz12le 77912a89e6525f6809d8c31fed87a439 ya16be 9bb39f9567d807be0fb8631dcfa8d5f8 ya16le b13453818b83c8dc2610975095393ac1 ya8 d4b7a62f80681fa44c977ff3a64f4ce4 diff --git a/tests/ref/fate/filter-pixfmts-vflip b/tests/ref/fate/filter-pixfmts-vflip index e79832a6a9..10f745bb9c 100644 --- a/tests/ref/fate/filter-pixfmts-vflip +++ b/tests/ref/fate/filter-pixfmts-vflip @@ -117,8 +117,8 @@ xv36be c0272372d3e1a59adb3931ee433a5d5b xv36le ffe6ab75ebc09134c3451f8f6ef0d501 xv48be bdfc3217ae456b370dbdcf4d52606a3f xv48le 53dbebab73a66539c04644ef56dc6bbb -xyz12be f0e4f326736c8158aeb89071e15f6688 -xyz12le c7817e4c8da785850fa3269aec12c971 +xyz12be 0f14b1f9cfa04d9e1c945dd5057f3175 +xyz12le e1b12cc0f304a5e62ac99ccf90f88756 y210le f8847bedd3ae6e1c0cf84a823f275e31 y212le c801725ae31e3b8f5be269359d49f191 y216le 985db498aedf3fb1c547ad07442b7258 diff --git a/tests/ref/pixfmt/gbrp-xyz12le b/tests/ref/pixfmt/gbrp-xyz12le index 7bffd86f93..c11f079d07 100644 --- a/tests/ref/pixfmt/gbrp-xyz12le +++ b/tests/ref/pixfmt/gbrp-xyz12le @@ -1,2 +1,2 @@ -8f95608cd59572ae0a5380da8b8518c6 *tests/data/pixfmt/gbrp-xyz12le.yuv +8ff49367a8420d70a01e284b68aa6205 *tests/data/pixfmt/gbrp-xyz12le.yuv 7603200 tests/data/pixfmt/gbrp-xyz12le.yuv diff --git a/tests/ref/pixfmt/gbrp10-xyz12le b/tests/ref/pixfmt/gbrp10-xyz12le index 58acebec6e..ed1cbe6416 100644 --- a/tests/ref/pixfmt/gbrp10-xyz12le +++ b/tests/ref/pixfmt/gbrp10-xyz12le @@ -1,2 +1,2 @@ -87e0d57bae18f4c69cf0594253a5e97c *tests/data/pixfmt/gbrp10-xyz12le.yuv +5b3787cc3abeb28ac2045da52ad08a10 *tests/data/pixfmt/gbrp10-xyz12le.yuv 15206400 tests/data/pixfmt/gbrp10-xyz12le.yuv diff --git a/tests/ref/pixfmt/gbrp12-xyz12le b/tests/ref/pixfmt/gbrp12-xyz12le index 7002d33771..0eab799353 100644 --- a/tests/ref/pixfmt/gbrp12-xyz12le +++ b/tests/ref/pixfmt/gbrp12-xyz12le @@ -1,2 +1,2 @@ -882edf8efc53ffa9eb63e87a5acb8194 *tests/data/pixfmt/gbrp12-xyz12le.yuv +66665b89e7e0ac71e6d3ee85300921ae *tests/data/pixfmt/gbrp12-xyz12le.yuv 15206400 tests/data/pixfmt/gbrp12-xyz12le.yuv diff --git a/tests/ref/pixfmt/nv24-xyz12le b/tests/ref/pixfmt/nv24-xyz12le index 8aada49347..76cd6b8b93 100644 --- a/tests/ref/pixfmt/nv24-xyz12le +++ b/tests/ref/pixfmt/nv24-xyz12le @@ -1,2 +1,2 @@ -890bbcd28ea3a06c315acb8c474215a0 *tests/data/pixfmt/nv24-xyz12le.yuv +dc43783d32e1035f30c006eaa9fef0da *tests/data/pixfmt/nv24-xyz12le.yuv 7603200 tests/data/pixfmt/nv24-xyz12le.yuv diff --git a/tests/ref/pixfmt/p410-xyz12le b/tests/ref/pixfmt/p410-xyz12le index 2fc2e6864a..9ef4001198 100644 --- a/tests/ref/pixfmt/p410-xyz12le +++ b/tests/ref/pixfmt/p410-xyz12le @@ -1,2 +1,2 @@ -ce3777038372083419a25923d9b6029f *tests/data/pixfmt/p410-xyz12le.yuv +a31b9e74db3a4d230e924283ba0b365b *tests/data/pixfmt/p410-xyz12le.yuv 15206400 tests/data/pixfmt/p410-xyz12le.yuv diff --git a/tests/ref/pixfmt/p412-xyz12le b/tests/ref/pixfmt/p412-xyz12le index 0815cbae13..abf6bfe66a 100644 --- a/tests/ref/pixfmt/p412-xyz12le +++ b/tests/ref/pixfmt/p412-xyz12le @@ -1,2 +1,2 @@ -7f1ac958f69ba454d23d667ecb4bc035 *tests/data/pixfmt/p412-xyz12le.yuv +23f380ee860ab3f6af50228d5ead1a2c *tests/data/pixfmt/p412-xyz12le.yuv 15206400 tests/data/pixfmt/p412-xyz12le.yuv diff --git a/tests/ref/pixfmt/rgb24-xyz12le b/tests/ref/pixfmt/rgb24-xyz12le index 6bd3308e5a..f0374d5728 100644 --- a/tests/ref/pixfmt/rgb24-xyz12le +++ b/tests/ref/pixfmt/rgb24-xyz12le @@ -1,2 +1,2 @@ -6c138c678af6e0002167d0b088cbc57a *tests/data/pixfmt/rgb24-xyz12le.yuv +c1b035b9c5438ae8307d94a855f3639e *tests/data/pixfmt/rgb24-xyz12le.yuv 7603200 tests/data/pixfmt/rgb24-xyz12le.yuv diff --git a/tests/ref/pixfmt/rgb48-xyz12le b/tests/ref/pixfmt/rgb48-xyz12le index ee4b6cc2f0..231f60a042 100644 --- a/tests/ref/pixfmt/rgb48-xyz12le +++ b/tests/ref/pixfmt/rgb48-xyz12le @@ -1,2 +1,2 @@ -449f3253f683ea30518dcd345524a080 *tests/data/pixfmt/rgb48-xyz12le.yuv +5013bb1fa0d6ceb6921110d719bd396c *tests/data/pixfmt/rgb48-xyz12le.yuv 15206400 tests/data/pixfmt/rgb48-xyz12le.yuv diff --git a/tests/ref/pixfmt/xyz12le b/tests/ref/pixfmt/xyz12le index fd11596b95..5555dcff64 100644 --- a/tests/ref/pixfmt/xyz12le +++ b/tests/ref/pixfmt/xyz12le @@ -1,2 +1,2 @@ -8c8f1b04b0fe5aab4fc4f0612b4c3c09 *tests/data/pixfmt/xyz12le.yuv +2e8a8e94dc351f2da89471a8afd87165 *tests/data/pixfmt/xyz12le.yuv 304128 tests/data/pixfmt/xyz12le.yuv diff --git a/tests/ref/pixfmt/yuv444p-xyz12le b/tests/ref/pixfmt/yuv444p-xyz12le index e3410a669d..91d4f7fc81 100644 --- a/tests/ref/pixfmt/yuv444p-xyz12le +++ b/tests/ref/pixfmt/yuv444p-xyz12le @@ -1,2 +1,2 @@ -35306788a7a59819bff4dade8c89ddff *tests/data/pixfmt/yuv444p-xyz12le.yuv +aa8bffbcda1f890d29d4b70b155a0bbd *tests/data/pixfmt/yuv444p-xyz12le.yuv 7603200 tests/data/pixfmt/yuv444p-xyz12le.yuv diff --git a/tests/ref/pixfmt/yuv444p10-xyz12le b/tests/ref/pixfmt/yuv444p10-xyz12le index 38c82d754f..fd63b1ab22 100644 --- a/tests/ref/pixfmt/yuv444p10-xyz12le +++ b/tests/ref/pixfmt/yuv444p10-xyz12le @@ -1,2 +1,2 @@ -b03201a536e152bff73cdbb9266ed948 *tests/data/pixfmt/yuv444p10-xyz12le.yuv +78ed7dcd55f9a9c73247d2abcdef36a7 *tests/data/pixfmt/yuv444p10-xyz12le.yuv 15206400 tests/data/pixfmt/yuv444p10-xyz12le.yuv diff --git a/tests/ref/pixfmt/yuv444p12-xyz12le b/tests/ref/pixfmt/yuv444p12-xyz12le index ebc9105afd..4d8985a075 100644 --- a/tests/ref/pixfmt/yuv444p12-xyz12le +++ b/tests/ref/pixfmt/yuv444p12-xyz12le @@ -1,2 +1,2 @@ -d9072d39396287f67eb38a1fec1abc6e *tests/data/pixfmt/yuv444p12-xyz12le.yuv +9d0d5fb133d1b303688d444b16b4bd5b *tests/data/pixfmt/yuv444p12-xyz12le.yuv 15206400 tests/data/pixfmt/yuv444p12-xyz12le.yuv -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
