swscale/output: add full chroma interpolation support for x2rgb10

Signed-off-by: James Almer <jamrial@gmail.com>
master
James Almer 2 months ago
parent 430bec8666
commit febc9e8162
  1. 25
      libswscale/output.c
  2. 4
      libswscale/utils.c
  3. 4
      tests/ref/fate/filter-pixfmts-scale

@ -1970,6 +1970,18 @@ static av_always_inline void yuv2rgb_write_full(SwsInternal *c,
dest[2] = R >> 22; dest[2] = R >> 22;
dest[3] = hasAlpha ? A : 255; dest[3] = hasAlpha ? A : 255;
break; break;
case AV_PIX_FMT_X2RGB10LE:
R >>= 20;
G >>= 20;
B >>= 20;
AV_WL32(dest, (3U << 30) + (R << 20) + (G << 10) + B);
break;
case AV_PIX_FMT_X2BGR10LE:
R >>= 20;
G >>= 20;
B >>= 20;
AV_WL32(dest, (3U << 30) + (B << 20) + (G << 10) + R);
break;
case AV_PIX_FMT_BGR4_BYTE: case AV_PIX_FMT_BGR4_BYTE:
case AV_PIX_FMT_RGB4_BYTE: case AV_PIX_FMT_RGB4_BYTE:
case AV_PIX_FMT_BGR8: case AV_PIX_FMT_BGR8:
@ -2242,6 +2254,9 @@ YUV2RGBWRAPPER(yuv2, rgb_full, rgb4_byte_full, AV_PIX_FMT_RGB4_BYTE, 0)
YUV2RGBWRAPPER(yuv2, rgb_full, bgr8_full, AV_PIX_FMT_BGR8, 0) YUV2RGBWRAPPER(yuv2, rgb_full, bgr8_full, AV_PIX_FMT_BGR8, 0)
YUV2RGBWRAPPER(yuv2, rgb_full, rgb8_full, AV_PIX_FMT_RGB8, 0) YUV2RGBWRAPPER(yuv2, rgb_full, rgb8_full, AV_PIX_FMT_RGB8, 0)
YUV2RGBWRAPPER(yuv2, rgb_full, x2rgb10_full, AV_PIX_FMT_X2RGB10LE, 0)
YUV2RGBWRAPPER(yuv2, rgb_full, x2bgr10_full, AV_PIX_FMT_X2BGR10LE, 0)
static void static void
yuv2gbrp_full_X_c(SwsInternal *c, const int16_t *lumFilter, yuv2gbrp_full_X_c(SwsInternal *c, const int16_t *lumFilter,
const int16_t **lumSrc, int lumFilterSize, const int16_t **lumSrc, int lumFilterSize,
@ -3397,6 +3412,16 @@ av_cold void ff_sws_init_output_funcs(SwsInternal *c,
*yuv2packed2 = yuv2rgb8_full_2_c; *yuv2packed2 = yuv2rgb8_full_2_c;
*yuv2packed1 = yuv2rgb8_full_1_c; *yuv2packed1 = yuv2rgb8_full_1_c;
break; break;
case AV_PIX_FMT_X2RGB10LE:
*yuv2packedX = yuv2x2rgb10_full_X_c;
*yuv2packed2 = yuv2x2rgb10_full_2_c;
*yuv2packed1 = yuv2x2rgb10_full_1_c;
break;
case AV_PIX_FMT_X2BGR10LE:
*yuv2packedX = yuv2x2bgr10_full_X_c;
*yuv2packed2 = yuv2x2bgr10_full_2_c;
*yuv2packed1 = yuv2x2bgr10_full_1_c;
break;
case AV_PIX_FMT_GBRP: case AV_PIX_FMT_GBRP:
case AV_PIX_FMT_GBRP9BE: case AV_PIX_FMT_GBRP9BE:
case AV_PIX_FMT_GBRP9LE: case AV_PIX_FMT_GBRP9LE:

@ -1517,7 +1517,9 @@ static av_cold int sws_init_single_context(SwsContext *sws, SwsFilter *srcFilter
dstFormat != AV_PIX_FMT_BGR4_BYTE && dstFormat != AV_PIX_FMT_BGR4_BYTE &&
dstFormat != AV_PIX_FMT_RGB4_BYTE && dstFormat != AV_PIX_FMT_RGB4_BYTE &&
dstFormat != AV_PIX_FMT_BGR8 && dstFormat != AV_PIX_FMT_BGR8 &&
dstFormat != AV_PIX_FMT_RGB8 dstFormat != AV_PIX_FMT_RGB8 &&
dstFormat != AV_PIX_FMT_X2RGB10LE &&
dstFormat != AV_PIX_FMT_X2BGR10LE
) { ) {
av_log(c, AV_LOG_WARNING, av_log(c, AV_LOG_WARNING,
"full chroma interpolation for destination format '%s' not yet implemented\n", "full chroma interpolation for destination format '%s' not yet implemented\n",

@ -104,8 +104,8 @@ v30xle 8cba1fdc0ba2c39eb6fb5885dcf628a7
vuya ffa817e283bf6a0b6fba21b07523ccaa vuya ffa817e283bf6a0b6fba21b07523ccaa
vuyx a6ff68f46c6b4b7595ec91b2a497df8e vuyx a6ff68f46c6b4b7595ec91b2a497df8e
vyu444 d663334119da56e36aca1e8e4eb29a39 vyu444 d663334119da56e36aca1e8e4eb29a39
x2bgr10le d57b9a99033cc7b65ddd111578f2d385 x2bgr10le 94fcdae6bb03cc55675fec1f708ae765
x2rgb10le d56bdb23fa6a8e12a0b4394987f89935 x2rgb10le 99ca41ff2365b1615c05f8d197471105
xv30le a2a351cbf936651b558abfc70a925057 xv30le a2a351cbf936651b558abfc70a925057
xv36be 4d084adca0228d7750d1e2e877e0d79b xv36be 4d084adca0228d7750d1e2e877e0d79b
xv36le de9c74e94dc19c828e1572aa283d8aca xv36le de9c74e94dc19c828e1572aa283d8aca

Loading…
Cancel
Save