Commit 7dfee8d6 authored by Benoit Fouet's avatar Benoit Fouet Committed by Michael Niedermayer

avcodec/pngdec: split P frames handling to a separate function.

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 95fc8067
...@@ -825,6 +825,22 @@ static int decode_fctl_chunk(AVCodecContext *avctx, PNGDecContext *s, ...@@ -825,6 +825,22 @@ static int decode_fctl_chunk(AVCodecContext *avctx, PNGDecContext *s,
return 0; 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, static int decode_frame_common(AVCodecContext *avctx, PNGDecContext *s,
AVFrame *p, AVPacket *avpkt) AVFrame *p, AVPacket *avpkt)
{ {
...@@ -936,18 +952,7 @@ exit_loop: ...@@ -936,18 +952,7 @@ exit_loop:
&& s->last_picture.f->height== p->height && s->last_picture.f->height== p->height
&& s->last_picture.f->format== p->format && s->last_picture.f->format== p->format
) { ) {
int i, j; handle_p_frame_png(s, p);
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;
}
} }
} }
ff_thread_report_progress(&s->picture, INT_MAX, 0); ff_thread_report_progress(&s->picture, INT_MAX, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment