[FFmpeg-devel] [PATCH] avutil/opt: only skip evaluation for rational options
Marton Balint
cus at passwd.hu
Fri May 1 18:26:32 EEST 2020
On Wed, 29 Apr 2020, Marton Balint wrote:
>
>
> On Sat, 18 Apr 2020, Marton Balint wrote:
>
>> Fixes problems when non-rational options were set using rational
> expressions,
>> causing rounding errors and the option range limits not to be enforced
>> properly.
>>
>> ffmpeg -f lavfi -i "sine=r=96000/2"
>>
>> This caused an assertion failure with assert level 2.
>>
>> Signed-off-by: Marton Balint <cus at passwd.hu>
>> ---
>> libavutil/opt.c | 14 ++++++++------
>> 1 file changed, 8 insertions(+), 6 deletions(-)
>>
>> diff --git a/libavutil/opt.c b/libavutil/opt.c
>> index bf2562737b..b792dec01c 100644
>> --- a/libavutil/opt.c
>> +++ b/libavutil/opt.c
>> @@ -229,13 +229,15 @@ static int set_string(void *obj, const AVOption *o,
> const char *val, uint8_t **d
>> static int set_string_number(void *obj, void *target_obj, const AVOption
> *o, const char *val, void *dst)
>> {
>> int ret = 0;
>> - int num, den;
>> - char c;
>>
>> - if (sscanf(val, "%d%*1[:/]%d%c", &num, &den, &c) == 2) {
>> - if ((ret = write_number(obj, o, dst, 1, den, num)) >= 0)
>> - return ret;
>> - ret = 0;
>> + if (o->type == AV_OPT_TYPE_RATIONAL || o->type ==
> AV_OPT_TYPE_VIDEO_RATE) {
>> + int num, den;
>> + char c;
>> + if (sscanf(val, "%d%*1[:/]%d%c", &num, &den, &c) == 2) {
>> + if ((ret = write_number(obj, o, dst, 1, den, num)) >= 0)
>> + return ret;
>> + ret = 0;
>> + }
>> }
>
> Ping, will apply soon.
Applied.
Regards,
Marton
More information about the ffmpeg-devel
mailing list