Mercurial > libavcodec.hg
changeset 9921:f42402d1778b libavcodec
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.
author | reimar |
---|---|
date | Sun, 05 Jul 2009 18:25:58 +0000 |
parents | 8332746a9db9 |
children | ffdd1d32c40c |
files | vp3.c |
diffstat | 1 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/vp3.c Sun Jul 05 16:01:51 2009 +0000 +++ b/vp3.c Sun Jul 05 18:25:58 2009 +0000 @@ -517,23 +517,30 @@ /* * 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; }