[SCM] libav/experimental: Avoid branches in the loop and solve a gcc warning

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:55:07 UTC 2013


The following commit has been merged in the experimental branch:
commit 79acfb0e133317c3a38c55b73c3b80f3212af2f9
Author: Luca Barbato <lu_zero at gentoo.org>
Date:   Wed Jan 17 11:02:07 2007 +0000

    Avoid branches in the loop and solve a gcc warning
    
    Originally committed as revision 7566 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c
index 2f9d690..b2305cd 100644
--- a/libavcodec/imgconvert.c
+++ b/libavcodec/imgconvert.c
@@ -2256,7 +2256,7 @@ int img_pad(AVPicture *dst, const AVPicture *src, int height, int width,
             int pix_fmt, int padtop, int padbottom, int padleft, int padright,
             int *color)
 {
-    uint8_t *optr, *iptr;
+    uint8_t *optr;
     int y_shift;
     int x_shift;
     int yheight;
@@ -2274,24 +2274,30 @@ int img_pad(AVPicture *dst, const AVPicture *src, int height, int width,
                 dst->linesize[i] * (padtop >> y_shift) + (padleft >> x_shift));
         }
 
-        if (padleft || padright || src) {
-            if (src) { /* first line */
-                iptr = src->data[i];
-                optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
-                        (padleft >> x_shift);
-                memcpy(optr, iptr, src->linesize[i]);
-                iptr += src->linesize[i];
+        if (padleft || padright) {
+            optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
+                (dst->linesize[i] - (padright >> x_shift));
+            yheight = (height - 1 - (padtop + padbottom)) >> y_shift;
+            for (y = 0; y < yheight; y++) {
+                memset(optr, color[i], (padleft + padright) >> x_shift);
+                optr += dst->linesize[i];
             }
+        }
+
+        if (src) { /* first line */
+            uint8_t *iptr = src->data[i];
+            optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
+                    (padleft >> x_shift);
+            memcpy(optr, iptr, src->linesize[i]);
+            iptr += src->linesize[i];
             optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
                 (dst->linesize[i] - (padright >> x_shift));
             yheight = (height - 1 - (padtop + padbottom)) >> y_shift;
             for (y = 0; y < yheight; y++) {
                 memset(optr, color[i], (padleft + padright) >> x_shift);
-                if (src) {
-                    memcpy(optr + ((padleft + padright) >> x_shift), iptr,
-                        src->linesize[i]);
-                    iptr += src->linesize[i];
-                }
+                memcpy(optr + ((padleft + padright) >> x_shift), iptr,
+                    src->linesize[i]);
+                iptr += src->linesize[i];
                 optr += dst->linesize[i];
             }
         }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list