diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c index 7612851aa5..66ac2f9a07 100644 --- a/libavcodec/vp3.c +++ b/libavcodec/vp3.c @@ -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. + * + * 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; + 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++) { - bounding_values[-x - filter_limit] = -filter_limit + 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; }