OSDN Git Service

flashsv: Refactor a little
authorLuca Barbato <lu_zero@gentoo.org>
Tue, 29 Oct 2013 16:02:42 +0000 (17:02 +0100)
committerLuca Barbato <lu_zero@gentoo.org>
Fri, 1 Nov 2013 18:38:53 +0000 (19:38 +0100)
libavcodec/flashsv.c

index e9749fe..f0a8036 100644 (file)
@@ -197,12 +197,15 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt,
         s->blocks[blk_idx].pos      = s->keyframedata + (get_bits_count(gb) / 8);
         s->blocks[blk_idx].size     = block_size;
     }
+
+    y_pos += s->diff_start;
+
     if (!s->color_depth) {
         /* Flash Screen Video stores the image upside down, so copy
          * lines to destination in reverse order. */
         for (k = 1; k <= s->diff_height; k++) {
             memcpy(s->frame.data[0] + x_pos * 3 +
-                   (s->image_height - y_pos - s->diff_start - k) * s->frame.linesize[0],
+                   (s->image_height - y_pos - k) * s->frame.linesize[0],
                    line, width * 3);
             /* advance source pointer to next line */
             line += width * 3;
@@ -210,7 +213,7 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt,
     } else {
         /* hybrid 15-bit/palette mode */
         decode_hybrid(s->tmpblock, s->frame.data[0],
-                      s->image_height - (y_pos + 1 + s->diff_start + s->diff_height),
+                      s->image_height - (y_pos + 1 + s->diff_height),
                       x_pos, s->diff_height, width,
                       s->frame.linesize[0], s->pal);
     }
@@ -409,10 +412,11 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data,
                 int k;
                 int off = (s->image_height - y_pos - 1) * s->frame.linesize[0];
 
-                for (k = 0; k < cur_blk_height; k++)
-                    memcpy(s->frame.data[0] + off - k*s->frame.linesize[0] + x_pos*3,
-                           s->keyframe + off - k*s->frame.linesize[0] + x_pos*3,
+                for (k = 0; k < cur_blk_height; k++) {
+                    int x = off - k * s->frame.linesize[0] + x_pos * 3;
+                    memcpy(s->frame.data[0] + x, s->keyframe + x,
                            cur_blk_width * 3);
+                }
             }
 
             /* skip unchanged blocks, which have size 0 */