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

Michael Niedermayer michaelni
Sat Apr 11 17:10:31 CEST 2009


On Sat, Apr 11, 2009 at 10:30:22AM +0200, C?dric Schieli wrote:
> 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

probably ok

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Complexity theory is the science of finding the exact solution to an
approximation. Benchmarking OTOH is finding an approximation of the exact
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-cvslog/attachments/20090411/83ce9513/attachment.pgp>



More information about the ffmpeg-cvslog mailing list