[FFmpeg-cvslog] r25724 - trunk/libavcodec/vorbis_dec.c

Daniel Verkamp daniel
Fri Nov 12 06:12:43 CET 2010


On Thu, Nov 11, 2010 at 9:33 PM, alexc <subversion at mplayerhq.hu> wrote:
> Author: alexc
> Date: Fri Nov 12 05:33:26 2010
> New Revision: 25724
>
> Log:
> vorbisdec: Fix floor1 decoding
>
> An intermediate value in the floor 1 linear interpolation was
> overflowing
> resulting in obvious artifacts on some files.
>
> e.g.
> http://upload.wikimedia.org/wikipedia/commons/7/79/Big_Buck_Bunny_small.ogv
>
> Prior to this fix 87 out of 128 64kbit/s mono files decoded with ffmpeg
> have
> lower PEAQ ODG values than the same files decoded with libvorbis. With
> this
> fix none of that set have significantly worse ODG values than libvorbis.
>
> Fixes issue 2352
>
> Patch by Gregory Maxwell <greg at xiph.org>
>
> Modified:
> ? trunk/libavcodec/vorbis_dec.c
>
> Modified: trunk/libavcodec/vorbis_dec.c
> ==============================================================================
> --- trunk/libavcodec/vorbis_dec.c ? ? ? Thu Nov 11 23:41:22 2010 ? ? ? ?(r25723)
> +++ trunk/libavcodec/vorbis_dec.c ? ? ? Fri Nov 12 05:33:26 2010 ? ? ? ?(r25724)
> @@ -1146,8 +1146,8 @@ static int vorbis_floor1_decode(vorbis_c
> ? ? int_fast16_t book;
> ? ? uint_fast16_t offset;
> ? ? uint_fast16_t i,j;
> - ? ?/*u*/int_fast16_t adx, ady, off, predicted; // WTF ? dy/adx = ?(unsigned)dy/adx ?
> - ? ?int_fast16_t dy, err;
> + ? ?int_fast16_t adx, ady, dx, off, predicted;
> + ? ?int_fast32_t err;
>
>
> ? ? if (!get_bits1(gb)) // silence
> @@ -1210,7 +1210,7 @@ static int vorbis_floor1_decode(vorbis_c
> ? ? ? ? adx = vf->list[high_neigh_offs].x - vf->list[low_neigh_offs].x;
> ? ? ? ? ady = FFABS(dy);
> ? ? ? ? err = ady * (vf->list[i].x - vf->list[low_neigh_offs].x);
> - ? ? ? ?off = (int16_t)err / (int16_t)adx;
> + ? ? ? ?off = err / adx;
> ? ? ? ? if (dy < 0) {
> ? ? ? ? ? ? predicted = floor1_Y_final[low_neigh_offs] - off;
> ? ? ? ? } else {

This breaks compilation:

CC      libavcodec/vorbis_dec.o
libavcodec/vorbis_dec.c: In function 'vorbis_floor1_decode':
libavcodec/vorbis_dec.c:1209: error: 'dy' undeclared (first use in
this function)
libavcodec/vorbis_dec.c:1209: error: (Each undeclared identifier is
reported only once
libavcodec/vorbis_dec.c:1209: error: for each function it appears in.)
libavcodec/vorbis_dec.c:1149: warning: unused variable 'dx'

-- Daniel Verkamp



More information about the ffmpeg-cvslog mailing list