Browse Source

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>
tags/n2.5
Benoit Fouet Michael Niedermayer 11 years ago
parent
commit
aff50ae1d1
1 changed files with 1 additions and 5 deletions
  1. +1
    -5
      libavcodec/pngdec.c

+ 1
- 5
libavcodec/pngdec.c View File

@@ -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…
Cancel
Save