On 10/11/2024 7:46 PM, Michael Niedermayer wrote:
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-ayuvdiff --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 ?)
No, just figured doing it like this. I can make it an always inline function.
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".