From a5be0ecbfdab24632a10c8a6714844530f76d368 Mon Sep 17 00:00:00 2001 From: Lynne Date: Sun, 26 Oct 2025 23:36:33 +0100 Subject: [PATCH] swscale: add support for 10/12-bit grayscale MSB pixfmts --- libswscale/format.c | 8 ++++++++ libswscale/input.c | 4 ++++ libswscale/swscale_unscaled.c | 2 ++ tests/ref/fate/filter-pixdesc-gray10msbbe | 1 + tests/ref/fate/filter-pixdesc-gray10msble | 1 + tests/ref/fate/filter-pixdesc-gray12msbbe | 1 + tests/ref/fate/filter-pixdesc-gray12msble | 1 + 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-pad | 2 ++ tests/ref/fate/filter-pixfmts-scale | 4 ++++ tests/ref/fate/filter-pixfmts-transpose | 4 ++++ tests/ref/fate/filter-pixfmts-vflip | 4 ++++ 18 files changed, 60 insertions(+) create mode 100644 tests/ref/fate/filter-pixdesc-gray10msbbe create mode 100644 tests/ref/fate/filter-pixdesc-gray10msble create mode 100644 tests/ref/fate/filter-pixdesc-gray12msbbe create mode 100644 tests/ref/fate/filter-pixdesc-gray12msble diff --git a/libswscale/format.c b/libswscale/format.c index 9741688e98..d2befcf55f 100644 --- a/libswscale/format.c +++ b/libswscale/format.c @@ -91,6 +91,10 @@ static const LegacyFormatEntry legacy_format_entries[] = { [AV_PIX_FMT_GRAY14LE] = { 1, 1 }, [AV_PIX_FMT_GRAY16BE] = { 1, 1 }, [AV_PIX_FMT_GRAY16LE] = { 1, 1 }, + [AV_PIX_FMT_GRAY10MSBBE] = { 1, 1 }, + [AV_PIX_FMT_GRAY10MSBLE] = { 1, 1 }, + [AV_PIX_FMT_GRAY12MSBBE] = { 1, 1 }, + [AV_PIX_FMT_GRAY12MSBLE] = { 1, 1 }, [AV_PIX_FMT_YUV440P] = { 1, 1 }, [AV_PIX_FMT_YUVJ440P] = { 1, 1 }, [AV_PIX_FMT_YUV440P10LE] = { 1, 1 }, @@ -979,6 +983,10 @@ static int fmt_read_write(enum AVPixelFormat fmt, SwsReadWriteOp *rw_op, case AV_PIX_FMT_GRAY14LE: case AV_PIX_FMT_GRAY16BE: case AV_PIX_FMT_GRAY16LE: + case AV_PIX_FMT_GRAY10MSBBE: + case AV_PIX_FMT_GRAY10MSBLE: + case AV_PIX_FMT_GRAY12MSBBE: + case AV_PIX_FMT_GRAY12MSBLE: //case AV_PIX_FMT_GRAYF16BE: TODO //case AV_PIX_FMT_GRAYF16LE: //case AV_PIX_FMT_YAF16BE: diff --git a/libswscale/input.c b/libswscale/input.c index eb4eb3101e..fd19d1a257 100644 --- a/libswscale/input.c +++ b/libswscale/input.c @@ -2469,15 +2469,19 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, *alpToYV12 = bswap16Y_c; break; #endif + case AV_PIX_FMT_GRAY10MSBLE: case AV_PIX_FMT_YUV444P10MSBLE: *lumToYV12 = shf16_10LEToY_c; break; + case AV_PIX_FMT_GRAY12MSBLE: case AV_PIX_FMT_YUV444P12MSBLE: *lumToYV12 = shf16_12LEToY_c; break; + case AV_PIX_FMT_GRAY10MSBBE: case AV_PIX_FMT_YUV444P10MSBBE: *lumToYV12 = shf16_10BEToY_c; break; + case AV_PIX_FMT_GRAY12MSBBE: case AV_PIX_FMT_YUV444P12MSBBE: *lumToYV12 = shf16_12BEToY_c; break; diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c index 2c791e89fe..3f9a83dd60 100644 --- a/libswscale/swscale_unscaled.c +++ b/libswscale/swscale_unscaled.c @@ -2560,6 +2560,8 @@ void ff_get_unscaled_swscale(SwsInternal *c) IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GRAY12) || IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GRAY14) || IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GRAY16) || + IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GRAY10MSB) || + IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GRAY12MSB) || IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YA16) || IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_AYUV64) || IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP9) || diff --git a/tests/ref/fate/filter-pixdesc-gray10msbbe b/tests/ref/fate/filter-pixdesc-gray10msbbe new file mode 100644 index 0000000000..c5a3c0a5ca --- /dev/null +++ b/tests/ref/fate/filter-pixdesc-gray10msbbe @@ -0,0 +1 @@ +pixdesc-gray10msbbe 30925ffca4894232df5b2b7d96dcfe54 diff --git a/tests/ref/fate/filter-pixdesc-gray10msble b/tests/ref/fate/filter-pixdesc-gray10msble new file mode 100644 index 0000000000..be3e7b04d8 --- /dev/null +++ b/tests/ref/fate/filter-pixdesc-gray10msble @@ -0,0 +1 @@ +pixdesc-gray10msble 93c7eb73cc0021262ab6fb984789a358 diff --git a/tests/ref/fate/filter-pixdesc-gray12msbbe b/tests/ref/fate/filter-pixdesc-gray12msbbe new file mode 100644 index 0000000000..828ba56e25 --- /dev/null +++ b/tests/ref/fate/filter-pixdesc-gray12msbbe @@ -0,0 +1 @@ +pixdesc-gray12msbbe 7b74d4e211ec8ff87c94c4a7576dc652 diff --git a/tests/ref/fate/filter-pixdesc-gray12msble b/tests/ref/fate/filter-pixdesc-gray12msble new file mode 100644 index 0000000000..8fa84b4e3f --- /dev/null +++ b/tests/ref/fate/filter-pixdesc-gray12msble @@ -0,0 +1 @@ +pixdesc-gray12msble abc39dc30e8c9f2161e238e85f0db801 diff --git a/tests/ref/fate/filter-pixfmts-copy b/tests/ref/fate/filter-pixfmts-copy index d42e2f6b33..1e08ee60b1 100644 --- a/tests/ref/fate/filter-pixfmts-copy +++ b/tests/ref/fate/filter-pixfmts-copy @@ -51,8 +51,12 @@ gbrpf32le f3aff67024db002d8d985c775ec8c235 gray 188590b1231afd231ea910815aef2b25 gray10be 0804e8620fcd78599e3df33cb83652aa gray10le 705e51fb783ae8167498d09748e44bd2 +gray10msbbe a4eddf6055d0507c6bc411a788e28c1d +gray10msble 19c68a45da74b833993a3120fda93ca0 gray12be 2163197b5975c0c2900ac7c3f56f45f1 gray12le 5bf2ca7795dd0524b253aee20f660e73 +gray12msbbe b6a952019c10cc6bd655850c4d226d77 +gray12msble b46e317ee809b44a25707cea426f2e8e gray14be dccc8bde352b6c8ae65ca2832a383381 gray14le 56c9e613b09f00a5940c0bf2e938c02e gray16be 47a6889ea2dcff9164888a94cccff4de diff --git a/tests/ref/fate/filter-pixfmts-crop b/tests/ref/fate/filter-pixfmts-crop index a86113c631..ca2e4a45cf 100644 --- a/tests/ref/fate/filter-pixfmts-crop +++ b/tests/ref/fate/filter-pixfmts-crop @@ -51,8 +51,12 @@ gbrpf32le b930a6185e3ffb23785d57ab1f519bc3 gray 0d70b54b4b888ec4dbd89713620ac1ee gray10be a97f60928c553b9d0e8e44b69ec2970d gray10le bff59b6df8751b5e958d0cd8deb3c31a +gray10msbbe ceedda0baebcc04f3614aa73bddaef89 +gray10msble a06031ad148e90b144438ec2bb287f5e gray12be 5080520ac513da1be65b353a3c208a99 gray12le 016877eaccd8490fd281b08b582bd832 +gray12msbbe 08e6bcc90b08022fae116286a9dde008 +gray12msble 1c5c7e0cc20c622ed7c241cbc4612527 gray14be c0a8c2f0937438d8a54625d90cc44a12 gray14le 222c5d59a7482e060f0fa117e658c239 gray16be a134e7154d1ee810e50ea5887f784cf0 diff --git a/tests/ref/fate/filter-pixfmts-field b/tests/ref/fate/filter-pixfmts-field index c05dba55f6..00ba61e49a 100644 --- a/tests/ref/fate/filter-pixfmts-field +++ b/tests/ref/fate/filter-pixfmts-field @@ -51,8 +51,12 @@ gbrpf32le 64722b723252d359858136cb00079636 gray 57fd8e6e00f6be8752726005974cce1b gray10be 083a7931fea847a4d8b23d38f989a836 gray10le 1b08650e7c44f8517dd3f37044930729 +gray10msbbe 7d02d13a358e7fc2a8960a9eb43dccb7 +gray10msble 93fb6bd19152b7ea2cb1e3d023807382 gray12be c02b7fef120c03bf0fddadb5b63a1373 gray12le ac129433ead39c0c9f881979345a434d +gray12msbbe 583163bfeab26b8a85525113e1e07884 +gray12msble 239e90619f531766ee8c3f9bd1ff892b gray14be a5c8b034a5867ba91691fbd68cea2864 gray14le 39c6b08bd0d934005ace54a2e5821e8e gray16be 3f446db33f6dea74ac1d9d6962511c4e diff --git a/tests/ref/fate/filter-pixfmts-fieldorder b/tests/ref/fate/filter-pixfmts-fieldorder index 4c8cffca08..2cdfa25236 100644 --- a/tests/ref/fate/filter-pixfmts-fieldorder +++ b/tests/ref/fate/filter-pixfmts-fieldorder @@ -51,8 +51,12 @@ gbrpf32le 070140993c538b996890b983c0a010be gray d96e0f1c73d3f0b9506d691b5cd36c73 gray10be 3ccbda141912b7cace81b2145005032e gray10le e27718bf9caa54b7b3313c15cec88f20 +gray10msbbe d6c231b3e0440fc15aaca387db37568a +gray10msble fcc78b29afede484ee5bd3db6557be6c gray12be c892966f917891dbe2badf8281486710 gray12le 48b193c9afe677304c027aca3b431411 +gray12msbbe 61c0ccc1954071e8feaab067aa77b7ea +gray12msble 30d1377c54652c274e8fb79361da23ef gray14be ea1ea4bece62708ba47a7ebbfdd4437e gray14le beb4536b196e50a6fb5deb07580a803c gray16be 28b2b79919be3a0b65c0825eb3e98d92 diff --git a/tests/ref/fate/filter-pixfmts-hflip b/tests/ref/fate/filter-pixfmts-hflip index b47087d1f6..c65d926b76 100644 --- a/tests/ref/fate/filter-pixfmts-hflip +++ b/tests/ref/fate/filter-pixfmts-hflip @@ -51,8 +51,12 @@ gbrpf32le cbb650b78c412b10a1070840fefd6d59 gray 8bd4ece1dbf89b20ee785e0515356e07 gray10be 1daf5c1face37d8724a65e905941dcb8 gray10le 07c5139f97db9d49729f2ea6e77dcedf +gray10msbbe 7211b8202caf246d835e894b4304ec24 +gray10msble 1acb45f2119e6be4226f9a1803da37b1 gray12be 2ba74a3890309bb111045e2aedcd2e07 gray12le 81af0124c72271fd316564d86fcd3f2b +gray12msbbe 48df956f353587c9f0dd779e16ff1f97 +gray12msble 5ba2750ac3d4f3ad2b87695f4a21c3ae gray14be 87981e992522a611b28ab5a0ba0ddcb1 gray14le 95313b7de3f1f2a1471447e57932ada1 gray16be 4b87b19d657cb45de7f2fe3143d79235 diff --git a/tests/ref/fate/filter-pixfmts-il b/tests/ref/fate/filter-pixfmts-il index 490995bbf0..268593a54d 100644 --- a/tests/ref/fate/filter-pixfmts-il +++ b/tests/ref/fate/filter-pixfmts-il @@ -51,8 +51,12 @@ gbrpf32le 6514fcf1804c375f4d560d4f08dbacb7 gray 52ae18648161ac43144f5c9cd2127786 gray10be b2c861887056fe39d2fe90379d80e535 gray10le f7022c60ad8cb9a9d5f556ad7c7fadaf +gray10msbbe 3055f2b1079ebfa36bdd89644c19c40f +gray10msble 5b26d8f9ef1e2ad62520e33c6eeda05b gray12be c733c108acee8389ae9dfc6262c2bd8b gray12le 870d5c2b37d13c25689e1e268749f7a9 +gray12msbbe 63d3eef70eb6cfa6af65449b1da8d44d +gray12msble c57839969fb73d6e30e7e486f1f2f2be gray14be 230bc18fa759c249573c3dbda2d27173 gray14le 9dc39323146761e60f5517405e5e40b3 gray16be c31bde624d1a2e46eda99a1b982de7aa diff --git a/tests/ref/fate/filter-pixfmts-null b/tests/ref/fate/filter-pixfmts-null index d42e2f6b33..1e08ee60b1 100644 --- a/tests/ref/fate/filter-pixfmts-null +++ b/tests/ref/fate/filter-pixfmts-null @@ -51,8 +51,12 @@ gbrpf32le f3aff67024db002d8d985c775ec8c235 gray 188590b1231afd231ea910815aef2b25 gray10be 0804e8620fcd78599e3df33cb83652aa gray10le 705e51fb783ae8167498d09748e44bd2 +gray10msbbe a4eddf6055d0507c6bc411a788e28c1d +gray10msble 19c68a45da74b833993a3120fda93ca0 gray12be 2163197b5975c0c2900ac7c3f56f45f1 gray12le 5bf2ca7795dd0524b253aee20f660e73 +gray12msbbe b6a952019c10cc6bd655850c4d226d77 +gray12msble b46e317ee809b44a25707cea426f2e8e gray14be dccc8bde352b6c8ae65ca2832a383381 gray14le 56c9e613b09f00a5940c0bf2e938c02e gray16be 47a6889ea2dcff9164888a94cccff4de diff --git a/tests/ref/fate/filter-pixfmts-pad b/tests/ref/fate/filter-pixfmts-pad index 3c9fe6746e..a57069f61f 100644 --- a/tests/ref/fate/filter-pixfmts-pad +++ b/tests/ref/fate/filter-pixfmts-pad @@ -22,7 +22,9 @@ gbrp16le a6156d1a37e05ee621b2a343fb158bd6 gbrp9le 9e827f438e081d334a6cae7e282698b0 gray 2b9652a8b136316fada371d03ee252bc gray10le 47fb6bf7784e8bd70b49f417b2fa28b0 +gray10msble 925e45f177945f1e899ef3a3d90675bd gray12le 3bf76ed4fa5ba0955ab1157e20b26ef4 +gray12msble 7f949f0284ebc73ff33319cd692276dc gray14le c3750188ede607e733065b7f3b17f548 gray16le 4347c5ca559a06948c1e7e7c2f06657d gray9le 99f825e62d5786901dba9abc88878ffb diff --git a/tests/ref/fate/filter-pixfmts-scale b/tests/ref/fate/filter-pixfmts-scale index 66d22e0484..87752c6c4f 100644 --- a/tests/ref/fate/filter-pixfmts-scale +++ b/tests/ref/fate/filter-pixfmts-scale @@ -51,8 +51,12 @@ gbrpf32le f6fcfa78926bc1acdf40675e015491fd gray 221201cc7cfc4964eacd8b3e426fd276 gray10be d16a05571246e94b5117004c5276cb7a gray10le 0ef4a201ffc7197b316ad47dd81dff45 +gray10msbbe 29277ef1cad2b4db2cb386dee7c49ba9 +gray10msble 0b43ba1306bf01a4446df1035f634b21 gray12be 369e362ecb31db507309589ca4f51d8c gray12le c463d00d75bf491f641aee07c8fefd0e +gray12msbbe a1a078cb0fd5d48378544e74a426915d +gray12msble 093ac5db3e7e4d809cadece81d77f916 gray14be 4756e24785dc8c04017a847abb95e6a9 gray14le 9df39c65e85228c479766427db23609f gray16be 386ac06726336ff35876cb84152dcea1 diff --git a/tests/ref/fate/filter-pixfmts-transpose b/tests/ref/fate/filter-pixfmts-transpose index 80b05dbb05..8f36938517 100644 --- a/tests/ref/fate/filter-pixfmts-transpose +++ b/tests/ref/fate/filter-pixfmts-transpose @@ -51,8 +51,12 @@ gbrpf32le 3daead396f5bbd6dc3e9d729f6dd7e4a gray c5f8bc6636fd15dbc57deb4bba1e7379 gray10be 502e8c53160bb81e319f7f03f3d7fba7 gray10le 0fe4b6d29e7602bb9e49a1cd6c32cf86 +gray10msbbe b193a8420edd276201554d37ba101149 +gray10msble 3a557b1e464bf8bd6dfa45e005af4f3c gray12be c7d7eac33931374348a0337d324c3128 gray12le eebfb191ab4ba2a967e8bed120402b09 +gray12msbbe 9fa97b40c7f892bb0424db85f14a36b8 +gray12msble e56b3d5fda4ca8cddd492ec3d0a40af1 gray14be 009e0b4b4e9451b965fccfe5e7cd6538 gray14le 8a6ca251b3508829bdd8471f05fb3e77 gray16be b1810df6c6d9503c4c3199f11329498d diff --git a/tests/ref/fate/filter-pixfmts-vflip b/tests/ref/fate/filter-pixfmts-vflip index 6b8c888b9a..2984864e91 100644 --- a/tests/ref/fate/filter-pixfmts-vflip +++ b/tests/ref/fate/filter-pixfmts-vflip @@ -51,8 +51,12 @@ gbrpf32le a60eadee900a27d4e1fb5d7ac0b0e901 gray 41811422d5819ed69389357294384c10 gray10be 8a49315bcba5cdaffe7ef55cdb5f5148 gray10le dd71c7da4d205a081f54e46e76b6a1ed +gray10msbbe 1071c0fc427e36d7c268ed3804854433 +gray10msble 2d21481e526c8a849d9158f4946ab927 gray12be ca43b3f79c517a41c19164c417baa28d gray12le 86166fd2485f65867eb8be3b5447e921 +gray12msbbe e95a661293e4d549e1f2c77d38a0a09a +gray12msble 40ebc0d5e1572bfe3f77ac4c66858394 gray14be 57bde02df9aa6156f973c9e0ab60663a gray14le 2b76ab2c6de4a9a1b4e5d49e8b537a6d gray16be 8e0f23aa0e5736f4ae8e08273201c854