On Mon, Oct 07, 2024 at 09:29:43AM -0300, James Almer wrote: > Signed-off-by: James Almer <jamr...@gmail.com> > --- > libswscale/output.c | 56 ++++++++++++++++++++++++ > libswscale/utils.c | 2 +- > tests/ref/fate/filter-pixdesc-ayuv | 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, 69 insertions(+), 1 deletion(-) > create mode 100644 tests/ref/fate/filter-pixdesc-ayuv > > diff --git a/libswscale/output.c b/libswscale/output.c > index e5d555f76f..4d6b9d553b 100644 > --- a/libswscale/output.c > +++ b/libswscale/output.c > @@ -2825,6 +2825,59 @@ yuv2vuyX_X_c(SwsContext *c, const int16_t *lumFilter, > } > } > > +static void > +yuv2ayuv_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, A = 255; > + > + 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); > + > + if (alpSrc) { > + A = 1 << 18; > + > + for (j = 0; j < lumFilterSize; j++) > + A += alpSrc[j][i] * lumFilter[j]; > + > + A >>= 19; > + > + if (A & 0x100) > + A = av_clip_uint8(A); > + } > + > + dest[4 * i ] = A; > + dest[4 * i + 1] = Y; > + dest[4 * i + 2] = U; > + dest[4 * i + 3] = V; > + } > +}
please dont repeat a nearly identical function for each case see output_pixel(s) > + > #define output_pixel(pos, val, bits) \ > AV_WL16(pos, av_clip_uintp2(val >> shift, bits) << output_shift); > > @@ -3377,6 +3430,9 @@ av_cold void ff_sws_init_output_funcs(SwsContext *c, > case AV_PIX_FMT_AYUV64LE: > *yuv2packedX = yuv2ayuv64le_X_c; > break; > + case AV_PIX_FMT_AYUV: > + *yuv2packedX = yuv2ayuv_X_c; > + break; if this covers all needed/used cases, ok thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Avoid a single point of failure, be that a person or equipment.
signature.asc
Description: PGP 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".