[FFmpeg-devel] libavcodec/als: remove check for predictor order of a block

Thilo Borgmann thilo.borgmann at mail.de
Mon Nov 13 22:07:23 EET 2017


Am 13.11.17 um 21:06 schrieb Thilo Borgmann:
> Am 13.11.17 um 20:02 schrieb Umair Khan:
>> Hi,
>>
>> On Mon, Nov 13, 2017 at 11:06 PM, Thilo Borgmann <thilo.borgmann at mail.de> wrote:
>>> Hi,
>>>
>>>> On Mon, Nov 13, 2017 at 1:09 AM, Carl Eugen Hoyos <ceffmpeg at gmail.com> wrote:
>>>>> 2017-11-12 20:30 GMT+01:00 Umair Khan <omerjerk at gmail.com>:
>>>>>> Hi,
>>>>>>
>>>>>> On Mon, Nov 13, 2017 at 12:45 AM, Carl Eugen Hoyos <ceffmpeg at gmail.com> wrote:
>>>>>>> 2017-11-12 20:05 GMT+01:00 Umair Khan <omerjerk at gmail.com>:
>>>>>>>
>>>>>>>> The attached patch fixes the address sanitizer issue.
>>>>>>>
>>>>>>> Breaks compilation here, how did you test?
>>>>>>>
>>>>>>> libavcodec/alsdec.c: In function ‘decode_var_block_data’:
>>>>>>> libavcodec/alsdec.c:938:7: error: expected ‘}’ before ‘else’
>>>>>>
>>>>>> Sorry for the faulty patch. Here is the fixed one.
>>>>>
>>>>> The commit message of your patch is:
>>>>> libavcodec/als: fix address sanitization error in decoder
>>>>>
>>>>> Is there an error in current FFmpeg git head that asan
>>>>> shows? If not, the commit message makes no sense.
>>>>>
>>>>> I believe you should send two patches that are meant
>>>>> to be committed together, one of them fixing ticket #6297.
>>>>
>>>> This is the complete patchset.
>>>
>>> I need some days to find time to test this, earliest during the weekend I fear...
>>>
>>> What happens for
>>> block_length < residual_index < opt_order?
>>
>> I didn't really understand this case. What's residual_index? Can you
>> point to the source exactly?
>>
>> As far as the case where opt_order is more than block_length, my
>> second patch handles that case only. The file which Michael sent was
>> having asan issues because of the case when block_length < opt_order.
>>
>>> Another way of asking would be, where is the second loop from specs page 30 for that case?
>>> (ISO/IEC 14496)
>>
>> The second loop is just converting parcor to lpc coefficients which is
>> done here - https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/alsdec.c#L935
>>
>>> I think what puzzles CE is, that the problematic if() from the other patches is still untouched by your patch. So how could this be a valid solution even if your patch would actually improve the prediction part...
>>> And I wonder the same ;)
>>
>> As said, it is valid to have opt_order greater than block_length.
>> However, the decoder loop needs to be checked because we won't predict
>> values more than the length of the block i.e., block_length. We use
>> last K (prediction order, opt_order) values to predict the original K
>> values of the current block.
>>
>>> Did you run FATE with your patch applied? I assume a big difference in output at the first glance (means FATE aks the conformance files should fail...)
>>
>> Yes. I did run FATE. It passes perfectly.
>>
>>> Thanks for driving this forward anyway :)
>>
>> I think the two patches fix the issues completely. I don't see any
>> harm in applying this patchset. :)
> 
> Which second patch exactly do you want to be applied along with this one?

For convenience just send a patch that does both the changes you want to be done...

-Thilo 



More information about the ffmpeg-devel mailing list