PR #21174 opened by rcombs URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21174 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21174.patch
This replaces hardcoded BT601. >From 3e4eb15ec7f286f639c438b98322fa30695d9e3b Mon Sep 17 00:00:00 2001 From: rcombs <[email protected]> Date: Thu, 11 Dec 2025 21:16:46 -0800 Subject: [PATCH] swscale: use configured YUV matrix with paletted-RGB inputs This replaces hardcoded BT601. --- libswscale/swscale.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/libswscale/swscale.c b/libswscale/swscale.c index 96df4ed3f4..219382505c 100644 --- a/libswscale/swscale.c +++ b/libswscale/swscale.c @@ -869,6 +869,12 @@ av_cold void ff_sws_init_xyzdsp(SwsInternal *c) void ff_update_palette(SwsInternal *c, const uint32_t *pal) { + uint32_t *rgb2yuv = c->input_rgb2yuv_table; + + int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; + 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]; + for (int i = 0; i < 256; i++) { int r, g, b, y, u, v, a = 0xff; if (c->opts.src_format == AV_PIX_FMT_PAL8) { @@ -897,20 +903,11 @@ void ff_update_palette(SwsInternal *c, const uint32_t *pal) g = ((i >> 1) & 3) * 85; r = ( i & 1) * 255; } -#define RGB2YUV_SHIFT 15 -#define BY ( (int) (0.114 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) -#define BV (-(int) (0.081 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) -#define BU ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) -#define GY ( (int) (0.587 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) -#define GV (-(int) (0.419 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) -#define GU (-(int) (0.331 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) -#define RY ( (int) (0.299 * 219 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) -#define RV ( (int) (0.500 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) -#define RU (-(int) (0.169 * 224 / 255 * (1 << RGB2YUV_SHIFT) + 0.5)) - y = av_clip_uint8((RY * r + GY * g + BY * b + ( 33 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT); - u = av_clip_uint8((RU * r + GU * g + BU * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT); - v = av_clip_uint8((RV * r + GV * g + BV * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT); + y = av_clip_uint8((ry * r + gy * g + by * b + ( 33 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT); + u = av_clip_uint8((ru * r + gu * g + bu * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT); + v = av_clip_uint8((rv * r + gv * g + bv * b + (257 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT); + c->pal_yuv[i]= y + (u<<8) + (v<<16) + ((unsigned)a<<24); switch (c->opts.dst_format) { -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
