Måns Rullgård <[email protected]> writes:

> Måns Rullgård <[email protected]> writes:
>
>> Måns Rullgård <[email protected]> writes:
>>
>>> "Ronald S. Bultje" <[email protected]> writes:
>>>
>>>> Prevent values in floor1[] from wrapping over uint16_t boundaries (in
>>>> crafted bitstreams, they can go < 0), which causes them to wrap to
>>>> MAXUINT16, causing huge jumps in the dB LUT indexes. Likewise, clip
>>>> (rather than wrap) dB LUT indexes, to prevent jumping of indexes at
>>>> uint8_t wrapping boundaries.
>>>> ---
>>>>  libavcodec/vorbis.c    |   16 ++++++++--------
>>>>  libavcodec/vorbisdec.c |   10 +++++-----
>>>>  2 files changed, 13 insertions(+), 13 deletions(-)
>>>>
>>
>> [...]
>>
>>> This is pointless.  The value passed into these functions is a uint8_t.
>>> To get the effect you're looking for, you need to clip the value
>>> computed in ff_vorbis_floor1_render_list().
>>
>> To be clear, this patch should be enough:
>>
>> diff --git a/libavcodec/vorbis.c b/libavcodec/vorbis.c
>> index 0b26870..7d6a4f0 100644
>> --- a/libavcodec/vorbis.c
>> +++ b/libavcodec/vorbis.c
>> @@ -207,9 +207,9 @@ void ff_vorbis_floor1_render_list(vorbis_floor1_entry * 
>> list, int values,
>>                                    int multiplier, float *out, int samples)
>>  {
>>      int lx, i;
>> -    uint8_t ly;
>> +    int ly;
>>      lx = 0;
>> -    ly = y_list[0] * multiplier;
>> +    ly = av_clip_uint8(y_list[0] * multiplier);
>>      for (i = 1; i < values; i++) {
>>          int pos = list[i].sort;
>>          if (flag[pos]) {
>
> I missed the second place ly is assigned in the loop.  This should do it:

And I missed a bunch of other stuff.  Scratch all this.

-- 
Måns Rullgård
[email protected]
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to