From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 1DB914969A for ; Sun, 16 Jun 2024 22:29:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 35C7B68D74A; Mon, 17 Jun 2024 01:29:05 +0300 (EEST) Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A622168D708 for ; Mon, 17 Jun 2024 01:28:54 +0300 (EEST) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-421b9068274so34135825e9.1 for ; Sun, 16 Jun 2024 15:28:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718576933; x=1719181733; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=8N45asuRe5aGO2J6rjeA6eS9+vNSmPO+QAMFMAPc2NI=; b=MhFehoh/CDjTfHdmrjykdz938NRNAHSEeKB8fYPPPoqdJgzyXhxmnY/I53WwaIkhJ1 WnKNStWBmzuDCUFpNfh9/KoBh/LaGVRfk4WQq5rDODIR9e9lnyE0fIQSOjxDb8/Xfl7/ 1QunorduwzDVApl3QXaVQwksfLF9szQFCdeAlhl5ThTMMhJDkb6ZrIawDu2Vb1dtKg1W 1z+S/OcCDn8629d9xMu6oYVwKT1Nx09fLberFPTh+yp8J47okY4FNbhZDFKMy6yRUHI5 WzIdccrYAD4IUX0KMohOm366OM6xLLL6cvhGUqnDoA9jFTeJByMX4p+c71e5rUEwzZYb w7UQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718576933; x=1719181733; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8N45asuRe5aGO2J6rjeA6eS9+vNSmPO+QAMFMAPc2NI=; b=IeKMXvWbPeqMMZQtHwvDzM3LGjdINaZEbU0LU4xED7YEi1un2oVY/oV/iXkeBfRs9G VYpsOThppdouo58zFl/GB/RPywv0hCD1crp6H9z4gf/F/q+bJ/8cNkDxRNxgY7kXwszr WRf25HfBruIKkGdWH7Dh8t3TWXc/Hl0ZEL8h8ak3y6AnYifoNUEY9SSXfXR9V9J0QfVB 7pA/KhTb5qKzBN3brx3cqM8dhEOAGkfwRF4rBcjSKVAipmZhc1KzO/RZnoSBZicjqPPF QtOGcjqjPEUt8G/AgRAzzJZfPruJmDAfvo8MEC4ZJ6hMXq8kJuUbfJMEIjKt+0cnMOFq jy3g== X-Gm-Message-State: AOJu0Yx6hZTmiwiiNULcVyKRPo0WCQty7te5hqR3LIepqC8HWFZ2WAAD fZsllD7b2RclejdXY1eWUHPg7V7bqpH5lw+s956z5dFlsLCzZkMcJSDGOA== X-Google-Smtp-Source: AGHT+IFeL0EOMICGTa1ByxqrfylCLpA0+OGoQ7v5HyVSApvypYJ+1qoL6lE/40HSXpdiYdWAuq3eCg== X-Received: by 2002:a05:600c:a01:b0:422:4fcd:d4b3 with SMTP id 5b1f17b1804b1-42304858427mr58066255e9.37.1718576933124; Sun, 16 Jun 2024 15:28:53 -0700 (PDT) Received: from localhost.localdomain (247.111-201-80.adsl-dyn.isp.belgacom.be. [80.201.111.247]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-360750ad082sm10349146f8f.59.2024.06.16.15.28.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 16 Jun 2024 15:28:52 -0700 (PDT) From: Ramiro Polla To: ffmpeg-devel@ffmpeg.org Date: Mon, 17 Jun 2024 00:28:46 +0200 Message-Id: <20240616222849.420361-3-ramiro.polla@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20240616222849.420361-1-ramiro.polla@gmail.com> References: <20240616222849.420361-1-ramiro.polla@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/6] swscale/yuv2rgb: fix yuv422p input in C code 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-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: The C code was silently ignoring the second chroma line on yuv422p input. --- libswscale/yuv2rgb.c | 228 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 196 insertions(+), 32 deletions(-) diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c index 7386d3a2a2..1ea87ac17a 100644 --- a/libswscale/yuv2rgb.c +++ b/libswscale/yuv2rgb.c @@ -65,7 +65,7 @@ const int *sws_getCoefficients(int colorspace) return ff_yuv2rgb_coeffs[colorspace]; } -#define LOADCHROMA(i) \ +#define LOADCHROMA(pu, pv, i) \ U = pu[i]; \ V = pv[i]; \ r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ @@ -124,17 +124,13 @@ const int *sws_getCoefficients(int colorspace) dst[12 * i + 8] = dst[12 * i + 9] = g[Y]; \ dst[12 * i + 10] = dst[12 * i + 11] = r[Y]; -#define YUV2RGBFUNC(func_name, dst_type, alpha) \ +#define YUV2RGBFUNC(func_name, dst_type, alpha, yuv422) \ static int func_name(SwsContext *c, const uint8_t *src[], \ int srcStride[], int srcSliceY, int srcSliceH, \ uint8_t *dst[], int dstStride[]) \ { \ int y; \ \ - if (!alpha && c->srcFormat == AV_PIX_FMT_YUV422P) { \ - srcStride[1] *= 2; \ - srcStride[2] *= 2; \ - } \ for (y = 0; y < srcSliceH; y += 2) { \ int yd = y + srcSliceY; \ dst_type *dst_1 = \ @@ -144,10 +140,15 @@ const int *sws_getCoefficients(int colorspace) dst_type av_unused *r, *g, *b; \ const uint8_t *py_1 = src[0] + y * srcStride[0]; \ const uint8_t *py_2 = py_1 + srcStride[0]; \ - const uint8_t av_unused *pu = src[1] + (y >> 1) * srcStride[1]; \ - const uint8_t av_unused *pv = src[2] + (y >> 1) * srcStride[2]; \ + const uint8_t av_unused *pu_1 = src[1] + (y >> !yuv422) * srcStride[1]; \ + const uint8_t av_unused *pv_1 = src[2] + (y >> !yuv422) * srcStride[2]; \ + const uint8_t av_unused *pu_2, *pv_2; \ const uint8_t av_unused *pa_1, *pa_2; \ unsigned int h_size = c->dstW >> 3; \ + if (yuv422) { \ + pu_2 = pu_1 + srcStride[1]; \ + pv_2 = pv_1 + srcStride[2]; \ + } \ if (alpha) { \ pa_1 = src[3] + y * srcStride[3]; \ pa_2 = pa_1 + srcStride[3]; \ @@ -155,9 +156,13 @@ const int *sws_getCoefficients(int colorspace) while (h_size--) { \ int av_unused U, V, Y; \ -#define ENDYUV2RGBLINE(dst_delta, ss, alpha) \ - pu += 4 >> ss; \ - pv += 4 >> ss; \ +#define ENDYUV2RGBLINE(dst_delta, ss, alpha, yuv422) \ + pu_1 += 4 >> ss; \ + pv_1 += 4 >> ss; \ + if (yuv422) { \ + pu_2 += 4 >> ss; \ + pv_2 += 4 >> ss; \ + } \ py_1 += 8 >> ss; \ py_2 += 8 >> ss; \ if (alpha) { \ @@ -177,73 +182,169 @@ const int *sws_getCoefficients(int colorspace) } #define YUV420FUNC(func_name, dst_type, alpha, abase, PUTFUNC, dst_delta) \ - YUV2RGBFUNC(func_name, dst_type, alpha) \ - LOADCHROMA(0); \ + YUV2RGBFUNC(func_name, dst_type, alpha, 0) \ + LOADCHROMA(pu_1, pv_1, 0); \ PUTFUNC(dst_1, py_1, pa_1, 0, abase); \ PUTFUNC(dst_2, py_2, pa_2, 0, abase); \ \ - LOADCHROMA(1); \ + LOADCHROMA(pu_1, pv_1, 1); \ PUTFUNC(dst_2, py_2, pa_2, 1, abase); \ PUTFUNC(dst_1, py_1, pa_1, 1, abase); \ \ - LOADCHROMA(2); \ + LOADCHROMA(pu_1, pv_1, 2); \ PUTFUNC(dst_1, py_1, pa_1, 2, abase); \ PUTFUNC(dst_2, py_2, pa_2, 2, abase); \ \ - LOADCHROMA(3); \ + LOADCHROMA(pu_1, pv_1, 3); \ PUTFUNC(dst_2, py_2, pa_2, 3, abase); \ PUTFUNC(dst_1, py_1, pa_1, 3, abase); \ - ENDYUV2RGBLINE(dst_delta, 0, alpha) \ - LOADCHROMA(0); \ + ENDYUV2RGBLINE(dst_delta, 0, alpha, 0) \ + LOADCHROMA(pu_1, pv_1, 0); \ PUTFUNC(dst_1, py_1, pa_1, 0, abase); \ PUTFUNC(dst_2, py_2, pa_2, 0, abase); \ \ - LOADCHROMA(1); \ + LOADCHROMA(pu_1, pv_1, 1); \ PUTFUNC(dst_2, py_2, pa_2, 1, abase); \ PUTFUNC(dst_1, py_1, pa_1, 1, abase); \ - ENDYUV2RGBLINE(dst_delta, 1, alpha) \ - LOADCHROMA(0); \ + ENDYUV2RGBLINE(dst_delta, 1, alpha, 0) \ + LOADCHROMA(pu_1, pv_1, 0); \ PUTFUNC(dst_1, py_1, pa_1, 0, abase); \ PUTFUNC(dst_2, py_2, pa_2, 0, abase); \ ENDYUV2RGBFUNC() +#define YUV422FUNC(func_name, dst_type, alpha, abase, PUTFUNC, dst_delta) \ + YUV2RGBFUNC(func_name, dst_type, alpha, 1) \ + LOADCHROMA(pu_1, pv_1, 0); \ + PUTFUNC(dst_1, py_1, pa_1, 0, abase); \ + \ + LOADCHROMA(pu_2, pv_2, 0); \ + PUTFUNC(dst_2, py_2, pa_2, 0, abase); \ + \ + LOADCHROMA(pu_2, pv_2, 1); \ + PUTFUNC(dst_2, py_2, pa_2, 1, abase); \ + \ + LOADCHROMA(pu_1, pv_1, 1); \ + PUTFUNC(dst_1, py_1, pa_1, 1, abase); \ + \ + LOADCHROMA(pu_1, pv_1, 2); \ + PUTFUNC(dst_1, py_1, pa_1, 2, abase); \ + \ + LOADCHROMA(pu_2, pv_2, 2); \ + PUTFUNC(dst_2, py_2, pa_2, 2, abase); \ + \ + LOADCHROMA(pu_2, pv_2, 3); \ + PUTFUNC(dst_2, py_2, pa_2, 3, abase); \ + \ + LOADCHROMA(pu_1, pv_1, 3); \ + PUTFUNC(dst_1, py_1, pa_1, 3, abase); \ + ENDYUV2RGBLINE(dst_delta, 0, alpha, 1) \ + LOADCHROMA(pu_1, pv_1, 0); \ + PUTFUNC(dst_1, py_1, pa_1, 0, abase); \ + \ + LOADCHROMA(pu_2, pv_2, 0); \ + PUTFUNC(dst_2, py_2, pa_2, 0, abase); \ + \ + LOADCHROMA(pu_2, pv_2, 1); \ + PUTFUNC(dst_2, py_2, pa_2, 1, abase); \ + \ + LOADCHROMA(pu_1, pv_1, 1); \ + PUTFUNC(dst_1, py_1, pa_1, 1, abase); \ + ENDYUV2RGBLINE(dst_delta, 1, alpha, 1) \ + LOADCHROMA(pu_1, pv_1, 0); \ + PUTFUNC(dst_1, py_1, pa_1, 0, abase); \ + \ + LOADCHROMA(pu_2, pv_2, 0); \ + PUTFUNC(dst_2, py_2, pa_2, 0, abase); \ + ENDYUV2RGBFUNC() + #define YUV420FUNC_DITHER(func_name, dst_type, LOADDITHER, PUTFUNC, dst_delta) \ - YUV2RGBFUNC(func_name, dst_type, 0) \ + YUV2RGBFUNC(func_name, dst_type, 0, 0) \ LOADDITHER \ \ - LOADCHROMA(0); \ + LOADCHROMA(pu_1, pv_1, 0); \ PUTFUNC(dst_1, py_1, 0, 0); \ PUTFUNC(dst_2, py_2, 0, 0 + 8); \ \ - LOADCHROMA(1); \ + LOADCHROMA(pu_1, pv_1, 1); \ PUTFUNC(dst_2, py_2, 1, 2 + 8); \ PUTFUNC(dst_1, py_1, 1, 2); \ \ - LOADCHROMA(2); \ + LOADCHROMA(pu_1, pv_1, 2); \ PUTFUNC(dst_1, py_1, 2, 4); \ PUTFUNC(dst_2, py_2, 2, 4 + 8); \ \ - LOADCHROMA(3); \ + LOADCHROMA(pu_1, pv_1, 3); \ PUTFUNC(dst_2, py_2, 3, 6 + 8); \ PUTFUNC(dst_1, py_1, 3, 6); \ - ENDYUV2RGBLINE(dst_delta, 0, 0) \ + ENDYUV2RGBLINE(dst_delta, 0, 0, 0) \ LOADDITHER \ \ - LOADCHROMA(0); \ + LOADCHROMA(pu_1, pv_1, 0); \ PUTFUNC(dst_1, py_1, 0, 0); \ PUTFUNC(dst_2, py_2, 0, 0 + 8); \ \ - LOADCHROMA(1); \ + LOADCHROMA(pu_1, pv_1, 1); \ PUTFUNC(dst_2, py_2, 1, 2 + 8); \ PUTFUNC(dst_1, py_1, 1, 2); \ - ENDYUV2RGBLINE(dst_delta, 1, 0) \ + ENDYUV2RGBLINE(dst_delta, 1, 0, 0) \ LOADDITHER \ \ - LOADCHROMA(0); \ + LOADCHROMA(pu_1, pv_1, 0); \ PUTFUNC(dst_1, py_1, 0, 0); \ PUTFUNC(dst_2, py_2, 0, 0 + 8); \ ENDYUV2RGBFUNC() +#define YUV422FUNC_DITHER(func_name, dst_type, LOADDITHER, PUTFUNC, dst_delta) \ + YUV2RGBFUNC(func_name, dst_type, 0, 1) \ + LOADDITHER \ + \ + LOADCHROMA(pu_1, pv_1, 0); \ + PUTFUNC(dst_1, py_1, 0, 0); \ + \ + LOADCHROMA(pu_2, pv_2, 0); \ + PUTFUNC(dst_2, py_2, 0, 0 + 8); \ + \ + LOADCHROMA(pu_2, pv_2, 1); \ + PUTFUNC(dst_2, py_2, 1, 2 + 8); \ + \ + LOADCHROMA(pu_1, pv_1, 1); \ + PUTFUNC(dst_1, py_1, 1, 2); \ + \ + LOADCHROMA(pu_1, pv_1, 2); \ + PUTFUNC(dst_1, py_1, 2, 4); \ + \ + LOADCHROMA(pu_2, pv_2, 2); \ + PUTFUNC(dst_2, py_2, 2, 4 + 8); \ + \ + LOADCHROMA(pu_2, pv_2, 3); \ + PUTFUNC(dst_2, py_2, 3, 6 + 8); \ + \ + LOADCHROMA(pu_1, pv_1, 3); \ + PUTFUNC(dst_1, py_1, 3, 6); \ + ENDYUV2RGBLINE(dst_delta, 0, 0, 1) \ + LOADDITHER \ + \ + LOADCHROMA(pu_1, pv_1, 0); \ + PUTFUNC(dst_1, py_1, 0, 0); \ + \ + LOADCHROMA(pu_2, pv_2, 0); \ + PUTFUNC(dst_2, py_2, 0, 0 + 8); \ + \ + LOADCHROMA(pu_2, pv_2, 1); \ + PUTFUNC(dst_2, py_2, 1, 2 + 8); \ + \ + LOADCHROMA(pu_1, pv_1, 1); \ + PUTFUNC(dst_1, py_1, 1, 2); \ + ENDYUV2RGBLINE(dst_delta, 1, 0, 1) \ + LOADDITHER \ + \ + LOADCHROMA(pu_1, pv_1, 0); \ + PUTFUNC(dst_1, py_1, 0, 0); \ + \ + LOADCHROMA(pu_2, pv_2, 0); \ + PUTFUNC(dst_2, py_2, 0, 0 + 8); \ + ENDYUV2RGBFUNC() + #define LOADDITHER16 \ const uint8_t *d16 = ff_dither_2x2_8[y & 1]; \ const uint8_t *e16 = ff_dither_2x2_4[y & 1]; \ @@ -330,7 +431,7 @@ const int *sws_getCoefficients(int colorspace) g[Y + d64[1 + o]] + \ b[Y + d128[1 + o]]; -YUV2RGBFUNC(yuv2rgb_c_1_ordered_dither, uint8_t, 0) +YUV2RGBFUNC(yuv2rgb_c_1_ordered_dither, uint8_t, 0, 0) const uint8_t *d128 = ff_dither_8x8_220[yd & 7]; char out_1 = 0, out_2 = 0; g = c->table_gU[128 + YUVRGB_TABLE_HEADROOM] + c->table_gV[128 + YUVRGB_TABLE_HEADROOM]; @@ -392,6 +493,7 @@ YUV2RGBFUNC(yuv2rgb_c_1_ordered_dither, uint8_t, 0) dst_2[0] = out_2; ENDYUV2RGBFUNC() +// YUV420 YUV420FUNC(yuv2rgb_c_48, uint8_t, 0, 0, PUTRGB48, 48) YUV420FUNC(yuv2rgb_c_bgr48, uint8_t, 0, 0, PUTBGR48, 48) YUV420FUNC(yuv2rgb_c_32, uint32_t, 0, 0, PUTRGB, 8) @@ -411,6 +513,26 @@ YUV420FUNC_DITHER(yuv2rgb_c_8_ordered_dither, uint8_t, LOADDITHER8, PUTRGB8, YUV420FUNC_DITHER(yuv2rgb_c_4_ordered_dither, uint8_t, LOADDITHER4D, PUTRGB4D, 4) YUV420FUNC_DITHER(yuv2rgb_c_4b_ordered_dither, uint8_t, LOADDITHER4DB, PUTRGB4DB, 8) +// YUV422 +YUV422FUNC(yuv422p_rgb48_c, uint8_t, 0, 0, PUTRGB48, 48) +YUV422FUNC(yuv422p_bgr48_c, uint8_t, 0, 0, PUTBGR48, 48) +YUV422FUNC(yuv422p_rgb32_c, uint32_t, 0, 0, PUTRGB, 8) +#if HAVE_BIGENDIAN +YUV422FUNC(yuva422p_argb_c, uint32_t, 1, 24, PUTRGBA, 8) +YUV422FUNC(yuva422p_rgba_c, uint32_t, 1, 0, PUTRGBA, 8) +#else +YUV422FUNC(yuva422p_rgba_c, uint32_t, 1, 24, PUTRGBA, 8) +YUV422FUNC(yuva422p_argb_c, uint32_t, 1, 0, PUTRGBA, 8) +#endif +YUV422FUNC(yuv422p_rgb24_c, uint8_t, 0, 0, PUTRGB24, 24) +YUV422FUNC(yuv422p_bgr24_c, uint8_t, 0, 0, PUTBGR24, 24) +YUV422FUNC_DITHER(yuv422p_bgr16, uint16_t, LOADDITHER16, PUTRGB16, 8) +YUV422FUNC_DITHER(yuv422p_bgr15, uint16_t, LOADDITHER15, PUTRGB15, 8) +YUV422FUNC_DITHER(yuv422p_bgr12, uint16_t, LOADDITHER12, PUTRGB12, 8) +YUV422FUNC_DITHER(yuv422p_bgr8, uint8_t, LOADDITHER8, PUTRGB8, 8) +YUV422FUNC_DITHER(yuv422p_bgr4, uint8_t, LOADDITHER4D, PUTRGB4D, 4) +YUV422FUNC_DITHER(yuv422p_bgr4_byte, uint8_t, LOADDITHER4DB, PUTRGB4DB, 8) + SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c) { SwsFunc t = NULL; @@ -430,6 +552,47 @@ SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c) "No accelerated colorspace conversion found from %s to %s.\n", av_get_pix_fmt_name(c->srcFormat), av_get_pix_fmt_name(c->dstFormat)); + if (c->srcFormat == AV_PIX_FMT_YUV422P) { + switch (c->dstFormat) { + case AV_PIX_FMT_BGR48BE: + case AV_PIX_FMT_BGR48LE: + return yuv422p_bgr48_c; + case AV_PIX_FMT_RGB48BE: + case AV_PIX_FMT_RGB48LE: + return yuv422p_rgb48_c; + case AV_PIX_FMT_ARGB: + case AV_PIX_FMT_ABGR: + if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) + return yuva422p_argb_c; + case AV_PIX_FMT_RGBA: + case AV_PIX_FMT_BGRA: + return (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) ? yuva422p_rgba_c : yuv422p_rgb32_c; + case AV_PIX_FMT_RGB24: + return yuv422p_rgb24_c; + case AV_PIX_FMT_BGR24: + return yuv422p_bgr24_c; + case AV_PIX_FMT_RGB565: + case AV_PIX_FMT_BGR565: + return yuv422p_bgr16; + case AV_PIX_FMT_RGB555: + case AV_PIX_FMT_BGR555: + return yuv422p_bgr15; + case AV_PIX_FMT_RGB444: + case AV_PIX_FMT_BGR444: + return yuv422p_bgr12; + case AV_PIX_FMT_RGB8: + case AV_PIX_FMT_BGR8: + return yuv422p_bgr8; + case AV_PIX_FMT_RGB4: + case AV_PIX_FMT_BGR4: + return yuv422p_bgr4; + case AV_PIX_FMT_RGB4_BYTE: + case AV_PIX_FMT_BGR4_BYTE: + return yuv422p_bgr4_byte; + case AV_PIX_FMT_MONOBLACK: + return yuv2rgb_c_1_ordered_dither; + } + } else { switch (c->dstFormat) { case AV_PIX_FMT_BGR48BE: case AV_PIX_FMT_BGR48LE: @@ -469,6 +632,7 @@ SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c) case AV_PIX_FMT_MONOBLACK: return yuv2rgb_c_1_ordered_dither; } + } return NULL; } -- 2.30.2 _______________________________________________ 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".