On 10/8/2024 4:56 PM, Michael Niedermayer wrote:
On Mon, Oct 07, 2024 at 09:29:45AM -0300, James Almer wrote:Signed-off-by: James Almer <jamr...@gmail.com> --- libswscale/output.c | 43 ++++++++++++++++++++++++ libswscale/utils.c | 2 +- tests/ref/fate/filter-pixdesc-vyu444 | 1 + tests/ref/fate/filter-pixfmts-copy | 1 + tests/ref/fate/filter-pixfmts-crop | 1 + tests/ref/fate/filter-pixfmts-field | 1 + tests/ref/fate/filter-pixfmts-fieldorder | 1 + tests/ref/fate/filter-pixfmts-hflip | 1 + tests/ref/fate/filter-pixfmts-il | 1 + tests/ref/fate/filter-pixfmts-null | 1 + tests/ref/fate/filter-pixfmts-pad | 1 + tests/ref/fate/filter-pixfmts-scale | 1 + tests/ref/fate/filter-pixfmts-transpose | 1 + tests/ref/fate/filter-pixfmts-vflip | 1 + 14 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 tests/ref/fate/filter-pixdesc-vyu444diff --git a/libswscale/output.c b/libswscale/output.c index a11bedde95..6716cfad34 100644 --- a/libswscale/output.c +++ b/libswscale/output.c @@ -2931,6 +2931,46 @@ yuv2uyva_X_c(SwsContext *c, const int16_t *lumFilter, } }+static void+yuv2vyu444_X_c(SwsContext *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) +{ + int i; + + for (i = 0; i < dstW; i++) { + int j; + int Y = 1 << 18, U = 1 << 18; + int V = 1 << 18; + + for (j = 0; j < lumFilterSize; j++) + Y += lumSrc[j][i] * lumFilter[j]; + + for (j = 0; j < chrFilterSize; j++) + U += chrUSrc[j][i] * chrFilter[j]; + + for (j = 0; j < chrFilterSize; j++) + V += chrVSrc[j][i] * chrFilter[j]; + + Y >>= 19; + U >>= 19; + V >>= 19; + + if (Y & 0x100) + Y = av_clip_uint8(Y); + if (U & 0x100) + U = av_clip_uint8(U); + if (V & 0x100) + V = av_clip_uint8(V); + + dest[3 * i ] = V; + dest[3 * i + 1] = Y; + dest[3 * i + 2] = U; + } +} + #define output_pixel(pos, val, bits) \ AV_WL16(pos, av_clip_uintp2(val >> shift, bits) << output_shift);@@ -3465,6 +3505,9 @@ av_cold void ff_sws_init_output_funcs(SwsContext *c,*yuv2packed2 = yuv2uyvy422_2_c; *yuv2packedX = yuv2uyvy422_X_c; break; + case AV_PIX_FMT_VYU444: + *yuv2packedX = yuv2vyu444_X_c; + break;does this work in the unscaled and 2 tap scaling cases ? (which would normally use teh other 2pointers
I tried./ffmpeg.exe -noauto_conversion_filters -cpuflags 0 -f image2 -c:v pgmyuv -i ./tests/vsynth1/%02d.pgm -vf scale=sws_flags=bilinear,format=vyu444 -vcodec rawvideo -pix_fmt vyu444 -frames:v 1 -y out.nut
And it works (The output looks fine with ffplay). Is there some other way to test that?
OpenPGP_signature.asc
Description: OpenPGP digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".