X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libswscale%2Fyuv2rgb.c;h=073fa665cf4ea598e55cf536d0371d8595c843f7;hb=8672fc7b0453098d862bb1c0caafab4823ee0b4e;hp=67cf19ec0303b4d3d0f78649783e8e9ff2d7ab86;hpb=11a1033c9fcae380f4da06b2b0253ab0eb82b026;p=ffmpeg diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c index 67cf19ec030..073fa665cf4 100644 --- a/libswscale/yuv2rgb.c +++ b/libswscale/yuv2rgb.c @@ -149,15 +149,15 @@ const int *sws_getCoefficients(int colorspace) while (h_size--) { \ int av_unused U, V, Y; \ -#define ENDYUV2RGBLINE(dst_delta) \ - pu += 4; \ - pv += 4; \ - py_1 += 8; \ - py_2 += 8; \ - dst_1 += dst_delta; \ - dst_2 += dst_delta; \ +#define ENDYUV2RGBLINE(dst_delta, ss) \ + pu += 4 >> ss; \ + pv += 4 >> ss; \ + py_1 += 8 >> ss; \ + py_2 += 8 >> ss; \ + dst_1 += dst_delta >> ss; \ + dst_2 += dst_delta >> ss; \ } \ - if (c->dstW & 4) { \ + if (c->dstW & (4 >> ss)) { \ int av_unused Y, U, V; \ #define ENDYUV2RGBFUNC() \ @@ -167,7 +167,7 @@ const int *sws_getCoefficients(int colorspace) } #define CLOSEYUV2RGBFUNC(dst_delta) \ - ENDYUV2RGBLINE(dst_delta) \ + ENDYUV2RGBLINE(dst_delta, 0) \ ENDYUV2RGBFUNC() YUV2RGBFUNC(yuv2rgb_c_48, uint8_t, 0) @@ -186,7 +186,7 @@ YUV2RGBFUNC(yuv2rgb_c_48, uint8_t, 0) LOADCHROMA(3); PUTRGB48(dst_2, py_2, 3); PUTRGB48(dst_1, py_1, 3); -ENDYUV2RGBLINE(48) +ENDYUV2RGBLINE(48, 0) LOADCHROMA(0); PUTRGB48(dst_1, py_1, 0); PUTRGB48(dst_2, py_2, 0); @@ -194,6 +194,10 @@ ENDYUV2RGBLINE(48) LOADCHROMA(1); PUTRGB48(dst_2, py_2, 1); PUTRGB48(dst_1, py_1, 1); +ENDYUV2RGBLINE(48, 1) + LOADCHROMA(0); + PUTRGB48(dst_1, py_1, 0); + PUTRGB48(dst_2, py_2, 0); ENDYUV2RGBFUNC() YUV2RGBFUNC(yuv2rgb_c_bgr48, uint8_t, 0) @@ -212,7 +216,7 @@ YUV2RGBFUNC(yuv2rgb_c_bgr48, uint8_t, 0) LOADCHROMA(3); PUTBGR48(dst_2, py_2, 3); PUTBGR48(dst_1, py_1, 3); -ENDYUV2RGBLINE(48) +ENDYUV2RGBLINE(48, 0) LOADCHROMA(0); PUTBGR48(dst_1, py_1, 0); PUTBGR48(dst_2, py_2, 0); @@ -220,6 +224,10 @@ ENDYUV2RGBLINE(48) LOADCHROMA(1); PUTBGR48(dst_2, py_2, 1); PUTBGR48(dst_1, py_1, 1); +ENDYUV2RGBLINE(48, 1) + LOADCHROMA(0); + PUTBGR48(dst_1, py_1, 0); + PUTBGR48(dst_2, py_2, 0); ENDYUV2RGBFUNC() YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0) @@ -238,7 +246,7 @@ YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0) LOADCHROMA(3); PUTRGB(dst_2, py_2, 3); PUTRGB(dst_1, py_1, 3); -ENDYUV2RGBLINE(8) +ENDYUV2RGBLINE(8, 0) LOADCHROMA(0); PUTRGB(dst_1, py_1, 0); PUTRGB(dst_2, py_2, 0); @@ -246,6 +254,10 @@ ENDYUV2RGBLINE(8) LOADCHROMA(1); PUTRGB(dst_2, py_2, 1); PUTRGB(dst_1, py_1, 1); +ENDYUV2RGBLINE(8, 1) + LOADCHROMA(0); + PUTRGB(dst_1, py_1, 0); + PUTRGB(dst_2, py_2, 0); ENDYUV2RGBFUNC() YUV2RGBFUNC(yuva2rgba_c, uint32_t, 1) @@ -266,7 +278,7 @@ YUV2RGBFUNC(yuva2rgba_c, uint32_t, 1) PUTRGBA(dst_1, py_1, pa_2, 3, 24); pa_1 += 8; \ pa_2 += 8; \ -ENDYUV2RGBLINE(8) +ENDYUV2RGBLINE(8, 0) LOADCHROMA(0); PUTRGBA(dst_1, py_1, pa_1, 0, 24); PUTRGBA(dst_2, py_2, pa_2, 0, 24); @@ -274,6 +286,12 @@ ENDYUV2RGBLINE(8) LOADCHROMA(1); PUTRGBA(dst_2, py_2, pa_1, 1, 24); PUTRGBA(dst_1, py_1, pa_2, 1, 24); + pa_1 += 4; \ + pa_2 += 4; \ +ENDYUV2RGBLINE(8, 1) + LOADCHROMA(0); + PUTRGBA(dst_1, py_1, pa_1, 0, 24); + PUTRGBA(dst_2, py_2, pa_2, 0, 24); ENDYUV2RGBFUNC() YUV2RGBFUNC(yuva2argb_c, uint32_t, 1) @@ -294,7 +312,7 @@ YUV2RGBFUNC(yuva2argb_c, uint32_t, 1) PUTRGBA(dst_1, py_1, pa_1, 3, 0); pa_1 += 8; \ pa_2 += 8; \ -ENDYUV2RGBLINE(8) +ENDYUV2RGBLINE(8, 0) LOADCHROMA(0); PUTRGBA(dst_1, py_1, pa_1, 0, 0); PUTRGBA(dst_2, py_2, pa_2, 0, 0); @@ -302,6 +320,12 @@ ENDYUV2RGBLINE(8) LOADCHROMA(1); PUTRGBA(dst_2, py_2, pa_2, 1, 0); PUTRGBA(dst_1, py_1, pa_1, 1, 0); + pa_1 += 4; \ + pa_2 += 4; \ +ENDYUV2RGBLINE(8, 1) + LOADCHROMA(0); + PUTRGBA(dst_1, py_1, pa_1, 0, 0); + PUTRGBA(dst_2, py_2, pa_2, 0, 0); ENDYUV2RGBFUNC() YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0) @@ -320,7 +344,7 @@ YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0) LOADCHROMA(3); PUTRGB24(dst_2, py_2, 3); PUTRGB24(dst_1, py_1, 3); -ENDYUV2RGBLINE(24) +ENDYUV2RGBLINE(24, 0) LOADCHROMA(0); PUTRGB24(dst_1, py_1, 0); PUTRGB24(dst_2, py_2, 0); @@ -328,6 +352,10 @@ ENDYUV2RGBLINE(24) LOADCHROMA(1); PUTRGB24(dst_2, py_2, 1); PUTRGB24(dst_1, py_1, 1); +ENDYUV2RGBLINE(24, 1) + LOADCHROMA(0); + PUTRGB24(dst_1, py_1, 0); + PUTRGB24(dst_2, py_2, 0); ENDYUV2RGBFUNC() // only trivial mods from yuv2rgb_c_24_rgb @@ -347,7 +375,7 @@ YUV2RGBFUNC(yuv2rgb_c_24_bgr, uint8_t, 0) LOADCHROMA(3); PUTBGR24(dst_2, py_2, 3); PUTBGR24(dst_1, py_1, 3); -ENDYUV2RGBLINE(24) +ENDYUV2RGBLINE(24, 0) LOADCHROMA(0); PUTBGR24(dst_1, py_1, 0); PUTBGR24(dst_2, py_2, 0); @@ -355,6 +383,10 @@ ENDYUV2RGBLINE(24) LOADCHROMA(1); PUTBGR24(dst_2, py_2, 1); PUTBGR24(dst_1, py_1, 1); +ENDYUV2RGBLINE(24, 1) + LOADCHROMA(0); + PUTBGR24(dst_1, py_1, 0); + PUTBGR24(dst_2, py_2, 0); ENDYUV2RGBFUNC() YUV2RGBFUNC(yuv2rgb_c_16_ordered_dither, uint16_t, 0)