diff options
author | Benoit Fouet <benoit.fouet@free.fr> | 2014-11-27 15:26:26 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-11-28 01:57:52 +0100 |
commit | 7dfee8d69793030e5829fc19715982c580a752f8 (patch) | |
tree | 88cbb3419d43bc5ae122657db83c4314a78d6d05 /libavcodec/pngdec.c | |
parent | 95fc80672ffeebbedc1700065b8b914db8b5d277 (diff) | |
download | ffmpeg-7dfee8d69793030e5829fc19715982c580a752f8.tar.gz |
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.c | 29 |
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); |