[FFmpeg-devel] [PATCH 3/5] avfilter/scale: separate exprs parse and eval

Gyan ffmpeg at gyani.pro
Tue Dec 24 08:09:14 EET 2019



On 24-12-2019 04:50 am, Michael Niedermayer wrote:
> On Tue, Dec 17, 2019 at 02:55:06PM +0530, Gyan wrote:
> [...]
>> @@ -127,6 +204,22 @@ static av_cold int init_dict(AVFilterContext *ctx, AVDictionary **opts)
>>       if (!scale->h_expr)
>>           av_opt_set(scale, "h", "ih", 0);
>>   
>> +    ret = av_expr_parse(&scale->w_pexpr, scale->w_expr,
>> +                            names,
>> +                            NULL, NULL, NULL, NULL, 0, ctx);
>> +    if (ret < 0) {
>> +        av_log(ctx, AV_LOG_ERROR, "Cannot parse width expression: '%s'\n", scale->w_expr);
>> +        return ret;
>> +    }
>> +
>> +    ret = av_expr_parse(&scale->h_pexpr, scale->h_expr,
>> +                            names,
>> +                            NULL, NULL, NULL, NULL, 0, ctx);
>> +    if (ret < 0) {
>> +        av_log(ctx, AV_LOG_ERROR, "Cannot parse height expression: '%s'\n", scale->h_expr);
>> +        return ret;
>> +    }
>> +
>> +        if (w) {
>> +            ret = av_expr_parse(&scale->w_pexpr, scale->w_expr,
>> +                            names,
>> +                            NULL, NULL, NULL, NULL, 0, ctx);
>> +            if (ret < 0) {
>> +                av_log(ctx, AV_LOG_ERROR, "Cannot parse width expression: '%s'\n", scale->w_expr);
>> +                goto revert;
>> +            }
>> +        }
>> +
>> +        if (h) {
>> +            ret = av_expr_parse(&scale->h_pexpr, scale->h_expr,
>> +                            names,
>> +                            NULL, NULL, NULL, NULL, 0, ctx);
>> +            if (ret < 0) {
>> +                av_log(ctx, AV_LOG_ERROR, "Cannot parse height expression: '%s'\n", scale->h_expr);
>> +                goto revert;
>> +            }
>> +        }
> Duplicate code

init_dict() is not called during command processing since we don't reset 
any other parameter except for one of width or height. Do you want me to 
reinit all parameters after a command?

>> @@ -421,6 +589,18 @@ static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out)
>>               av_opt_set(scale, "w", buf, 0);
>>               snprintf(buf, sizeof(buf)-1, "%d", outlink->h);
>>               av_opt_set(scale, "h", buf, 0);
>> +
>> +            av_expr_free(scale->w_pexpr);
>> +            av_expr_free(scale->h_pexpr);
>> +            scale->w_pexpr = scale->h_pexpr = NULL;
>> +
>> +            av_expr_parse(&scale->w_pexpr, scale->w_expr,
>> +                          var_names,
>> +                          NULL, NULL, NULL, NULL, 0, ctx);
>> +
>> +            av_expr_parse(&scale->h_pexpr, scale->h_expr,
>> +                          var_names,
>> +                          NULL, NULL, NULL, NULL, 0, ctx);
> Missing error handling

Will do.

Gyan


More information about the ffmpeg-devel mailing list