mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
avcodec/pngdec: do not blend on transparent black
There is no need to memset the zlib output buffer, as there is no blending happening there. Instead, do not blend when the dispose operation is set to 'background' (tranparent black). Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
bd67d0ead1
commit
aff50ae1d1
@ -674,10 +674,6 @@ static int decode_idat_chunk(AVCodecContext *avctx, PNGDecContext *s,
|
||||
s->crow_buf = s->buffer + 15;
|
||||
s->zstream.avail_out = s->crow_size;
|
||||
s->zstream.next_out = s->crow_buf;
|
||||
|
||||
if (avctx->codec_id == AV_CODEC_ID_APNG &&
|
||||
s->dispose_op == APNG_DISPOSE_OP_BACKGROUND)
|
||||
memset(s->zstream.next_out, 0, s->zstream.avail_out);
|
||||
}
|
||||
s->state |= PNG_IDAT;
|
||||
if ((ret = png_decode_idat(s, length)) < 0)
|
||||
@ -887,7 +883,7 @@ static int handle_p_frame_apng(AVCodecContext *avctx, PNGDecContext *s,
|
||||
pd_last += s->image_linesize;
|
||||
}
|
||||
|
||||
if (s->blend_op == APNG_BLEND_OP_OVER) {
|
||||
if (s->dispose_op != APNG_DISPOSE_OP_BACKGROUND && s->blend_op == APNG_BLEND_OP_OVER) {
|
||||
uint8_t ri, gi, bi, ai;
|
||||
|
||||
if (avctx->pix_fmt == AV_PIX_FMT_RGBA) {
|
||||
|
Loading…
Reference in New Issue
Block a user