From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 095F34E3BB for ; Wed, 9 Jul 2025 12:11:53 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 35BAE68F628; Wed, 9 Jul 2025 15:11:51 +0300 (EEST) Received: from btbn.de (btbn.de [144.76.60.213]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 046D368E212 for ; Wed, 9 Jul 2025 15:11:45 +0300 (EEST) Received: from [authenticated] by btbn.de (Postfix) with ESMTPSA id 6B76B27FFCCBE for ; Wed, 09 Jul 2025 14:11:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rothenpieler.org; s=mail; t=1752063104; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wesn2cHTLf4cnejKuiDDaKCUFed1EU3CMWUMHdaD3yw=; b=A7LsspLaM8R4cLtkmyiTXLZ/CiDDzmilYc1ujPxpfR6f6aWuB2GYWDz8ZhCDPZNWqt3Wnv w9USw/LdAHlha0LYijAhTDgORQeX74rmry2W10V7XLgZfYERdWEM0FjEWAGGpKZeyYrVI1 XiI6xJ/5jSJuEhjycgGhu/jWF+PSSR20Ar6SQY7z2Pn1vM9JHmfEuVtrx3M6dhOubskacH +JV6ZyIDhDkF2H/trDJp1Pbs1lQbXtpgktArQsO8Fz11lVFDTiR4ZQtWFeRC7YuLtJ/asn UfnzEjNt5pM0E4fZUIHecTt7zE46EsVs2OmoMxucoI259LiL3YYxv+ro2C3Vng== Message-ID: Date: Wed, 9 Jul 2025 14:12:09 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250704221811.754517-1-timo@rothenpieler.org> <20250704221811.754517-2-timo@rothenpieler.org> Content-Language: en-US, de-DE From: Timo Rothenpieler In-Reply-To: <20250704221811.754517-2-timo@rothenpieler.org> Subject: Re: [FFmpeg-devel] [PATCH 2/2] swscale: add support for new 10/12 bit MSB formats X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 05/07/2025 00:17, Timo Rothenpieler wrote: > --- > libswscale/format.c | 8 + > libswscale/input.c | 240 +++++++++++++++---- > libswscale/loongarch/output_lasx.c | 1 + > libswscale/loongarch/output_lsx.c | 1 + > libswscale/output.c | 117 +++++++++ > libswscale/ppc/swscale_altivec.c | 2 +- > libswscale/ppc/swscale_vsx.c | 2 +- > libswscale/swscale_unscaled.c | 6 +- > libswscale/tests/floatimg_cmp.c | 2 + > libswscale/utils.c | 2 + > libswscale/x86/swscale.c | 4 +- > tests/ref/fate/filter-pixdesc-gbrp10msbbe | 1 + > tests/ref/fate/filter-pixdesc-gbrp10msble | 1 + > tests/ref/fate/filter-pixdesc-gbrp12msbbe | 1 + > tests/ref/fate/filter-pixdesc-gbrp12msble | 1 + > tests/ref/fate/filter-pixdesc-yuv444p10msbbe | 1 + > tests/ref/fate/filter-pixdesc-yuv444p10msble | 1 + > tests/ref/fate/filter-pixdesc-yuv444p12msbbe | 1 + > tests/ref/fate/filter-pixdesc-yuv444p12msble | 1 + > tests/ref/fate/filter-pixfmts-copy | 8 + > tests/ref/fate/filter-pixfmts-crop | 8 + > tests/ref/fate/filter-pixfmts-field | 8 + > tests/ref/fate/filter-pixfmts-fieldorder | 8 + > tests/ref/fate/filter-pixfmts-hflip | 8 + > tests/ref/fate/filter-pixfmts-il | 8 + > tests/ref/fate/filter-pixfmts-null | 8 + > tests/ref/fate/filter-pixfmts-pad | 4 + > tests/ref/fate/filter-pixfmts-scale | 8 + > tests/ref/fate/filter-pixfmts-transpose | 8 + > tests/ref/fate/filter-pixfmts-vflip | 8 + > tests/ref/fate/imgutils | 16 ++ > tests/ref/fate/sws-floatimg-cmp | 16 ++ > tests/ref/fate/sws-pixdesc-query | 48 ++++ > 33 files changed, 500 insertions(+), 57 deletions(-) > create mode 100644 tests/ref/fate/filter-pixdesc-gbrp10msbbe > create mode 100644 tests/ref/fate/filter-pixdesc-gbrp10msble > create mode 100644 tests/ref/fate/filter-pixdesc-gbrp12msbbe > create mode 100644 tests/ref/fate/filter-pixdesc-gbrp12msble > create mode 100644 tests/ref/fate/filter-pixdesc-yuv444p10msbbe > create mode 100644 tests/ref/fate/filter-pixdesc-yuv444p10msble > create mode 100644 tests/ref/fate/filter-pixdesc-yuv444p12msbbe > create mode 100644 tests/ref/fate/filter-pixdesc-yuv444p12msble > > diff --git a/libswscale/format.c b/libswscale/format.c > index e4c1348b90..53162f8756 100644 > --- a/libswscale/format.c > +++ b/libswscale/format.c > @@ -157,6 +157,10 @@ static const FormatEntry format_entries[] = { > [AV_PIX_FMT_YUV444P12LE] = { 1, 1 }, > [AV_PIX_FMT_YUV444P14BE] = { 1, 1 }, > [AV_PIX_FMT_YUV444P14LE] = { 1, 1 }, > + [AV_PIX_FMT_YUV444P10MSBBE] = { 1, 1 }, > + [AV_PIX_FMT_YUV444P10MSBLE] = { 1, 1 }, > + [AV_PIX_FMT_YUV444P12MSBBE] = { 1, 1 }, > + [AV_PIX_FMT_YUV444P12MSBLE] = { 1, 1 }, > [AV_PIX_FMT_GBRP] = { 1, 1 }, > [AV_PIX_FMT_GBRP9LE] = { 1, 1 }, > [AV_PIX_FMT_GBRP9BE] = { 1, 1 }, > @@ -164,8 +168,12 @@ static const FormatEntry format_entries[] = { > [AV_PIX_FMT_GBRP10BE] = { 1, 1 }, > [AV_PIX_FMT_GBRAP10LE] = { 1, 1 }, > [AV_PIX_FMT_GBRAP10BE] = { 1, 1 }, > + [AV_PIX_FMT_GBRP10MSBLE] = { 1, 1 }, > + [AV_PIX_FMT_GBRP10MSBBE] = { 1, 1 }, > [AV_PIX_FMT_GBRP12LE] = { 1, 1 }, > [AV_PIX_FMT_GBRP12BE] = { 1, 1 }, > + [AV_PIX_FMT_GBRP12MSBLE] = { 1, 1 }, > + [AV_PIX_FMT_GBRP12MSBBE] = { 1, 1 }, > [AV_PIX_FMT_GBRAP12LE] = { 1, 1 }, > [AV_PIX_FMT_GBRAP12BE] = { 1, 1 }, > [AV_PIX_FMT_GBRP14LE] = { 1, 1 }, > diff --git a/libswscale/input.c b/libswscale/input.c > index 119e490cd3..32a0214ddf 100644 > --- a/libswscale/input.c > +++ b/libswscale/input.c > @@ -1006,6 +1006,64 @@ p01x_wrapper(p010, 6) > p01x_wrapper(p012, 4) > p01x_uv_wrapper(p016, 0) > > +#define shf16_uv_wrapper(shift) \ > + static void shf16_ ## shift ## LEToUV_c(uint8_t *dstU, \ > + uint8_t *dstV, \ > + const uint8_t *unused0, \ > + const uint8_t *src1, \ > + const uint8_t *src2, int width, \ > + uint32_t *unused, void *opq) \ > + { \ > + int i; \ > + for (i = 0; i < width; i++) { \ > + AV_WN16(dstU + i * 2, AV_RL16(src1 + i * 2) >> (16 - shift)); \ > + AV_WN16(dstV + i * 2, AV_RL16(src2 + i * 2) >> (16 - shift)); \ > + } \ > + } \ > + \ > + static void shf16_ ## shift ## BEToUV_c(uint8_t *dstU, \ > + uint8_t *dstV, \ > + const uint8_t *unused0, \ > + const uint8_t *src1, \ > + const uint8_t *src2, int width, \ > + uint32_t *unused, void *opq) \ > + { \ > + int i; \ > + for (i = 0; i < width; i++) { \ > + AV_WN16(dstU + i * 2, AV_RB16(src1 + i * 2) >> (16 - shift)); \ > + AV_WN16(dstV + i * 2, AV_RB16(src2 + i * 2) >> (16 - shift)); \ > + } \ > + } > + > +#define shf16_wrapper(shift) \ > + static void shf16_ ## shift ## LEToY_c(uint8_t *dst, \ > + const uint8_t *src, \ > + const uint8_t *unused1, \ > + const uint8_t *unused2, int width, \ > + uint32_t *unused, void *opq) \ > + { \ > + int i; \ > + for (i = 0; i < width; i++) { \ > + AV_WN16(dst + i * 2, AV_RL16(src + i * 2) >> (16 - shift)); \ > + } \ > + } \ > + \ > + static void shf16_ ## shift ## BEToY_c(uint8_t *dst, \ > + const uint8_t *src, \ > + const uint8_t *unused1, \ > + const uint8_t *unused2, int width, \ > + uint32_t *unused, void *opq) \ > + { \ > + int i; \ > + for (i = 0; i < width; i++) { \ > + AV_WN16(dst + i * 2, AV_RB16(src + i * 2) >> (16 - shift)); \ > + } \ > + } \ > + shf16_uv_wrapper(shift) > + > +shf16_wrapper(10) > +shf16_wrapper(12) > + > static void bgr24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, > int width, uint32_t *rgb2yuv, void *opq) > { > @@ -1153,56 +1211,66 @@ static void planar_rgb_to_uv(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[ > > #define rdpx(src) \ > (is_be ? AV_RB16(src) : AV_RL16(src)) > -static av_always_inline void planar_rgb16_to_y(uint8_t *_dst, const uint8_t *_src[4], > - int width, int bpc, int is_be, int32_t *rgb2yuv) > -{ > - int i; > - const uint16_t **src = (const uint16_t **)_src; > - uint16_t *dst = (uint16_t *)_dst; > - int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; > - int shift = bpc < 16 ? bpc : 14; > - for (i = 0; i < width; i++) { > - int g = rdpx(src[0] + i); > - int b = rdpx(src[1] + i); > - int r = rdpx(src[2] + i); > > - dst[i] = (ry*r + gy*g + by*b + (16 << (RGB2YUV_SHIFT + bpc - 8)) + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); > - } > -} > - > -static av_always_inline void planar_rgb16_to_a(uint8_t *_dst, const uint8_t *_src[4], > - int width, int bpc, int is_be, int32_t *rgb2yuv) > -{ > - int i; > - const uint16_t **src = (const uint16_t **)_src; > - uint16_t *dst = (uint16_t *)_dst; > - int shift = bpc < 16 ? bpc : 14; > - > - for (i = 0; i < width; i++) { > - dst[i] = rdpx(src[3] + i) << (14 - shift); > - } > -} > - > -static av_always_inline void planar_rgb16_to_uv(uint8_t *_dstU, uint8_t *_dstV, > - const uint8_t *_src[4], int width, > - int bpc, int is_be, int32_t *rgb2yuv) > -{ > - int i; > - const uint16_t **src = (const uint16_t **)_src; > - uint16_t *dstU = (uint16_t *)_dstU; > - uint16_t *dstV = (uint16_t *)_dstV; > - int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX]; > - int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX]; > - int shift = bpc < 16 ? bpc : 14; > - for (i = 0; i < width; i++) { > - int g = rdpx(src[0] + i); > - int b = rdpx(src[1] + i); > - int r = rdpx(src[2] + i); > +#define shifted_planar_rgb16(rdpx_shift) \ > + static av_always_inline void planar_rgb16_s ## rdpx_shift ## _to_y(uint8_t *_dst, const uint8_t *_src[4], \ > + int width, int bpc, int is_be, int32_t *rgb2yuv) \ > + { \ > + int i; \ > + const uint16_t **src = (const uint16_t **)_src; \ > + uint16_t *dst = (uint16_t *)_dst; \ > + int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; \ > + int shift = bpc < 16 ? bpc : 14; \ > + for (i = 0; i < width; i++) { \ > + int g = rdpx(src[0] + i) >> (16 - rdpx_shift); \ > + int b = rdpx(src[1] + i) >> (16 - rdpx_shift); \ > + int r = rdpx(src[2] + i) >> (16 - rdpx_shift); \ > + \ > + dst[i] = (ry*r + gy*g + by*b + (16 << (RGB2YUV_SHIFT + bpc - 8)) \ > + + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); \ > + } \ > + } \ > + \ > + static av_always_inline void planar_rgb16_s ## rdpx_shift ## _to_a(uint8_t *_dst, const uint8_t *_src[4], \ > + int width, int bpc, int is_be, int32_t *rgb2yuv) \ > + { \ > + int i; \ > + const uint16_t **src = (const uint16_t **)_src; \ > + uint16_t *dst = (uint16_t *)_dst; \ > + int shift = (bpc < 16 ? bpc : 14) + 16 - rdpx_shift; \ > + \ > + for (i = 0; i < width; i++) { \ > + dst[i] = rdpx(src[3] + i) << (14 - shift); \ > + } \ > + } \ > + \ > + static av_always_inline void planar_rgb16_s ## rdpx_shift ## _to_uv(uint8_t *_dstU, uint8_t *_dstV, \ > + const uint8_t *_src[4], int width, \ > + int bpc, int is_be, int32_t *rgb2yuv) \ > + { \ > + int i; \ > + const uint16_t **src = (const uint16_t **)_src; \ > + uint16_t *dstU = (uint16_t *)_dstU; \ > + uint16_t *dstV = (uint16_t *)_dstV; \ > + int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX]; \ > + int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX]; \ > + int shift = bpc < 16 ? bpc : 14; \ > + for (i = 0; i < width; i++) { \ > + int g = rdpx(src[0] + i) >> (16 - rdpx_shift); \ > + int b = rdpx(src[1] + i) >> (16 - rdpx_shift); \ > + int r = rdpx(src[2] + i) >> (16 - rdpx_shift); \ > + \ > + dstU[i] = (ru*r + gu*g + bu*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) \ > + + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); \ > + dstV[i] = (rv*r + gv*g + bv*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) \ > + + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); \ > + } \ > + } > + > +shifted_planar_rgb16(16) > +shifted_planar_rgb16(12) > +shifted_planar_rgb16(10) > > - dstU[i] = (ru*r + gu*g + bu*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); > - dstV[i] = (rv*r + gv*g + bv*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); > - } > -} > #undef rdpx > > #define rdpx(src) (is_be ? av_int2float(AV_RB32(src)): av_int2float(AV_RL32(src))) > @@ -1334,13 +1402,13 @@ static av_always_inline void read_yaf32_alpha_c(uint8_t *_dst, const uint8_t *_s > static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \ > int w, int32_t *rgb2yuv, void *opq) \ > { \ > - planar_rgb16_to_y(dst, src, w, nbits, endian, rgb2yuv); \ > + planar_rgb16_s16_to_y(dst, src, w, nbits, endian, rgb2yuv); \ > } \ > static void planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \ > const uint8_t *src[4], int w, int32_t *rgb2yuv, \ > void *opq) \ > { \ > - planar_rgb16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \ > + planar_rgb16_s16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \ > } \ > > #define rgb9plus_planar_transparency_funcs(nbits) \ > @@ -1348,19 +1416,36 @@ static void planar_rgb##nbits##le_to_a(uint8_t *dst, const uint8_t *src[4], \ > int w, int32_t *rgb2yuv, \ > void *opq) \ > { \ > - planar_rgb16_to_a(dst, src, w, nbits, 0, rgb2yuv); \ > + planar_rgb16_s16_to_a(dst, src, w, nbits, 0, rgb2yuv); \ > } \ > static void planar_rgb##nbits##be_to_a(uint8_t *dst, const uint8_t *src[4], \ > int w, int32_t *rgb2yuv, \ > void *opq) \ > { \ > - planar_rgb16_to_a(dst, src, w, nbits, 1, rgb2yuv); \ > + planar_rgb16_s16_to_a(dst, src, w, nbits, 1, rgb2yuv); \ > +} > + > +#define rgb9plus_msb_planar_funcs_endian(nbits, endian_name, endian) \ > +static void msb_planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \ > + int w, int32_t *rgb2yuv, void *opq) \ > +{ \ > + planar_rgb16_s##nbits##_to_y(dst, src, w, nbits, endian, rgb2yuv); \ > +} \ > +static void msb_planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \ > + const uint8_t *src[4], int w, int32_t *rgb2yuv, \ > + void *opq) \ > +{ \ > + planar_rgb16_s##nbits##_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \ > } > > #define rgb9plus_planar_funcs(nbits) \ > rgb9plus_planar_funcs_endian(nbits, le, 0) \ > rgb9plus_planar_funcs_endian(nbits, be, 1) > > +#define rgb9plus_msb_planar_funcs(nbits) \ > + rgb9plus_msb_planar_funcs_endian(nbits, le, 0) \ > + rgb9plus_msb_planar_funcs_endian(nbits, be, 1) > + > rgb9plus_planar_funcs(9) > rgb9plus_planar_funcs(10) > rgb9plus_planar_funcs(12) > @@ -1372,6 +1457,9 @@ rgb9plus_planar_transparency_funcs(12) > rgb9plus_planar_transparency_funcs(14) > rgb9plus_planar_transparency_funcs(16) > > +rgb9plus_msb_planar_funcs(10) > +rgb9plus_msb_planar_funcs(12) > + > #define rgbf32_funcs_endian(endian_name, endian) \ > static void planar_rgbf32##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \ > int w, int32_t *rgb2yuv, void *opq) \ > @@ -1786,6 +1874,12 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, > case AV_PIX_FMT_GBRPF16LE: > *readChrPlanar = planar_rgbf16le_to_uv; > break; > + case AV_PIX_FMT_GBRP10MSBLE: > + *readChrPlanar = msb_planar_rgb10le_to_uv; > + break; > + case AV_PIX_FMT_GBRP12MSBLE: > + *readChrPlanar = msb_planar_rgb12le_to_uv; > + break; > case AV_PIX_FMT_GBRP9BE: > *readChrPlanar = planar_rgb9be_to_uv; > break; > @@ -1813,6 +1907,12 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, > case AV_PIX_FMT_GBRPF16BE: > *readChrPlanar = planar_rgbf16be_to_uv; > break; > + case AV_PIX_FMT_GBRP10MSBBE: > + *readChrPlanar = msb_planar_rgb10be_to_uv; > + break; > + case AV_PIX_FMT_GBRP12MSBBE: > + *readChrPlanar = msb_planar_rgb12be_to_uv; > + break; > case AV_PIX_FMT_GBRAP: > case AV_PIX_FMT_GBRP: > *readChrPlanar = planar_rgb_to_uv; > @@ -1882,6 +1982,18 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, > *chrToYV12 = bswap16UV_c; > break; > #endif > + case AV_PIX_FMT_YUV444P10MSBLE: > + *chrToYV12 = shf16_10LEToUV_c; > + break; > + case AV_PIX_FMT_YUV444P12MSBLE: > + *chrToYV12 = shf16_12LEToUV_c; > + break; > + case AV_PIX_FMT_YUV444P10MSBBE: > + *chrToYV12 = shf16_10BEToUV_c; > + break; > + case AV_PIX_FMT_YUV444P12MSBBE: > + *chrToYV12 = shf16_12BEToUV_c; > + break; > case AV_PIX_FMT_VUYA: > case AV_PIX_FMT_VUYX: > *chrToYV12 = read_vuyx_UV_c; > @@ -2208,6 +2320,12 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, > case AV_PIX_FMT_GBRPF16LE: > *readLumPlanar = planar_rgbf16le_to_y; > break; > + case AV_PIX_FMT_GBRP10MSBLE: > + *readLumPlanar = msb_planar_rgb10le_to_y; > + break; > + case AV_PIX_FMT_GBRP12MSBLE: > + *readLumPlanar = msb_planar_rgb12le_to_y; > + break; > case AV_PIX_FMT_GBRP9BE: > *readLumPlanar = planar_rgb9be_to_y; > break; > @@ -2241,6 +2359,12 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, > case AV_PIX_FMT_GBRPF16BE: > *readLumPlanar = planar_rgbf16be_to_y; > break; > + case AV_PIX_FMT_GBRP10MSBBE: > + *readLumPlanar = msb_planar_rgb10be_to_y; > + break; > + case AV_PIX_FMT_GBRP12MSBBE: > + *readLumPlanar = msb_planar_rgb12be_to_y; > + break; > case AV_PIX_FMT_GBRAP: > *readAlpPlanar = planar_rgb_to_a; > case AV_PIX_FMT_GBRP: > @@ -2335,6 +2459,18 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, > *alpToYV12 = bswap16Y_c; > break; > #endif > + case AV_PIX_FMT_YUV444P10MSBLE: > + *lumToYV12 = shf16_10LEToY_c; > + break; > + case AV_PIX_FMT_YUV444P12MSBLE: > + *lumToYV12 = shf16_12LEToY_c; > + break; > + case AV_PIX_FMT_YUV444P10MSBBE: > + *lumToYV12 = shf16_10BEToY_c; > + break; > + case AV_PIX_FMT_YUV444P12MSBBE: > + *lumToYV12 = shf16_12BEToY_c; > + break; > case AV_PIX_FMT_YA16LE: > *lumToYV12 = read_ya16le_gray_c; > break; > diff --git a/libswscale/loongarch/output_lasx.c b/libswscale/loongarch/output_lasx.c > index 801cc70bd2..9c2f400a78 100644 > --- a/libswscale/loongarch/output_lasx.c > +++ b/libswscale/loongarch/output_lasx.c > @@ -1768,6 +1768,7 @@ av_cold void ff_sws_init_output_lasx(SwsInternal *c, > /* Add initialization once optimized */ > if (isSemiPlanarYUV(dstFormat) && isDataInHighBits(dstFormat)) { > } else if (is16BPS(dstFormat)) { > + } else if (isNBPS(dstFormat) && isDataInHighBits(dstFormat)) { > } else if (isNBPS(dstFormat)) { > } else if (dstFormat == AV_PIX_FMT_GRAYF32BE) { > } else if (dstFormat == AV_PIX_FMT_GRAYF32LE) { > diff --git a/libswscale/loongarch/output_lsx.c b/libswscale/loongarch/output_lsx.c > index 6c8e0c816c..1caa64c5d4 100644 > --- a/libswscale/loongarch/output_lsx.c > +++ b/libswscale/loongarch/output_lsx.c > @@ -1623,6 +1623,7 @@ av_cold void ff_sws_init_output_lsx(SwsInternal *c, > /* Add initialization once optimized */ > if (isSemiPlanarYUV(dstFormat) && isDataInHighBits(dstFormat)) { > } else if (is16BPS(dstFormat)) { > + } else if (isNBPS(dstFormat) && isDataInHighBits(dstFormat)) { > } else if (isNBPS(dstFormat)) { > } else if (dstFormat == AV_PIX_FMT_GRAYF32BE) { > } else if (dstFormat == AV_PIX_FMT_GRAYF32LE) { > diff --git a/libswscale/output.c b/libswscale/output.c > index c37649e7ce..123e6964e0 100644 > --- a/libswscale/output.c > +++ b/libswscale/output.c > @@ -386,6 +386,68 @@ yuv2NBPS(14, LE, 0, 10, int16_t) > yuv2NBPS(16, BE, 1, 16, int32_t) > yuv2NBPS(16, LE, 0, 16, int32_t) > > +#define output_pixel(pos, val) \ > + if (big_endian) { \ > + AV_WB16(pos, av_clip_uintp2(val >> shift, output_bits) << (16 - output_bits)); \ > + } else { \ > + AV_WL16(pos, av_clip_uintp2(val >> shift, output_bits) << (16 - output_bits)); \ > + } > + > +static av_always_inline void > +yuv2msbplane1_10_c_template(const int16_t *src, uint16_t *dest, int dstW, > + int big_endian, int output_bits) > +{ > + int i; > + int shift = 15 - output_bits; > + > + for (i = 0; i < dstW; i++) { > + int val = src[i] + (1 << (shift - 1)); > + output_pixel(&dest[i], val); > + } > +} > + > +static av_always_inline void > +yuv2msbplaneX_10_c_template(const int16_t *filter, int filterSize, > + const int16_t **src, uint16_t *dest, int dstW, > + int big_endian, int output_bits) > +{ > + int i; > + int shift = 11 + 16 - output_bits; > + > + for (i = 0; i < dstW; i++) { > + int val = 1 << (shift - 1); > + int j; > + > + for (j = 0; j < filterSize; j++) > + val += src[j][i] * filter[j]; > + > + output_pixel(&dest[i], val); > + } > +} > + > +#define yuv2MSBNBPS(bits, BE_LE, is_be, template_size, typeX_t) \ > +static void yuv2msbplane1_ ## bits ## BE_LE ## _c(const int16_t *src, \ > + uint8_t *dest, int dstW, \ > + const uint8_t *dither, int offset)\ > +{ \ > + yuv2msbplane1_ ## template_size ## _c_template((const typeX_t *) src, \ > + (uint16_t *) dest, dstW, is_be, bits); \ > +}\ > +static void yuv2msbplaneX_ ## bits ## BE_LE ## _c(const int16_t *filter, int filterSize, \ > + const int16_t **src, uint8_t *dest, int dstW, \ > + const uint8_t *dither, int offset)\ > +{ \ > + yuv2msbplaneX_## template_size ## _c_template(filter, \ > + filterSize, (const typeX_t **) src, \ > + (uint16_t *) dest, dstW, is_be, bits); \ > +} > + > +yuv2MSBNBPS(10, BE, 1, 10, int16_t) > +yuv2MSBNBPS(10, LE, 0, 10, int16_t) > +yuv2MSBNBPS(12, BE, 1, 10, int16_t) > +yuv2MSBNBPS(12, LE, 0, 10, int16_t) > + > +#undef output_pixel > > static void yuv2nv12cX_16LE_c(enum AVPixelFormat dstFormat, const uint8_t *chrDither, > const int16_t *chrFilter, int chrFilterSize, > @@ -2352,6 +2414,46 @@ yuv2gbrp_full_X_c(SwsInternal *c, const int16_t *lumFilter, > } > } > > +static void > +yuv2gbrpmsb_full_X_c(SwsInternal *c, const int16_t *lumFilter, > + const int16_t **lumSrc, int lumFilterSize, > + const int16_t *chrFilter, const int16_t **chrUSrc, > + const int16_t **chrVSrc, int chrFilterSize, > + const int16_t **alpSrc, uint8_t **dest, > + int dstW, int y) > +{ > + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->opts.dst_format); > + int hasAlpha = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) && alpSrc; > + uint16_t **dest16 = (uint16_t**)dest; > + int shift = 16 - desc->comp[0].depth; > + int i; > + > + yuv2gbrp_full_X_c(c, lumFilter, lumSrc, lumFilterSize, > + chrFilter, chrUSrc, chrVSrc, chrFilterSize, > + alpSrc, dest, dstW, y); > + > + if (desc->comp[0].depth <= 8) > + return; > + > + if ((!isBE(c->opts.dst_format)) != (!HAVE_BIGENDIAN)) { > + for (i = 0; i < dstW; i++) { > + dest16[0][i] = av_bswap16(av_bswap16(dest16[0][i]) << shift); > + dest16[1][i] = av_bswap16(av_bswap16(dest16[1][i]) << shift); > + dest16[2][i] = av_bswap16(av_bswap16(dest16[2][i]) << shift); > + if (hasAlpha) > + dest16[3][i] = av_bswap16(av_bswap16(dest16[3][i]) << shift); > + } > + } else { > + for (i = 0; i < dstW; i++) { > + dest16[0][i] = dest16[0][i] << shift; > + dest16[1][i] = dest16[1][i] << shift; > + dest16[2][i] = dest16[2][i] << shift; > + if (hasAlpha) > + dest16[3][i] = dest16[3][i] << shift; > + } > + } > +} > + > static void > yuv2gbrp16_full_X_c(SwsInternal *c, const int16_t *lumFilter, > const int16_t **lumSrcx, int lumFilterSize, > @@ -3215,6 +3317,15 @@ av_cold void ff_sws_init_output_funcs(SwsInternal *c, > if (isSemiPlanarYUV(dstFormat)) { > *yuv2nv12cX = isBE(dstFormat) ? yuv2nv12cX_16BE_c : yuv2nv12cX_16LE_c; > } > + } else if (isDataInHighBits(dstFormat) && isNBPS(dstFormat)) { > + if (desc->comp[0].depth == 10) { > + *yuv2planeX = isBE(dstFormat) ? yuv2msbplaneX_10BE_c : yuv2msbplaneX_10LE_c; > + *yuv2plane1 = isBE(dstFormat) ? yuv2msbplane1_10BE_c : yuv2msbplane1_10LE_c; > + } else if (desc->comp[0].depth == 12) { > + *yuv2planeX = isBE(dstFormat) ? yuv2msbplaneX_12BE_c : yuv2msbplaneX_12LE_c; > + *yuv2plane1 = isBE(dstFormat) ? yuv2msbplane1_12BE_c : yuv2msbplane1_12LE_c; > + } else > + av_assert0(0); > } else if (isNBPS(dstFormat)) { > if (desc->comp[0].depth == 9) { > *yuv2planeX = isBE(dstFormat) ? yuv2planeX_9BE_c : yuv2planeX_9LE_c; > @@ -3460,6 +3571,12 @@ av_cold void ff_sws_init_output_funcs(SwsInternal *c, > case AV_PIX_FMT_GBRAP14LE: > *yuv2anyX = yuv2gbrp_full_X_c; > break; > + case AV_PIX_FMT_GBRP10MSBBE: > + case AV_PIX_FMT_GBRP10MSBLE: > + case AV_PIX_FMT_GBRP12MSBBE: > + case AV_PIX_FMT_GBRP12MSBLE: > + *yuv2anyX = yuv2gbrpmsb_full_X_c; > + break; > case AV_PIX_FMT_GBRP16BE: > case AV_PIX_FMT_GBRP16LE: > case AV_PIX_FMT_GBRAP16BE: > diff --git a/libswscale/ppc/swscale_altivec.c b/libswscale/ppc/swscale_altivec.c > index a74c0a4b3f..3112c6cb71 100644 > --- a/libswscale/ppc/swscale_altivec.c > +++ b/libswscale/ppc/swscale_altivec.c > @@ -242,7 +242,7 @@ av_cold void ff_sws_init_swscale_ppc(SwsInternal *c) > if (c->srcBpc == 8 && c->dstBpc <= 14) { > c->hyScale = c->hcScale = hScale_real_altivec; > } > - if (!is16BPS(dstFormat) && !isNBPS(dstFormat) && !isSemiPlanarYUV(dstFormat) && > + if (!is16BPS(dstFormat) && !isNBPS(dstFormat) && !isSemiPlanarYUV(dstFormat) && !isDataInHighBits(dstFormat) && > dstFormat != AV_PIX_FMT_GRAYF32BE && dstFormat != AV_PIX_FMT_GRAYF32LE && > !c->needAlpha) { > c->yuv2planeX = yuv2planeX_altivec; > diff --git a/libswscale/ppc/swscale_vsx.c b/libswscale/ppc/swscale_vsx.c > index 5ea3407644..c6948546d5 100644 > --- a/libswscale/ppc/swscale_vsx.c > +++ b/libswscale/ppc/swscale_vsx.c > @@ -2041,7 +2041,7 @@ av_cold void ff_sws_init_swscale_vsx(SwsInternal *c) > : hScale16To15_vsx; > } > } > - if (!is16BPS(dstFormat) && !isNBPS(dstFormat) && !isSemiPlanarYUV(dstFormat) && > + if (!is16BPS(dstFormat) && !isNBPS(dstFormat) && !isSemiPlanarYUV(dstFormat) && !isDataInHighBits(dstFormat) && > dstFormat != AV_PIX_FMT_GRAYF32BE && dstFormat != AV_PIX_FMT_GRAYF32LE && > !c->needAlpha) { > c->yuv2planeX = yuv2planeX_vsx; > diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c > index 61073c6c0a..6d8d277582 100644 > --- a/libswscale/swscale_unscaled.c > +++ b/libswscale/swscale_unscaled.c > @@ -2567,6 +2567,8 @@ void ff_get_unscaled_swscale(SwsInternal *c) > IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP12) || > IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP14) || > IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP16) || > + IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP10MSB) || > + IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP12MSB) || > IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP10) || > IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP12) || > IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP14) || > @@ -2595,7 +2597,9 @@ void ff_get_unscaled_swscale(SwsInternal *c) > IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P10) || > IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P12) || > IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P14) || > - IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P16)) > + IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P16) || > + IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P10MSB) || > + IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P12MSB)) > c->convert_unscaled = bswap_16bpc; > > /* bswap 32 bits per pixel/component formats */ > diff --git a/libswscale/tests/floatimg_cmp.c b/libswscale/tests/floatimg_cmp.c > index 0744e64f8e..45b875c79f 100644 > --- a/libswscale/tests/floatimg_cmp.c > +++ b/libswscale/tests/floatimg_cmp.c > @@ -42,6 +42,7 @@ static const enum AVPixelFormat pix_fmts[] = { > AV_PIX_FMT_YUV444P, > AV_PIX_FMT_YUV444P9LE, AV_PIX_FMT_YUV444P10LE, > AV_PIX_FMT_YUV444P12LE, AV_PIX_FMT_YUV444P14LE, > + AV_PIX_FMT_YUV444P10MSBLE, AV_PIX_FMT_YUV444P12MSBLE, > AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24, > AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA, > AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR, > @@ -52,6 +53,7 @@ static const enum AVPixelFormat pix_fmts[] = { > AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, > AV_PIX_FMT_GBRP9LE, > AV_PIX_FMT_GBRP10LE, AV_PIX_FMT_GBRAP10LE, > + AV_PIX_FMT_GBRP10MSBLE, AV_PIX_FMT_GBRP12MSBLE, > AV_PIX_FMT_GBRP12LE, AV_PIX_FMT_GBRAP12LE, > AV_PIX_FMT_GBRP14LE, > AV_PIX_FMT_GBRP16LE, AV_PIX_FMT_GBRAP16LE > diff --git a/libswscale/utils.c b/libswscale/utils.c > index 94a47ea5d0..a13d8df7e8 100644 > --- a/libswscale/utils.c > +++ b/libswscale/utils.c > @@ -1334,8 +1334,10 @@ av_cold int ff_sws_init_single_context(SwsContext *sws, SwsFilter *srcFilter, > srcFormat != AV_PIX_FMT_RGB4_BYTE && srcFormat != AV_PIX_FMT_BGR4_BYTE && > srcFormat != AV_PIX_FMT_GBRP9BE && srcFormat != AV_PIX_FMT_GBRP9LE && > srcFormat != AV_PIX_FMT_GBRP10BE && srcFormat != AV_PIX_FMT_GBRP10LE && > + srcFormat != AV_PIX_FMT_GBRP10MSBBE && srcFormat != AV_PIX_FMT_GBRP10MSBLE && > srcFormat != AV_PIX_FMT_GBRAP10BE && srcFormat != AV_PIX_FMT_GBRAP10LE && > srcFormat != AV_PIX_FMT_GBRP12BE && srcFormat != AV_PIX_FMT_GBRP12LE && > + srcFormat != AV_PIX_FMT_GBRP12MSBBE && srcFormat != AV_PIX_FMT_GBRP12MSBLE && > srcFormat != AV_PIX_FMT_GBRAP12BE && srcFormat != AV_PIX_FMT_GBRAP12LE && > srcFormat != AV_PIX_FMT_GBRAP14BE && srcFormat != AV_PIX_FMT_GBRAP14LE && > srcFormat != AV_PIX_FMT_GBRP14BE && srcFormat != AV_PIX_FMT_GBRP14LE && > diff --git a/libswscale/x86/swscale.c b/libswscale/x86/swscale.c > index e9ad2a1e95..8b6f9bd58a 100644 > --- a/libswscale/x86/swscale.c > +++ b/libswscale/x86/swscale.c > @@ -543,14 +543,14 @@ av_cold void ff_sws_init_swscale_x86(SwsInternal *c) > #define ASSIGN_VSCALEX_FUNC(vscalefn, opt, do_16_case, condition_8bit) \ > switch(c->dstBpc){ \ > case 16: do_16_case; break; \ > - case 10: if (!isBE(c->opts.dst_format) && !isSemiPlanarYUV(c->opts.dst_format)) vscalefn = ff_yuv2planeX_10_ ## opt; break; \ > + case 10: if (!isBE(c->opts.dst_format) && !isSemiPlanarYUV(c->opts.dst_format) && !isDataInHighBits(c->opts.dst_format)) vscalefn = ff_yuv2planeX_10_ ## opt; break; \ > case 9: if (!isBE(c->opts.dst_format)) vscalefn = ff_yuv2planeX_9_ ## opt; break; \ > case 8: if ((condition_8bit) && !c->use_mmx_vfilter) vscalefn = ff_yuv2planeX_8_ ## opt; break; \ > } > #define ASSIGN_VSCALE_FUNC(vscalefn, opt) \ > switch(c->dstBpc){ \ > case 16: if (!isBE(c->opts.dst_format)) vscalefn = ff_yuv2plane1_16_ ## opt; break; \ > - case 10: if (!isBE(c->opts.dst_format) && !isSemiPlanarYUV(c->opts.dst_format)) vscalefn = ff_yuv2plane1_10_ ## opt; break; \ > + case 10: if (!isBE(c->opts.dst_format) && !isSemiPlanarYUV(c->opts.dst_format) && !isDataInHighBits(c->opts.dst_format)) vscalefn = ff_yuv2plane1_10_ ## opt; break; \ > case 9: if (!isBE(c->opts.dst_format)) vscalefn = ff_yuv2plane1_9_ ## opt; break; \ > case 8: vscalefn = ff_yuv2plane1_8_ ## opt; break; \ > default: av_assert0(c->dstBpc>8); \ > diff --git a/tests/ref/fate/filter-pixdesc-gbrp10msbbe b/tests/ref/fate/filter-pixdesc-gbrp10msbbe > new file mode 100644 > index 0000000000..a38b3d890c > --- /dev/null > +++ b/tests/ref/fate/filter-pixdesc-gbrp10msbbe > @@ -0,0 +1 @@ > +pixdesc-gbrp10msbbe fc1a397ca61a80383b134d902cd4ae24 > diff --git a/tests/ref/fate/filter-pixdesc-gbrp10msble b/tests/ref/fate/filter-pixdesc-gbrp10msble > new file mode 100644 > index 0000000000..c1546fe18a > --- /dev/null > +++ b/tests/ref/fate/filter-pixdesc-gbrp10msble > @@ -0,0 +1 @@ > +pixdesc-gbrp10msble 1acc24b493137f465be216a4d3eee77a > diff --git a/tests/ref/fate/filter-pixdesc-gbrp12msbbe b/tests/ref/fate/filter-pixdesc-gbrp12msbbe > new file mode 100644 > index 0000000000..1aed2e7e2d > --- /dev/null > +++ b/tests/ref/fate/filter-pixdesc-gbrp12msbbe > @@ -0,0 +1 @@ > +pixdesc-gbrp12msbbe 6bd47ffb08879dcd69c0ee86bee3600a > diff --git a/tests/ref/fate/filter-pixdesc-gbrp12msble b/tests/ref/fate/filter-pixdesc-gbrp12msble > new file mode 100644 > index 0000000000..a3038d7b88 > --- /dev/null > +++ b/tests/ref/fate/filter-pixdesc-gbrp12msble > @@ -0,0 +1 @@ > +pixdesc-gbrp12msble 9ba8fe8131c643f49c5522a56449a40b > diff --git a/tests/ref/fate/filter-pixdesc-yuv444p10msbbe b/tests/ref/fate/filter-pixdesc-yuv444p10msbbe > new file mode 100644 > index 0000000000..2c5328619a > --- /dev/null > +++ b/tests/ref/fate/filter-pixdesc-yuv444p10msbbe > @@ -0,0 +1 @@ > +pixdesc-yuv444p10msbbeff1c8fa25341156ee539790dc8c34efd > diff --git a/tests/ref/fate/filter-pixdesc-yuv444p10msble b/tests/ref/fate/filter-pixdesc-yuv444p10msble > new file mode 100644 > index 0000000000..f782cfb11a > --- /dev/null > +++ b/tests/ref/fate/filter-pixdesc-yuv444p10msble > @@ -0,0 +1 @@ > +pixdesc-yuv444p10msbled250ae9fc413980fbbd846460bb8d616 > diff --git a/tests/ref/fate/filter-pixdesc-yuv444p12msbbe b/tests/ref/fate/filter-pixdesc-yuv444p12msbbe > new file mode 100644 > index 0000000000..c64b8dbe2e > --- /dev/null > +++ b/tests/ref/fate/filter-pixdesc-yuv444p12msbbe > @@ -0,0 +1 @@ > +pixdesc-yuv444p12msbbe7a306f73ba8c35c04405c5568219e87b > diff --git a/tests/ref/fate/filter-pixdesc-yuv444p12msble b/tests/ref/fate/filter-pixdesc-yuv444p12msble > new file mode 100644 > index 0000000000..c06cce5184 > --- /dev/null > +++ b/tests/ref/fate/filter-pixdesc-yuv444p12msble > @@ -0,0 +1 @@ > +pixdesc-yuv444p12msble618b9bafd6bf66ffd1265b1d611380b7 > diff --git a/tests/ref/fate/filter-pixfmts-copy b/tests/ref/fate/filter-pixfmts-copy > index cbedb4d894..84a407c8fa 100644 > --- a/tests/ref/fate/filter-pixfmts-copy > +++ b/tests/ref/fate/filter-pixfmts-copy > @@ -34,8 +34,12 @@ gbrapf32le 1ac76b9418062a95e5c62da3ba1c8c5a > gbrp 5fbc319e30110d19d539f5b274eddb6d > gbrp10be 703a17591a2a5c236675c5101c349bcc > gbrp10le ee014153f55c011918df5b2394815780 > +gbrp10msbbe 2fcce5d0a33eb93bc1065a46b77696ee > +gbrp10msble eb68e8a797a8aa8d69d3b896013e1290 > gbrp12be 527d337eb5813ebba7cf969ee660d423 > gbrp12le fd192920b171a0cf88d61e8310e95d81 > +gbrp12msbbe 73ea99e86472f0c047dce85fa76dd428 > +gbrp12msble 102df5b20bb722c391dd1ab6ec9953a3 > gbrp14be 46d502db6dc5eb7e9da3c60016b2df91 > gbrp14le 1607f5c8f13360b53b8186f523996b1b > gbrp16be 7b6764a504c853b09f5c7d0b2223c5a4 > @@ -153,8 +157,12 @@ yuv440p12le 2fff7746ae7c07d407075c0e372baf46 > yuv444p 8f90fb3a757878c545a8bfe5d19a9bab > yuv444p10be 6683d5cb82c708d5f3a2a89d0311f7a4 > yuv444p10le 6d736fa464ff2de2b07e0a56af8444b7 > +yuv444p10msbbe 9542f394ed36ff084bbcc09883d24cac > +yuv444p10msble bf8b831e6d6bf8bc5c2e9609fa98b01e > yuv444p12be 04320ad158450ee158f84a27c6325702 > yuv444p12le 08a81b2ea9c7c8b447e40ef8f4a46a4a > +yuv444p12msbbe 5bd7623158e0bc62edb900821ce2df72 > +yuv444p12msble 425731663df58c875319a0b02f4ab4cc > yuv444p14be ea3057d469d0c49c24e844256ef7871e > yuv444p14le 940f5908ccf06e01411f0a7bddb45c6a > yuv444p16be aee24ab2e9a4656f889399f1b0d98639 > diff --git a/tests/ref/fate/filter-pixfmts-crop b/tests/ref/fate/filter-pixfmts-crop > index d4bffda7dc..05bb5b1b19 100644 > --- a/tests/ref/fate/filter-pixfmts-crop > +++ b/tests/ref/fate/filter-pixfmts-crop > @@ -34,8 +34,12 @@ gbrapf32le 34875869f093bddf94f14c8542eca9f0 > gbrp ec671f573c2105072ab68a1933c58fee > gbrp10be 6f0130a41f01e58593d3840446dd94b7 > gbrp10le 9c152b7dfb7ad7bc477518d97316d04f > +gbrp10msbbe 2bdde24ebec8d80aafa08352965cdf6d > +gbrp10msble f500f798cc5469b9ba30fb48e584b51a > gbrp12be 561516202a6e37dd19543f9bb3af339f > gbrp12le 3e7f87d834748844ab326e22eb2b7487 > +gbrp12msbbe 1fe5466eb3de5186d5cad87a30666dbf > +gbrp12msble 2c0d510341e757861f3a85899f04e52c > gbrp14be 057232bca98c472a003cc46b3fd939e4 > gbrp14le d4764dba3c3efd1263c2c8e0f5ac9f6a > gbrp16be 59e4c27ee33520e23dbceafbec27aa9b > @@ -147,8 +151,12 @@ yuv440p12le 33c5cae9acde262b194efdf78ad44258 > yuv444p 28166fdead6f87f57f4c77156dce0466 > yuv444p10be 2c9b7f39c006b68d6b53791472ade1d5 > yuv444p10le 8427e65a1608ff8c5c88492f4926f6c1 > +yuv444p10msbbe bc2c25584af692ea8a43a931bb1afddb > +yuv444p10msble 6ec78c600f77619c2b9c3b5ab365be26 > yuv444p12be 6e1f91ed1c6fc42fbc912d7d3aed0aca > yuv444p12le 6a674498003ca57c8c2700b7d0ecb290 > +yuv444p12msbbe 96df9462a4b5ac0c9d428f3be4932723 > +yuv444p12msble 65cbf6aae7b3124643655e2305150b08 > yuv444p14be bb07382a868b35875b771b37dd234605 > yuv444p14le f8f6e6124bae7e95d0061b95bd64be66 > yuv444p16be 25b9244db531ccab7095a44b3115032d > diff --git a/tests/ref/fate/filter-pixfmts-field b/tests/ref/fate/filter-pixfmts-field > index 146ceab9c7..d8a0d5234a 100644 > --- a/tests/ref/fate/filter-pixfmts-field > +++ b/tests/ref/fate/filter-pixfmts-field > @@ -34,8 +34,12 @@ gbrapf32le 401239fe76ef69d945f1d2c8efd116e9 > gbrp 838025a3062f7f31e99196ce66961ad7 > gbrp10be f63c2555ea19fc78b00fd5b3e2b48e8c > gbrp10le be64c374ab318235d912372e99a0516a > +gbrp10msbbe e7a069412732d633b104b6c2d93469f9 > +gbrp10msble 36f3476db6bb05fd8cdce9ef84a2f58c > gbrp12be ef164a1c062dc3572c61b9ef10897ca1 > gbrp12le 0527fdb6f75b1cb0d380809eb7a7589a > +gbrp12msbbe 1e92a3cbeec6bd487a7d7577baf36756 > +gbrp12msble 38762c94d7e55c6010e93794f14ff332 > gbrp14be 6aff3ad388e2ed97d59b71a75029746d > gbrp14le ed9ccbc7a4f3e269a2ec37d210359fd8 > gbrp16be 020eff1626415ea726c55b23162ce59a > @@ -153,8 +157,12 @@ yuv440p12le a529385f94a4d46fa339746693975d99 > yuv444p 389eda40a7a3bd5d3b280b448e99f27e > yuv444p10be 80b1cf057149a1f7dfae1da061e00523 > yuv444p10le cdd8ba90dfc7689e0771dc36a70db433 > +yuv444p10msbbe b0a75c6c59d96707a41ce4990314f36f > +yuv444p10msble e306771f12f7885907689e63ba29a5c2 > yuv444p12be caaa959ed39a74dcec478f23690f5ffc > yuv444p12le a7965a51a2e45723f650d1313f2aa356 > +yuv444p12msbbe 31ec6c32401562a8c9aaf168a6b37e1b > +yuv444p12msble d947a1e44481ea0ce7be8b30ae653497 > yuv444p14be 18a46dde1fafcc7bbc6ebb3fd6681e7c > yuv444p14le 90058811cf9c35a4ddfab367bea40c51 > yuv444p16be 1ff6ee64bcc33be585712e86359430d5 > diff --git a/tests/ref/fate/filter-pixfmts-fieldorder b/tests/ref/fate/filter-pixfmts-fieldorder > index 63c82907ef..df48d3af34 100644 > --- a/tests/ref/fate/filter-pixfmts-fieldorder > +++ b/tests/ref/fate/filter-pixfmts-fieldorder > @@ -34,8 +34,12 @@ gbrapf32le f1c3079716d6ce7b629511ec1fcb98ad > gbrp 506dea2fe492e985a396d1b11ccd8db3 > gbrp10be 55bbfe2d472780dcbadf3027778caa0e > gbrp10le 13a39077ab1b2c3b49afd3e250b84a77 > +gbrp10msbbe 04a34ae25a510f4fcbd4aac80d332928 > +gbrp10msble fe465d4e28c90f7bcf9670dbeec1be1f > gbrp12be f1b59334c687a39ba076fe47e6ee9515 > gbrp12le e64ab4d290eb10476db165054720173f > +gbrp12msbbe c68b09fd30cb609750c4f269bbd14433 > +gbrp12msble 176a3655df3fd7cd7b4b89d579eaaee4 > gbrp14be b3806ade527ef7452c29106054946cd1 > gbrp14le b01b1a05d8de36f51a133d25102fe1f3 > gbrp16be f82e4bda468275f51becf70f3880be52 > @@ -125,8 +129,12 @@ yuv422p9le c9faffe2fcb2e30be5d792412b3550b0 > yuv444p 1483374f69c4bbaf9252ce255fc84feb > yuv444p10be 2e5caee508692869141bd9649cc17f64 > yuv444p10le c0ceb41ad4c2ddc454f3fdb9cda2d8ad > +yuv444p10msbbe 9517db7eca363b4cfe19010026e9aca4 > +yuv444p10msble b9fabe62f70e204da80ad182a6571b08 > yuv444p12be 8729565c21a9d8f1e7a87d81d0aa4a54 > yuv444p12le d4786cb4b1e79b2af1493e01d685282f > +yuv444p12msbbe ab6d3fe75b4bebb61ef8b3ee98e4c928 > +yuv444p12msble 6db968972c964ad59e18572f1f983fdf > yuv444p14be 33f1cf5233f57582618390ea337e83c6 > yuv444p14le 7d9fc358232488f671d663d27875f3c1 > yuv444p16be 779ea70979e735d3074fef0466792681 > diff --git a/tests/ref/fate/filter-pixfmts-hflip b/tests/ref/fate/filter-pixfmts-hflip > index 0ece4ea134..cd5dda5ccf 100644 > --- a/tests/ref/fate/filter-pixfmts-hflip > +++ b/tests/ref/fate/filter-pixfmts-hflip > @@ -34,8 +34,12 @@ gbrapf32le 7312701852fbceaeb53efce523bc75c0 > gbrp 0ecfeca171ba3a1a2ff4e92f572b71cf > gbrp10be 774398c2f81757a536c094f16cfc541a > gbrp10le e9a6434d691be541f789f850963da181 > +gbrp10msbbe e47a8437b5e8f706a0c3cb466ff6c514 > +gbrp10msble 0238594ce7f88b52fc8e44af623269e9 > gbrp12be 13d819d869f8e84aadca57e21883030e > gbrp12le 22046339442c155fbb9b02ceff5e1c15 > +gbrp12msbbe 275a9cb088db06bb0446891d5bc1bc80 > +gbrp12msble cd0b0fe250e9555e42ac00b94eda58c2 > gbrp14be 7e1d2f9d9bb7cc90d88540f36998acd6 > gbrp14le 91bb636f4e1f5d50312b136c185542e9 > gbrp16be 46cf9473646a4b9dbcb05661ade658ec > @@ -147,8 +151,12 @@ yuv440p12le 7aecbe06b7cd8c84d98af8cf3bb971e8 > yuv444p 0bd726440d90438ad357172fe1fac9b3 > yuv444p10be c2e452fbe45f23c70525919154f4b81f > yuv444p10le 90140d5f930fb2ff750fe18df990d0f3 > +yuv444p10msbbe f0f0e5ce513a34ff231b1a1607206ea5 > +yuv444p10msble ceebcb2a4299b26b3518d2bdee2028ed > yuv444p12be f858a8f0c55192ab69d356b97e0449bb > yuv444p12le 22f099dbae63e6564f06e1cc32683a4e > +yuv444p12msbbe 0f0acd39267d784e8a020886ac152369 > +yuv444p12msble d9edd2a6b6ed3f5b8aba985eee895d09 > yuv444p14be be4727c283bb3af3327f7b9dc57e51b8 > yuv444p14le 289f4d6a3d60ba654e8280683825ee9a > yuv444p16be acb6b001d445a628d1d0a2dfbeed078c > diff --git a/tests/ref/fate/filter-pixfmts-il b/tests/ref/fate/filter-pixfmts-il > index ce707f9c8b..768bf8c06c 100644 > --- a/tests/ref/fate/filter-pixfmts-il > +++ b/tests/ref/fate/filter-pixfmts-il > @@ -34,8 +34,12 @@ gbrapf32le a606da084e300d0e827a4d24ce18567b > gbrp dc06edb62e70024a216c8e303b79b328 > gbrp10be 321e7f061d8b9b5801221b6cf3c99666 > gbrp10le 799ed3afca01076439a0b6785b3dc4bb > +gbrp10msbbe 0855479c918946f8755f25593612a74d > +gbrp10msble 92db82d585eb495d4cabc033ffdd2a59 > gbrp12be 7ca179ad8f7b018de48a48bdb0776965 > gbrp12le c69843651e7e60e85c5e8a2fe4ecb290 > +gbrp12msbbe f499ec2f96f5d0d271371d4d2a94e3d8 > +gbrp12msble 7e9f8e72a773c9098e6019f8bcd22e36 > gbrp14be 5dc5e8131c25125347758e03d15b69e6 > gbrp14le bf3d5dec9b58cecd4ca1c5d3a4d57c31 > gbrp16be c8c95027703c680ed8f8f91c725db40a > @@ -152,8 +156,12 @@ yuv440p12le 6f47a23742f5763f3240982e1892e4dc > yuv444p bbd70cde098f24097c4cdcd3ad22d9ce > yuv444p10be b0de51e143a5bd490c424dc836becfa8 > yuv444p10le 4435dca19253b88dc7cd553928467e79 > +yuv444p10msbbe a59dd07cb8a2785d2c92778ed12b1467 > +yuv444p10msble 4212954799563435093093dcc68c97e4 > yuv444p12be 23f0ce3a810138df7849d4f6b5e50211 > yuv444p12le 0394aeef391e2cc09722ee8e7244f1c3 > +yuv444p12msbbe a8aa386b03e70ef376700a0e564be018 > +yuv444p12msble c5cbe5f8ff3cc7b354d1c47e51716de9 > yuv444p14be c712cf9dbf8571fbd31fa747e58993ec > yuv444p14le 3a0e361e5998f8590dd8ca8ce896cea1 > yuv444p16be 929c50756bfe8cab7c416f56095fbb82 > diff --git a/tests/ref/fate/filter-pixfmts-null b/tests/ref/fate/filter-pixfmts-null > index cbedb4d894..84a407c8fa 100644 > --- a/tests/ref/fate/filter-pixfmts-null > +++ b/tests/ref/fate/filter-pixfmts-null > @@ -34,8 +34,12 @@ gbrapf32le 1ac76b9418062a95e5c62da3ba1c8c5a > gbrp 5fbc319e30110d19d539f5b274eddb6d > gbrp10be 703a17591a2a5c236675c5101c349bcc > gbrp10le ee014153f55c011918df5b2394815780 > +gbrp10msbbe 2fcce5d0a33eb93bc1065a46b77696ee > +gbrp10msble eb68e8a797a8aa8d69d3b896013e1290 > gbrp12be 527d337eb5813ebba7cf969ee660d423 > gbrp12le fd192920b171a0cf88d61e8310e95d81 > +gbrp12msbbe 73ea99e86472f0c047dce85fa76dd428 > +gbrp12msble 102df5b20bb722c391dd1ab6ec9953a3 > gbrp14be 46d502db6dc5eb7e9da3c60016b2df91 > gbrp14le 1607f5c8f13360b53b8186f523996b1b > gbrp16be 7b6764a504c853b09f5c7d0b2223c5a4 > @@ -153,8 +157,12 @@ yuv440p12le 2fff7746ae7c07d407075c0e372baf46 > yuv444p 8f90fb3a757878c545a8bfe5d19a9bab > yuv444p10be 6683d5cb82c708d5f3a2a89d0311f7a4 > yuv444p10le 6d736fa464ff2de2b07e0a56af8444b7 > +yuv444p10msbbe 9542f394ed36ff084bbcc09883d24cac > +yuv444p10msble bf8b831e6d6bf8bc5c2e9609fa98b01e > yuv444p12be 04320ad158450ee158f84a27c6325702 > yuv444p12le 08a81b2ea9c7c8b447e40ef8f4a46a4a > +yuv444p12msbbe 5bd7623158e0bc62edb900821ce2df72 > +yuv444p12msble 425731663df58c875319a0b02f4ab4cc > yuv444p14be ea3057d469d0c49c24e844256ef7871e > yuv444p14le 940f5908ccf06e01411f0a7bddb45c6a > yuv444p16be aee24ab2e9a4656f889399f1b0d98639 > diff --git a/tests/ref/fate/filter-pixfmts-pad b/tests/ref/fate/filter-pixfmts-pad > index 9370ca2cb3..3c9fe6746e 100644 > --- a/tests/ref/fate/filter-pixfmts-pad > +++ b/tests/ref/fate/filter-pixfmts-pad > @@ -14,7 +14,9 @@ gbrap14le 4c8b549942e66f442de0f5c1d21e9b8e > gbrap16le d0f6fc33cb75588327aec1b5ad6ab4f0 > gbrp 3c94d39256db2409015df913fd330a90 > gbrp10le 5b356737cd8a396f39bbdadb7cb35e06 > +gbrp10msble 1eaff99273dcf52c7329b50dc3ef2d5a > gbrp12le 91fdad0d1edf7bfa2805e2041e8da3cd > +gbrp12msble c91d235f99d54bdd819e1e9218287ae3 > gbrp14le deb2c3af6b48faa52f6a1f6590a0cdf7 > gbrp16le a6156d1a37e05ee621b2a343fb158bd6 > gbrp9le 9e827f438e081d334a6cae7e282698b0 > @@ -68,7 +70,9 @@ yuv440p10le 55787c7260462e50e96f316856adf9dc > yuv440p12le 869d3d9e0e12df253b79949d2b2c0561 > yuv444p 6bfd89286dc36f2789b77d747ed8fa22 > yuv444p10le ac3142be3d7b0ec4c1e4450cb8c376ef > +yuv444p10msble 438ae33282dca61f5bab0386271519fb > yuv444p12le 4c7f29501e46f4d041222536697941d0 > +yuv444p12msble 0de8b60a01aeee8df55ec3f0f4285219 > yuv444p14le 13631aa3ecc332aee3b3360db45011c9 > yuv444p16le 613ec343b593dda43af15f015c193d0a > yuv444p9le 96fa344943468b5cd36be92b1c05f17f > diff --git a/tests/ref/fate/filter-pixfmts-scale b/tests/ref/fate/filter-pixfmts-scale > index 67de3d414d..e4ab07104c 100644 > --- a/tests/ref/fate/filter-pixfmts-scale > +++ b/tests/ref/fate/filter-pixfmts-scale > @@ -34,8 +34,12 @@ gbrapf32le 9e32cc5fc7b487ea94b9f440d645040d > gbrp dc3387f925f972c61aae7eb23cdc19f0 > gbrp10be a318ea42e53a7b80a55aa7c19c9a0ab5 > gbrp10le 994e8fc6a1e5b230f4c55893fd7618d6 > +gbrp10msbbe 045c5f8af6dafc1ceb06cfe3181c3ee9 > +gbrp10msble 8c74e50b03a0cb475145e83d0d15110b > gbrp12be bfbd419dd18c0a5677d4bce55ab24e2e > gbrp12le 95af1f8495b2a7a7ad67802e3e8bca01 > +gbrp12msbbe 69c01758aa175918b27e3de5b488b2ee > +gbrp12msble 907712bd8af9e3e39b1881b26273b7d1 > gbrp14be 9d8113c9a5182c02dbe4576509f59a96 > gbrp14le 952f39881e500ed684c8b216185f4b80 > gbrp16be 5241eee3465096efa111b86b30c3aaaa > @@ -153,8 +157,12 @@ yuv440p12le bb9ffc3033fe32b9ce3233524ed5ab70 > yuv444p 098f01e6790e1e6beff8d604120c2664 > yuv444p10be 024ee33cac7b5b7b225d7acb9dc59da3 > yuv444p10le a085fff2fb81d76753da689aee365b55 > +yuv444p10msbbe 39e20d08b28c3c3a63978e427d7567fe > +yuv444p10msble e49af28d1827e757d725433c4c8bf571 > yuv444p12be a181627b93bd9c4c384b83e17d373a7c > yuv444p12le 97e47326ff0efe89c295fd9ddb0ca854 > +yuv444p12msbbe 0fa425c7d9f5a7f7fe4933f4fe89dd6b > +yuv444p12msble 9439ab6089e6ad3102b878124f1de98e > yuv444p14be 3eac31f0d4969210640de74914faf86d > yuv444p14le 2c362c4cf167b7e2d83f4eb0dfaeb2b9 > yuv444p16be a60c674411d64cc4b9fbf17039afffb3 > diff --git a/tests/ref/fate/filter-pixfmts-transpose b/tests/ref/fate/filter-pixfmts-transpose > index 3064f2b180..64b45945c7 100644 > --- a/tests/ref/fate/filter-pixfmts-transpose > +++ b/tests/ref/fate/filter-pixfmts-transpose > @@ -34,8 +34,12 @@ gbrapf32le d6589fe7935cbb69d8253f8b8c4ffba8 > gbrp 7b4b6a2f1cdc51455b25515c3ecea944 > gbrp10be d7401725699b2ddf954caa16a0878a1e > gbrp10le 6036711969eae1979be6358f688bd9c8 > +gbrp10msbbe 7190df78d1e5e6566e2a74c079b01166 > +gbrp10msble 449752ca51481baf440e425b1f0d3b63 > gbrp12be ec7d6e69fc579619b53d57a76c20480d > gbrp12le bf7478185274486c3f7dd4db1da8f7d0 > +gbrp12msbbe 592e689e057d8cdc3c628fd4242dc8e7 > +gbrp12msble 51b3ebaed490b7fafdcc7801854d05e5 > gbrp14be 9b66f22e4315aaa878a430ae3f44ab57 > gbrp14le 16f30349b42dca007b37b8522d3018df > gbrp16be 0d003b88d4f446ae9ba12cab1cbb359a > @@ -120,8 +124,12 @@ yuv420p9le c735c3c8424c70d822ab4a1fe1f504e2 > yuv444p eb755977ca464baac5f03771858080ae > yuv444p10be 866b59a23dff3dc1cb6bf7bd7da26da4 > yuv444p10le 417d62f15abf4777c4ec5e0d00796a9e > +yuv444p10msbbe 4a6927682c82ccfeca7110b844b71dbd > +yuv444p10msble c408c6cfbd6426e048a2cd07376667d8 > yuv444p12be c1da110f0ee898fbcd4b45afb5aed58b > yuv444p12le dc18bddd7b6bb9fdb2e0c7e7476375fa > +yuv444p12msbbe 5344c6d57563cec818fd5219c6867393 > +yuv444p12msble b63edb22546b649550ae5cfd99a0acaf > yuv444p14be 2f181fa3403e7911b233d3d976abea73 > yuv444p14le ac718343878786a25b9a50924f9aabca > yuv444p16be 128214efef6fffe3293db513ae700d4a > diff --git a/tests/ref/fate/filter-pixfmts-vflip b/tests/ref/fate/filter-pixfmts-vflip > index a36d957443..590717399d 100644 > --- a/tests/ref/fate/filter-pixfmts-vflip > +++ b/tests/ref/fate/filter-pixfmts-vflip > @@ -34,8 +34,12 @@ gbrapf32le 463ffd7ce416d476816e080f971c42ba > gbrp 413b0f6ea51588d4be5f0c76d43d8796 > gbrp10be d02bd50db83213667808f5bacefe667c > gbrp10le 2d4a5ebc773ffc3d857a6ef24afbe10e > +gbrp10msbbe 362763bdeea3eafbbc82c3ded025f7fd > +gbrp10msble 46917c0a92e63c39f1d6b17622c0fcc3 > gbrp12be a668b7dba68817736501386ffe9f3adc > gbrp12le 299695016c22a4947d94b16f0975536b > +gbrp12msbbe 458871692a07fd2df3b6213fd2c7dced > +gbrp12msble b1dae2c7003d628deb1cc988090a0686 > gbrp14be eeebacfb19c970dd76ad044ef85e8fe5 > gbrp14le 6e93b87047e433995111eb5397751c3f > gbrp16be 3fef87fe67bf1fd0e2f5056dc0db2ef4 > @@ -153,8 +157,12 @@ yuv440p12le 2a3adb4692391171c506cc0899d27511 > yuv444p 7c8c5d138d732f4ca7d864b9ffef3047 > yuv444p10be faa81f737d465afcacef351818d34772 > yuv444p10le bfc5036e4ab0ab6da1416df4a462db74 > +yuv444p10msbbe 730ba8d36068b509b32df698c1344aa0 > +yuv444p10msble 89d73ff2b95deea904fc1de5884869d7 > yuv444p12be 6706d8807b9dd14d331a7e9572fd9c5d > yuv444p12le 9bba33b2c0dd09f653a4c22d201142c5 > +yuv444p12msbbe 01f581dcf9b97f67cf8ea177e27eaf48 > +yuv444p12msble 5dafe4e293007c2721ad107edc1dbf96 > yuv444p14be cf181f44988d3ddf4cc32b87ca473251 > yuv444p14le 086322cb9a98eb91825c9bb2ad00eac7 > yuv444p16be ee0721d7fda4a67bc6270a78fa361140 > diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils > index c67ac35f44..ccd1522ef2 100644 > --- a/tests/ref/fate/imgutils > +++ b/tests/ref/fate/imgutils > @@ -298,6 +298,14 @@ yaf16be planes: 1, linesizes: 256 0 0 0, plane_sizes: 12288 0 > yaf16le planes: 1, linesizes: 256 0 0 0, plane_sizes: 12288 0 0 0, plane_offsets: 0 0 0, total_size: 12288 > gbrap32be planes: 4, linesizes: 256 256 256 256, plane_sizes: 12288 12288 12288 12288, plane_offsets: 12288 12288 12288, total_size: 49152 > gbrap32le planes: 4, linesizes: 256 256 256 256, plane_sizes: 12288 12288 12288 12288, plane_offsets: 12288 12288 12288, total_size: 49152 > +yuv444p10msbbe planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 > +yuv444p10msble planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 > +yuv444p12msbbe planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 > +yuv444p12msble planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 > +gbrp10msbbe planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 > +gbrp10msble planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 > +gbrp12msbbe planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 > +gbrp12msble planes: 3, linesizes: 128 128 128 0, plane_sizes: 6144 6144 6144 0, plane_offsets: 6144 6144 0, total_size: 18432 > > image_fill_black tests > yuv420p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af > @@ -543,3 +551,11 @@ yaf16be total_size: 12288, black_unknown_crc: 0x7afe9aae, black_tv_cr > yaf16le total_size: 12288, black_unknown_crc: 0x94c0068b, black_tv_crc: 0x94c0068b, black_pc_crc: 0xc05ce449 > gbrap32be total_size: 49152, black_unknown_crc: 0x7bd30c95, black_tv_crc: 0x7bd30c95, black_pc_crc: 0x7bd30c95 > gbrap32le total_size: 49152, black_unknown_crc: 0x7bd30c95, black_tv_crc: 0x7bd30c95, black_pc_crc: 0x7bd30c95 > +yuv444p10msbbe total_size: 18432, black_unknown_crc: 0x26991800, black_tv_crc: 0x26991800, black_pc_crc: 0xfe7f6700 > +yuv444p10msble total_size: 18432, black_unknown_crc: 0x4028ac30, black_tv_crc: 0x4028ac30, black_pc_crc: 0xab7c7698 > +yuv444p12msbbe total_size: 18432, black_unknown_crc: 0x26991800, black_tv_crc: 0x26991800, black_pc_crc: 0xfe7f6700 > +yuv444p12msble total_size: 18432, black_unknown_crc: 0x4028ac30, black_tv_crc: 0x4028ac30, black_pc_crc: 0xab7c7698 > +gbrp10msbbe total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 > +gbrp10msble total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 > +gbrp12msbbe total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 > +gbrp12msble total_size: 18432, black_unknown_crc: 0x00000000, black_tv_crc: 0x00000000, black_pc_crc: 0x00000000 > diff --git a/tests/ref/fate/sws-floatimg-cmp b/tests/ref/fate/sws-floatimg-cmp > index 251042f1c3..c7b7a3f8c1 100644 > --- a/tests/ref/fate/sws-floatimg-cmp > +++ b/tests/ref/fate/sws-floatimg-cmp > @@ -22,6 +22,14 @@ gbrpf32le -> yuv444p14le -> gbrpf32le > avg diff: 0.000127 > min diff: 0.000000 > max diff: 0.000524 > +gbrpf32le -> yuv444p10msble -> gbrpf32le > +avg diff: 0.000467 > +min diff: 0.000000 > +max diff: 0.001912 > +gbrpf32le -> yuv444p12msble -> gbrpf32le > +avg diff: 0.000166 > +min diff: 0.000000 > +max diff: 0.000802 > gbrpf32le -> rgb24 -> gbrpf32le > avg diff: 0.001011 > min diff: 0.000000 > @@ -98,6 +106,14 @@ gbrpf32le -> gbrap10le -> gbrpf32le > avg diff: 0.000350 > min diff: 0.000000 > max diff: 0.001475 > +gbrpf32le -> gbrp10msble -> gbrpf32le > +avg diff: 0.000350 > +min diff: 0.000000 > +max diff: 0.001475 > +gbrpf32le -> gbrp12msble -> gbrpf32le > +avg diff: 0.000260 > +min diff: 0.000000 > +max diff: 0.001135 > gbrpf32le -> gbrp12le -> gbrpf32le > avg diff: 0.000260 > min diff: 0.000000 > diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query > index 6b1a97ec00..a062088d54 100644 > --- a/tests/ref/fate/sws-pixdesc-query > +++ b/tests/ref/fate/sws-pixdesc-query > @@ -61,8 +61,12 @@ isNBPS: > gbrap14le > gbrp10be > gbrp10le > + gbrp10msbbe > + gbrp10msble > gbrp12be > gbrp12le > + gbrp12msbbe > + gbrp12msble > gbrp14be > gbrp14le > gbrp9be > @@ -127,8 +131,12 @@ isNBPS: > yuv440p12le > yuv444p10be > yuv444p10le > + yuv444p10msbbe > + yuv444p10msble > yuv444p12be > yuv444p12le > + yuv444p12msbbe > + yuv444p12msble > yuv444p14be > yuv444p14le > yuv444p9be > @@ -169,7 +177,9 @@ isBE: > gbrapf16be > gbrapf32be > gbrp10be > + gbrp10msbbe > gbrp12be > + gbrp12msbbe > gbrp14be > gbrp16be > gbrp9be > @@ -230,7 +240,9 @@ isBE: > yuv440p10be > yuv440p12be > yuv444p10be > + yuv444p10msbbe > yuv444p12be > + yuv444p12msbbe > yuv444p14be > yuv444p16be > yuv444p9be > @@ -336,8 +348,12 @@ isYUV: > yuv444p > yuv444p10be > yuv444p10le > + yuv444p10msbbe > + yuv444p10msble > yuv444p12be > yuv444p12le > + yuv444p12msbbe > + yuv444p12msble > yuv444p14be > yuv444p14le > yuv444p16be > @@ -435,8 +451,12 @@ isPlanarYUV: > yuv444p > yuv444p10be > yuv444p10le > + yuv444p10msbbe > + yuv444p10msble > yuv444p12be > yuv444p12le > + yuv444p12msbbe > + yuv444p12msble > yuv444p14be > yuv444p14le > yuv444p16be > @@ -551,8 +571,12 @@ isRGB: > gbrp > gbrp10be > gbrp10le > + gbrp10msbbe > + gbrp10msble > gbrp12be > gbrp12le > + gbrp12msbbe > + gbrp12msble > gbrp14be > gbrp14le > gbrp16be > @@ -727,8 +751,12 @@ AnyRGB: > gbrp > gbrp10be > gbrp10le > + gbrp10msbbe > + gbrp10msble > gbrp12be > gbrp12le > + gbrp12msbbe > + gbrp12msble > gbrp14be > gbrp14le > gbrp16be > @@ -966,8 +994,12 @@ Planar: > gbrp > gbrp10be > gbrp10le > + gbrp10msbbe > + gbrp10msble > gbrp12be > gbrp12le > + gbrp12msbbe > + gbrp12msble > gbrp14be > gbrp14le > gbrp16be > @@ -1035,8 +1067,12 @@ Planar: > yuv444p > yuv444p10be > yuv444p10le > + yuv444p10msbbe > + yuv444p10msble > yuv444p12be > yuv444p12le > + yuv444p12msbbe > + yuv444p12msble > yuv444p14be > yuv444p14le > yuv444p16be > @@ -1159,8 +1195,12 @@ PlanarRGB: > gbrp > gbrp10be > gbrp10le > + gbrp10msbbe > + gbrp10msble > gbrp12be > gbrp12le > + gbrp12msbbe > + gbrp12msble > gbrp14be > gbrp14le > gbrp16be > @@ -1181,6 +1221,10 @@ usePal: > rgb8 > > DataInHighBits: > + gbrp10msbbe > + gbrp10msble > + gbrp12msbbe > + gbrp12msble > p010be > p010le > p012be > @@ -1201,6 +1245,10 @@ DataInHighBits: > y210le > y212be > y212le > + yuv444p10msbbe > + yuv444p10msble > + yuv444p12msbbe > + yuv444p12msble > > SwappedChroma: > nv21 Any comments? Would specially like for someone to have a look at the swscale changes who is more familiar with the code, since I'm not entirely confident I did all the changes correctly. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".