mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
avcodec/pngdec: split P frames handling to a separate function.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
95fc80672f
commit
7dfee8d697
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user