Extend init_loop_filter to work for filter limit values up to 127 instead
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sun, 5 Jul 2009 18:25:58 +0000 (18:25 +0000)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Sun, 5 Jul 2009 18:25:58 +0000 (18:25 +0000)
of only up to 64. 127 is the maximum value allowed by the theora specification.

Originally committed as revision 19350 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/vp3.c

index 7612851..66ac2f9 100644 (file)
@@ -517,23 +517,30 @@ static void init_dequantizer(Vp3DecodeContext *s, int qpi)
 /*
  * This function initializes the loop filter boundary limits if the frame's
  * quality index is different from the previous frame's.
 /*
  * This function initializes the loop filter boundary limits if the frame's
  * quality index is different from the previous frame's.
+ *
+ * The filter_limit_values may not be larger than 127.
  */
 static void init_loop_filter(Vp3DecodeContext *s)
 {
     int *bounding_values= s->bounding_values_array+127;
     int filter_limit;
     int x;
  */
 static void init_loop_filter(Vp3DecodeContext *s)
 {
     int *bounding_values= s->bounding_values_array+127;
     int filter_limit;
     int x;
+    int value;
 
     filter_limit = s->filter_limit_values[s->qps[0]];
 
     /* set up the bounding values */
     memset(s->bounding_values_array, 0, 256 * sizeof(int));
     for (x = 0; x < filter_limit; x++) {
 
     filter_limit = s->filter_limit_values[s->qps[0]];
 
     /* set up the bounding values */
     memset(s->bounding_values_array, 0, 256 * sizeof(int));
     for (x = 0; x < filter_limit; x++) {
-        bounding_values[-x - filter_limit] = -filter_limit + x;
         bounding_values[-x] = -x;
         bounding_values[x] = x;
         bounding_values[-x] = -x;
         bounding_values[x] = x;
-        bounding_values[x + filter_limit] = filter_limit - x;
     }
     }
+    for (x = value = filter_limit; x < 128 && value; x++, value--) {
+        bounding_values[ x] =  value;
+        bounding_values[-x] = -value;
+    }
+    if (value)
+        bounding_values[128] = value;
     bounding_values[129] = bounding_values[130] = filter_limit * 0x02020202;
 }
 
     bounding_values[129] = bounding_values[130] = filter_limit * 0x02020202;
 }