ffmpeg | branch: master | Donny Yang <[email protected]> | 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 <[email protected]>
Reviewed-by: Paul B Mahol <[email protected]>
Signed-off-by: Michael Niedermayer <[email protected]>

> 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;
 }
 

_______________________________________________
ffmpeg-cvslog mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

Reply via email to