avcodec/pngdec: split P frames handling to a separate function.
authorBenoit Fouet <benoit.fouet@free.fr>
Thu, 27 Nov 2014 14:26:26 +0000 (15:26 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 28 Nov 2014 00:57:52 +0000 (01:57 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/pngdec.c

index 35dcd76..8529956 100644 (file)
@@ -825,6 +825,22 @@ static int decode_fctl_chunk(AVCodecContext *avctx, PNGDecContext *s,
     return 0;
 }
 
+static void handle_p_frame_png(PNGDecContext *s, AVFrame *p)
+{
+    int i, j;
+    uint8_t *pd      = p->data[0];
+    uint8_t *pd_last = s->last_picture.f->data[0];
+    int ls = FFMIN(av_image_get_linesize(p->format, s->width, 0), s->width * s->bpp);
+
+    ff_thread_await_progress(&s->last_picture, INT_MAX, 0);
+    for (j = 0; j < s->height; j++) {
+        for (i = 0; i < ls; i++)
+            pd[i] += pd_last[i];
+        pd      += s->image_linesize;
+        pd_last += s->image_linesize;
+    }
+}
+
 static int decode_frame_common(AVCodecContext *avctx, PNGDecContext *s,
                                AVFrame *p, AVPacket *avpkt)
 {
@@ -936,18 +952,7 @@ exit_loop:
             && s->last_picture.f->height== p->height
             && s->last_picture.f->format== p->format
          ) {
-            int i, j;
-            uint8_t *pd      = p->data[0];
-            uint8_t *pd_last = s->last_picture.f->data[0];
-            int ls = FFMIN(av_image_get_linesize(p->format, s->width, 0), s->width * s->bpp);
-
-            ff_thread_await_progress(&s->last_picture, INT_MAX, 0);
-            for (j = 0; j < s->height; j++) {
-                for (i = 0; i < ls; i++)
-                    pd[i] += pd_last[i];
-                pd      += s->image_linesize;
-                pd_last += s->image_linesize;
-            }
+                handle_p_frame_png(s, p);
         }
     }
     ff_thread_report_progress(&s->picture, INT_MAX, 0);