[FFmpeg-devel] [PATCH] avutil/eval: make av_expr_eval more thread safe

Gyan ffmpeg at gyani.pro
Sun Dec 15 08:07:52 EET 2019



On 15-12-2019 06:46 am, Marton Balint wrote:
> Unfortunately the ld() and st() operations store the variables in the AVExpr
> context and not in the parser in order to keep the stored values between
> evaluations (which is a rarely(?) used undocumented(?) feature of AVExpr).
>
> This causes data race issues when the same expression is evaluated from
> multiple threads. Let's use the Parser as variable store during evaluation and
> only sync the AVExpr context variables with the Parser before and after
> evaluation. This keeps the feature working for single threaded cases and fixes
> using ld() and st() usage for the "normal" use case when the ld()-s only
> reference st()-d values from the same evaluation.
>
> Maybe we should just remove this feature instead?

No. I use them in many workflows, including select filter, and others 
involving animation.

The eval API has a function to check if a variable is referenced in an 
expression. Michael has submitted a patch that extends that to allow 
checking for the use of any function. Once merged, filters can check if 
such st/ld is present in any expression and force thread count to 1, if 
need be.

Gyan


More information about the ffmpeg-devel mailing list