You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +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:
committed by
Michael Niedermayer
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) {
|
||||
|
Reference in New Issue
Block a user