[FFmpeg-cvslog] r29145 - in trunk/libswscale: swscale.c swscale_internal.h swscale_template.c

Cédric Schieli cschieli
Sat Apr 11 10:30:22 CEST 2009


2009/4/5 ramiro <subversion at mplayerhq.hu>:
> Author: ramiro
> Date: Sun Apr ?5 00:45:02 2009
> New Revision: 29145
>
> Log:
> swscale: Use function pointers for swScale functions.
>
> Modified:
> ? trunk/libswscale/swscale.c
> ? trunk/libswscale/swscale_internal.h
> ? trunk/libswscale/swscale_template.c

[...]

> Modified: trunk/libswscale/swscale_template.c
> ==============================================================================
> --- trunk/libswscale/swscale_template.c Sun Apr ?5 00:43:24 2009 ? ? ? ?(r29144)
> +++ trunk/libswscale/swscale_template.c Sun Apr ?5 00:45:02 2009 ? ? ? ?(r29145)

[...]

> @@ -2273,91 +2273,16 @@ static inline void RENAME(hyscale)(SwsCo
> ? ? int canMMX2BeUsed = c->canMMX2BeUsed;
> ? ? void *funnyYCode = c->funnyYCode;
>
> - ? ?if (srcFormat==PIX_FMT_YUYV422 || srcFormat==PIX_FMT_GRAY16BE)
> - ? ?{
> - ? ? ? ?RENAME(yuy2ToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_UYVY422 || srcFormat==PIX_FMT_GRAY16LE)
> - ? ?{
> - ? ? ? ?RENAME(uyvyToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_RGB32)
> - ? ?{
> - ? ? ? ?if (isAlpha)
> - ? ? ? ? ? ?RENAME(abgrToA)(formatConvBuffer, src+3, srcW, pal);
> - ? ? ? ?else
> - ? ? ? ? ? ?RENAME(bgr32ToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_RGB32_1)
> - ? ?{
> - ? ? ? ?if (isAlpha)
> - ? ? ? ? ? ?RENAME(abgrToA)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?else
> - ? ? ? ? ? ?RENAME(bgr32ToY)(formatConvBuffer, src+ALT32_CORR, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_BGR24)
> - ? ?{
> - ? ? ? ?RENAME(bgr24ToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_BGR565)
> - ? ?{
> - ? ? ? ?RENAME(bgr16ToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_BGR555)
> - ? ?{
> - ? ? ? ?RENAME(bgr15ToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_BGR32)
> - ? ?{
> - ? ? ? ?if (isAlpha)
> - ? ? ? ? ? ?RENAME(abgrToA)(formatConvBuffer, src+3, srcW, pal);
> - ? ? ? ?else
> - ? ? ? ? ? ?RENAME(rgb32ToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_BGR32_1)
> - ? ?{
> - ? ? ? ?if (isAlpha)
> - ? ? ? ? ? ?RENAME(abgrToA)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?else
> - ? ? ? ? ? ?RENAME(rgb32ToY)(formatConvBuffer, src+ALT32_CORR, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_RGB24)
> - ? ?{
> - ? ? ? ?RENAME(rgb24ToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_RGB565)
> - ? ?{
> - ? ? ? ?RENAME(rgb16ToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_RGB555)
> - ? ?{
> - ? ? ? ?RENAME(rgb15ToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_RGB8 || srcFormat==PIX_FMT_BGR8 || srcFormat==PIX_FMT_PAL8 || srcFormat==PIX_FMT_BGR4_BYTE ?|| srcFormat==PIX_FMT_RGB4_BYTE)
> - ? ?{
> - ? ? ? ?RENAME(palToY)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> - ? ?}
> - ? ?else if (srcFormat==PIX_FMT_MONOBLACK)
> - ? ?{
> - ? ? ? ?RENAME(monoblack2Y)(formatConvBuffer, src, srcW, pal);
> - ? ? ? ?src= formatConvBuffer;
> + ? ?if (isAlpha) {
> + ? ? ? ?if (srcFormat == PIX_FMT_RGB32 ? || srcFormat == PIX_FMT_BGR32 ?)
> + ? ? ? ? ? ?src += 3;
> + ? ?} else {
> + ? ? ? ?if (srcFormat == PIX_FMT_RGB32_1 || srcFormat == PIX_FMT_BGR32_1)
> + ? ? ? ? ? ?src += ALT32_CORR;
> ? ? }
> - ? ?else if (srcFormat==PIX_FMT_MONOWHITE)
> - ? ?{
> - ? ? ? ?RENAME(monowhite2Y)(formatConvBuffer, src, srcW, pal);
> +
> + ? ?if (c->hyscale_internal) {
> + ? ? ? ?c->hyscale_internal(formatConvBuffer, src, srcW, pal);
> ? ? ? ? src= formatConvBuffer;
> ? ? }
>

[...]

> @@ -3232,3 +3058,94 @@ static int RENAME(swScale)(SwsContext *c
>
> ? ? return dstY - lastDstY;
> ?}
> +
> +static void RENAME(sws_init_swScale)(SwsContext *c)
> +{
> + ? ?enum PixelFormat srcFormat = c->srcFormat;
> +
> + ? ?c->yuv2nv12X ? ?= RENAME(yuv2nv12X ? );
> + ? ?c->yuv2yuv1 ? ? = RENAME(yuv2yuv1 ? ?);
> + ? ?c->yuv2yuvX ? ? = RENAME(yuv2yuvX ? ?);
> + ? ?c->yuv2packed1 ?= RENAME(yuv2packed1 );
> + ? ?c->yuv2packed2 ?= RENAME(yuv2packed2 );
> + ? ?c->yuv2packedX ?= RENAME(yuv2packedX );
> +
> + ? ?c->hScale ? ? ? = RENAME(hScale ? ? ?);
> +
> + ? ?c->hyscale_fast = RENAME(hyscale_fast);
> + ? ?c->hcscale_fast = RENAME(hcscale_fast);
> +
> + ? ?c->hcscale_internal = NULL;
> + ? ?switch(srcFormat) {
> + ? ? ? ?case PIX_FMT_YUYV422 ?: c->hcscale_internal = RENAME(yuy2ToUV); break;
> + ? ? ? ?case PIX_FMT_UYVY422 ?: c->hcscale_internal = RENAME(uyvyToUV); break;
> + ? ? ? ?case PIX_FMT_RGB8 ? ? :
> + ? ? ? ?case PIX_FMT_BGR8 ? ? :
> + ? ? ? ?case PIX_FMT_PAL8 ? ? :
> + ? ? ? ?case PIX_FMT_BGR4_BYTE:
> + ? ? ? ?case PIX_FMT_RGB4_BYTE: c->hcscale_internal = RENAME(palToUV); break;
> + ? ?}
> + ? ?if (c->chrSrcHSubSample) {
> + ? ? ? ?switch(srcFormat) {
> + ? ? ? ?case PIX_FMT_RGB32 ?:
> + ? ? ? ?case PIX_FMT_RGB32_1: c->hcscale_internal = RENAME(bgr32ToUV_half); break;
> + ? ? ? ?case PIX_FMT_BGR24 ?: c->hcscale_internal = RENAME(bgr24ToUV_half); break;
> + ? ? ? ?case PIX_FMT_BGR565 : c->hcscale_internal = RENAME(bgr16ToUV_half); break;
> + ? ? ? ?case PIX_FMT_BGR555 : c->hcscale_internal = RENAME(bgr15ToUV_half); break;
> + ? ? ? ?case PIX_FMT_BGR32 ?:
> + ? ? ? ?case PIX_FMT_BGR32_1: c->hcscale_internal = RENAME(rgb32ToUV_half); break;
> + ? ? ? ?case PIX_FMT_RGB24 ?: c->hcscale_internal = RENAME(rgb24ToUV_half); break;
> + ? ? ? ?case PIX_FMT_RGB565 : c->hcscale_internal = RENAME(rgb16ToUV_half); break;
> + ? ? ? ?case PIX_FMT_RGB555 : c->hcscale_internal = RENAME(rgb15ToUV_half); break;
> + ? ? ? ?}
> + ? ?} else {
> + ? ? ? ?switch(srcFormat) {
> + ? ? ? ?case PIX_FMT_RGB32 ?:
> + ? ? ? ?case PIX_FMT_RGB32_1: c->hcscale_internal = RENAME(bgr32ToUV); break;
> + ? ? ? ?case PIX_FMT_BGR24 ?: c->hcscale_internal = RENAME(bgr24ToUV); break;
> + ? ? ? ?case PIX_FMT_BGR565 : c->hcscale_internal = RENAME(bgr16ToUV); break;
> + ? ? ? ?case PIX_FMT_BGR555 : c->hcscale_internal = RENAME(bgr15ToUV); break;
> + ? ? ? ?case PIX_FMT_BGR32 ?:
> + ? ? ? ?case PIX_FMT_BGR32_1: c->hcscale_internal = RENAME(rgb32ToUV); break;
> + ? ? ? ?case PIX_FMT_RGB24 ?: c->hcscale_internal = RENAME(rgb24ToUV); break;
> + ? ? ? ?case PIX_FMT_RGB565 : c->hcscale_internal = RENAME(rgb16ToUV); break;
> + ? ? ? ?case PIX_FMT_RGB555 : c->hcscale_internal = RENAME(rgb15ToUV); break;
> + ? ? ? ?}
> + ? ?}
> +
> + ? ?c->hyscale_internal = NULL;
> + ? ?switch (srcFormat) {
> + ? ?case PIX_FMT_YUYV422 ?:
> + ? ?case PIX_FMT_GRAY16BE : c->hyscale_internal = RENAME(yuy2ToY); break;
> + ? ?case PIX_FMT_UYVY422 ?:
> + ? ?case PIX_FMT_GRAY16LE : c->hyscale_internal = RENAME(uyvyToY); break;
> + ? ?case PIX_FMT_BGR24 ? ?: c->hyscale_internal = RENAME(bgr24ToY); break;
> + ? ?case PIX_FMT_BGR565 ? : c->hyscale_internal = RENAME(bgr16ToY); break;
> + ? ?case PIX_FMT_BGR555 ? : c->hyscale_internal = RENAME(bgr15ToY); break;
> + ? ?case PIX_FMT_RGB24 ? ?: c->hyscale_internal = RENAME(rgb24ToY); break;
> + ? ?case PIX_FMT_RGB565 ? : c->hyscale_internal = RENAME(rgb16ToY); break;
> + ? ?case PIX_FMT_RGB555 ? : c->hyscale_internal = RENAME(rgb15ToY); break;
> + ? ?case PIX_FMT_RGB8 ? ? :
> + ? ?case PIX_FMT_BGR8 ? ? :
> + ? ?case PIX_FMT_PAL8 ? ? :
> + ? ?case PIX_FMT_BGR4_BYTE:
> + ? ?case PIX_FMT_RGB4_BYTE: c->hyscale_internal = RENAME(palToY); break;
> + ? ?case PIX_FMT_MONOBLACK: c->hyscale_internal = RENAME(monoblack2Y); break;
> + ? ?case PIX_FMT_MONOWHITE: c->hyscale_internal = RENAME(monowhite2Y); break;
> + ? ?}
> + ? ?if (c->alpPixBuf) {
> + ? ? ? ?switch (srcFormat) {
> + ? ? ? ?case PIX_FMT_RGB32 ?:
> + ? ? ? ?case PIX_FMT_RGB32_1:
> + ? ? ? ?case PIX_FMT_BGR32 ?:
> + ? ? ? ?case PIX_FMT_BGR32_1: c->hyscale_internal = RENAME(abgrToA); break;
> + ? ? ? ?}
> + ? ?} else {
> + ? ? ? ?switch (srcFormat) {
> + ? ? ? ?case PIX_FMT_RGB32 ?:
> + ? ? ? ?case PIX_FMT_RGB32_1: c->hyscale_internal = RENAME(bgr32ToY); break;
> + ? ? ? ?case PIX_FMT_BGR32 ?:
> + ? ? ? ?case PIX_FMT_BGR32_1: c->hyscale_internal = RENAME(rgb32ToY); break;
> + ? ? ? ?}
> + ? ?}
> +}

This breaks RGB32 (et al.) scaling by using abgrToA for both luma and
alpha channels (isAlpha=0 and isAlpha=1 in hyscale)

Attached patch fixes it


Regards,
C?dric Schieli
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sws_fix_rgb32.patch
Type: text/x-patch
Size: 3114 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-cvslog/attachments/20090411/e98a2fbe/attachment-0001.bin>



More information about the ffmpeg-cvslog mailing list