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

Alex Converse alex.converse
Fri Nov 12 06:36:12 CET 2010


On Thu, Nov 11, 2010 at 9:12 PM, Daniel Verkamp <daniel at drv.nu> wrote:
> 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'
>

Sorry fixed r25725.



More information about the ffmpeg-cvslog mailing list