[FFmpeg-devel] [RFC] Make swscale-test perform only one convertion

Ramiro Polla ramiro.polla
Thu Feb 18 07:10:44 CET 2010


On Thu, Feb 18, 2010 at 2:25 AM, Ramiro Polla <ramiro.polla at gmail.com> wrote:
> swscale-test is currently crashing in Windows in ./swscale-test.exe
> rgb24 argb. Apparently due to heap corruption (that's what windows
> says), but I couldn't find out the exact cause yet.

It crashes on:
 rgb24 96x96 -> argb   96x  96 flags=16

While trying to free dst in swscale-test.c:doTest()
    for (i=0; i<4; i++) {
        av_free(src[i]);
        av_free(dst[i]);
        av_free(out[i]);
    }

The function rgb24tobgr32 has overwritten data past the end of its
destination pointer because swscale.c:rgbToRgbWrapper() checks:
        if ((dstFormat == PIX_FMT_RGB32_1 || dstFormat ==
PIX_FMT_BGR32_1) && !isRGBA32(srcFormat))
            dstPtr += ALT32_CORR;
and increments dstPtr.

Stefano, I see that you have added that !isRGBA32() there. Could you
double check if this is correct for all cases? Shouldn't it actually
be:

Index: swscale.c
===================================================================
--- swscale.c	(revision 30631)
+++ swscale.c	(working copy)
@@ -1502,10 +1502,10 @@
     } else {
         const uint8_t *srcPtr= src[0];
               uint8_t *dstPtr= dst[0];
-        if ((srcFormat == PIX_FMT_RGB32_1 || srcFormat ==
PIX_FMT_BGR32_1) && !isRGBA32(dstFormat))
+        if ((srcFormat == PIX_FMT_RGB32_1 || srcFormat ==
PIX_FMT_BGR32_1) && !isRGBA32(srcFormat))
             srcPtr += ALT32_CORR;

-        if ((dstFormat == PIX_FMT_RGB32_1 || dstFormat ==
PIX_FMT_BGR32_1) && !isRGBA32(srcFormat))
+        if ((dstFormat == PIX_FMT_RGB32_1 || dstFormat ==
PIX_FMT_BGR32_1) && !isRGBA32(dstFormat))
             dstPtr += ALT32_CORR;

         if (dstStride[0]*srcBpp == srcStride[0]*dstBpp && srcStride[0] > 0)



More information about the ffmpeg-devel mailing list