[FFmpeg-cvslog] Fix 1bpp palettized png with width not a multiple of 8.

Carl Eugen Hoyos git at videolan.org
Wed Jan 30 00:51:20 CET 2013


ffmpeg | branch: master | Carl Eugen Hoyos <cehoyos at ag.or.at> | Wed Jan 30 00:49:16 2013 +0100| [3c3d68a97677647c4d002231d0d3f7cd7e0636cf] | committer: Carl Eugen Hoyos

Fix 1bpp palettized png with width not a multiple of 8.

Fixes ticket #2204.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3c3d68a97677647c4d002231d0d3f7cd7e0636cf
---

 libavcodec/pngdec.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
index 593df60..97c0ad1 100644
--- a/libavcodec/pngdec.c
+++ b/libavcodec/pngdec.c
@@ -765,10 +765,14 @@ static int decode_frame(AVCodecContext *avctx,
  exit_loop:
 
     if (s->bits_per_pixel == 1 && s->color_type == PNG_COLOR_TYPE_PALETTE){
-        int i, j;
+        int i, j, k;
         uint8_t *pd = s->current_picture->data[0];
         for (j = 0; j < s->height; j++) {
-            for (i = s->width/8-1; i >= 0; i--) {
+            i = s->width / 8;
+            for (k = 7; k >= 1; k--)
+                if ((s->width&7) >= k)
+                    pd[8*i + k - 1] = (pd[i]>>8-k) & 1;
+            for (i--; i >= 0; i--) {
                 pd[8*i + 7]=  pd[i]     & 1;
                 pd[8*i + 6]= (pd[i]>>1) & 1;
                 pd[8*i + 5]= (pd[i]>>2) & 1;



More information about the ffmpeg-cvslog mailing list