[FFmpeg-cvslog] avcodec/apng: Add blending support for non-alpha pixel formats
Donny Yang
git at videolan.org
Mon Jun 8 16:06:00 CEST 2015
ffmpeg | branch: master | Donny Yang <work at kota.moe> | Tue Jun 2 15:49:25 2015 +0000| [0ab1c46fe07ff9637ddc67b9b2270a73f1391c9b] | committer: Michael Niedermayer
avcodec/apng: Add blending support for non-alpha pixel formats
Signed-off-by: Donny Yang <work at kota.moe>
Reviewed-by: Paul B Mahol <onemda at gmail.com>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0ab1c46fe07ff9637ddc67b9b2270a73f1391c9b
---
libavcodec/pngdec.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
index a70a7f5..fa69c87 100644
--- a/libavcodec/pngdec.c
+++ b/libavcodec/pngdec.c
@@ -58,6 +58,7 @@ typedef struct PNGDecContext {
int channels;
int bits_per_pixel;
int bpp;
+ int has_trns;
uint8_t *image_buf;
int image_linesize;
@@ -732,6 +733,8 @@ static int decode_trns_chunk(AVCodecContext *avctx, PNGDecContext *s,
}
bytestream2_skip(&s->gb, 4); /* crc */
+ s->has_trns = 1;
+
return 0;
}
@@ -848,6 +851,18 @@ static int decode_fctl_chunk(AVCodecContext *avctx, PNGDecContext *s,
s->dispose_op = APNG_DISPOSE_OP_BACKGROUND;
}
+ if (s->dispose_op == APNG_BLEND_OP_OVER && !s->has_trns && (
+ avctx->pix_fmt == AV_PIX_FMT_RGB24 ||
+ avctx->pix_fmt == AV_PIX_FMT_RGB48BE ||
+ avctx->pix_fmt == AV_PIX_FMT_PAL8 ||
+ avctx->pix_fmt == AV_PIX_FMT_GRAY8 ||
+ avctx->pix_fmt == AV_PIX_FMT_GRAY16BE ||
+ avctx->pix_fmt == AV_PIX_FMT_MONOBLACK
+ )) {
+ // APNG_DISPOSE_OP_OVER is the same as APNG_DISPOSE_OP_SOURCE when there is no alpha channel
+ s->dispose_op = APNG_BLEND_OP_SOURCE;
+ }
+
return 0;
}
More information about the ffmpeg-cvslog
mailing list