On Tue, Oct 08, 2024 at 07:50:11PM -0300, James Almer wrote: > Signed-off-by: James Almer <jamr...@gmail.com> > --- > libswscale/output.c | 323 ++++++++++++----------- > 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, 183 insertions(+), 154 deletions(-) > create mode 100644 tests/ref/fate/filter-pixdesc-ayuv > > diff --git a/libswscale/output.c b/libswscale/output.c > index c9dfd6f60a..328b108089 100644 > --- a/libswscale/output.c > +++ b/libswscale/output.c > @@ -2668,165 +2668,177 @@ yuv2xv36le_X_c(SwsContext *c, const int16_t > *lumFilter, > } > } > > -static void > -yuv2vuyX_1_c(SwsContext *c, const int16_t *buf0, > - const int16_t *ubuf[2], const int16_t *vbuf[2], > - const int16_t *abuf0, uint8_t *dest, int dstW, > - int uvalpha, int y) > -{ > - int hasAlpha = !!abuf0; > - int i; > - > - if (uvalpha < 2048) { > - for (i = 0; i < dstW; i++) { > - int Y = (buf0[i] + 64) >> 7; > - int U = (ubuf[0][i] + 64) >> 7; > - int V = (vbuf[0][i] + 64) >> 7; > - int A = 255; > - > - 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 (hasAlpha) { > - A = (abuf0[i] + 64) >> 7; > - if (A & 0x100) > - A = av_clip_uint8(A); > - } > - > - dest[4 * i ] = V; > - dest[4 * i + 1] = U; > - dest[4 * i + 2] = Y; > - dest[4 * i + 3] = A; > - } > - } else { > - for (i = 0; i < dstW; i++) { > - int Y = (buf0[i] + 64) >> 7; > - int U = (ubuf[0][i] + ubuf[1][i] + 128) >> 8; > - int V = (vbuf[0][i] + vbuf[1][i] + 128) >> 8; > - int A = 255; > - > - 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 (hasAlpha) { > - A = (abuf0[i] + 64) >> 7; > - if (A & 0x100) > - A = av_clip_uint8(A); > - } > - > - dest[4 * i ] = V; > - dest[4 * i + 1] = U; > - dest[4 * i + 2] = Y; > - dest[4 * i + 3] = A; > - } > - } > +#define AYUV_1_WRAPPER(fmt, C0, C1, C2, C3) \ > +static void \ > +yuv2 ## fmt ##_1_c(SwsContext *c, const int16_t *buf0, \ > + const int16_t *ubuf[2], const int16_t *vbuf[2], \ > + const int16_t *abuf0, uint8_t *dest, int dstW, \ > + int uvalpha, int y) \ > +{ \ > + int hasAlpha = !!abuf0; \ > + int i; \ > + \ > + if (uvalpha < 2048) { \ > + for (i = 0; i < dstW; i++) { \ > + int Y = (buf0[i] + 64) >> 7; \ > + int U = (ubuf[0][i] + 64) >> 7; \ > + int V = (vbuf[0][i] + 64) >> 7; \ > + int A = 255; \ > + \ > + 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 (hasAlpha) { \ > + A = (abuf0[i] + 64) >> 7; \ > + if (A & 0x100) \ > + A = av_clip_uint8(A); \ > + } \ > + \ > + dest[4 * i ] = (C0); \ > + dest[4 * i + 1] = (C1); \ > + dest[4 * i + 2] = (C2); \ > + dest[4 * i + 3] = (C3); \ > + } \ > + } else { \ > + for (i = 0; i < dstW; i++) { \ > + int Y = (buf0[i] + 64) >> 7; \ > + int U = (ubuf[0][i] + ubuf[1][i] + 128) >> 8; \ > + int V = (vbuf[0][i] + vbuf[1][i] + 128) >> 8; \ > + int A = 255; \ > + \ > + 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 (hasAlpha) { \ > + A = (abuf0[i] + 64) >> 7; \ > + if (A & 0x100) \ > + A = av_clip_uint8(A); \ > + } \ > + \ > + dest[4 * i ] = (C0); \ > + dest[4 * i + 1] = (C1); \ > + dest[4 * i + 2] = (C2); \ > + dest[4 * i + 3] = (C3); \ > + } \ > + } \ > }
Is there an advantage in using huge multiline macros here ? This is ugly and hard to maintain code. Simply writing a always inline function and trusting that the compiler will inline it should result in more normal C code and the same result (is it faster ? or has some other advanatge ?) thx [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The greatest way to live with honor in this world is to be what we pretend to be. -- Socrates
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".