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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".