webpdec: Fix decoding of the huffman group indices.
authorJustin Ruggles <justin.ruggles@gmail.com>
Thu, 3 Jul 2014 15:28:17 +0000 (11:28 -0400)
committerJustin Ruggles <justin.ruggles@gmail.com>
Thu, 3 Jul 2014 19:29:01 +0000 (15:29 -0400)
Per the specification, "The red and green components of a pixel
define the meta Huffman code used in a particular block of the ARGB
image."

libavcodec/webp.c

index f9f8bfc..b98fa4d 100644 (file)
@@ -476,7 +476,9 @@ static int decode_entropy_image(WebPContext *s)
     max = 0;
     for (y = 0; y < img->frame->height; y++) {
         for (x = 0; x < img->frame->width; x++) {
     max = 0;
     for (y = 0; y < img->frame->height; y++) {
         for (x = 0; x < img->frame->width; x++) {
-            int p = GET_PIXEL_COMP(img->frame, x, y, 2);
+            int p0 = GET_PIXEL_COMP(img->frame, x, y, 1);
+            int p1 = GET_PIXEL_COMP(img->frame, x, y, 2);
+            int p  = p0 << 8 | p1;
             max = FFMAX(max, p);
         }
     }
             max = FFMAX(max, p);
         }
     }
@@ -561,7 +563,9 @@ static HuffReader *get_huffman_group(WebPContext *s, ImageContext *img,
     if (gimg->size_reduction > 0) {
         int group_x = x >> gimg->size_reduction;
         int group_y = y >> gimg->size_reduction;
     if (gimg->size_reduction > 0) {
         int group_x = x >> gimg->size_reduction;
         int group_y = y >> gimg->size_reduction;
-        group       = GET_PIXEL_COMP(gimg->frame, group_x, group_y, 2);
+        int g0      = GET_PIXEL_COMP(gimg->frame, group_x, group_y, 1);
+        int g1      = GET_PIXEL_COMP(gimg->frame, group_x, group_y, 2);
+        group       = g0 << 8 | g1;
     }
 
     return &img->huffman_groups[group * HUFFMAN_CODES_PER_META_CODE];
     }
 
     return &img->huffman_groups[group * HUFFMAN_CODES_PER_META_CODE];