summaryrefslogtreecommitdiff
path: root/libavcodec/pngdec.c
diff options
context:
space:
mode:
authorBenoit Fouet <benoit.fouet@free.fr>2014-11-27 15:26:26 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-11-28 01:57:52 +0100
commit7dfee8d69793030e5829fc19715982c580a752f8 (patch)
tree88cbb3419d43bc5ae122657db83c4314a78d6d05 /libavcodec/pngdec.c
parent95fc80672ffeebbedc1700065b8b914db8b5d277 (diff)
avcodec/pngdec: split P frames handling to a separate function.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/pngdec.c')
-rw-r--r--libavcodec/pngdec.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
index 35dcd76feb..85299568d4 100644
--- a/libavcodec/pngdec.c
+++ b/libavcodec/pngdec.c
@@ -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);