[SCM] libav/experimental: In planarCopyWrapper, Only copy length, not stride of the last line in the plane

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:11:27 UTC 2013


The following commit has been merged in the experimental branch:
commit c4e2b8268f9c59a34d60e48afe8541b042d8b4e6
Author: Martin Storsjö <martin at martin.st>
Date:   Fri Jul 16 17:45:50 2010 +0000

    In planarCopyWrapper, Only copy length, not stride of the last line in the plane
    
    If the destination planes are offset within the destination buffer,
    writing the extra bytes at the end may write outside of the destination
    buffer.
    
    Originally committed as revision 31746 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale

diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index 159bf9c..b589131 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -1663,9 +1663,11 @@ static int planarCopyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[
                     srcPtr+= srcStride[plane];
                     dstPtr+= dstStride[plane];
                 }
-            } else if (dstStride[plane]==srcStride[plane] && srcStride[plane] > 0)
-                memcpy(dst[plane] + dstStride[plane]*y, src[plane], height*dstStride[plane]);
-            else {
+            } else if (dstStride[plane]==srcStride[plane] && srcStride[plane] > 0) {
+                if (height > 0)
+                    memcpy(dst[plane] + dstStride[plane]*y, src[plane],
+                           (height - 1)*dstStride[plane] + length);
+            } else {
                 if(is16BPS(c->srcFormat) && is16BPS(c->dstFormat))
                     length*=2;
                 for (i=0; i<height; i++) {

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list