summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2009-07-05 18:25:58 +0000
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>2009-07-05 18:25:58 +0000
commit7fa5f9990b17051b2c21745be5e63904ba61d90a (patch)
tree511093e2c1f829ae81aff05b2b02161874a70ccc
parentad9210869459cede35baabbe20820b80e666c358 (diff)
Extend init_loop_filter to work for filter limit values up to 127 instead
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
-rw-r--r--libavcodec/vp3.c11
1 files changed, 9 insertions, 2 deletions
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;
}