[FFmpeg-devel] [PATCH] libswscale: Make sws_init_context thread safe.
Peter Lundblad
plundblad at google.com
Mon Jun 28 16:26:55 EEST 2021
Hi,
Would anyone consider applying this fairly simple patch to fix a
multi-threading issue in the sws initialization code?
Regards,
//Peter
On Wed, Apr 28, 2021 at 11:51 AM Peter Lundblad <plundblad at google.com>
wrote:
> Call ff_sws_rgb2rgb_init via ff_thread_once instead of checking one of the
> variables it updates.
> ---
> libswscale/utils.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/libswscale/utils.c b/libswscale/utils.c
> index 6bac7b658d..d673209d95 100644
> --- a/libswscale/utils.c
> +++ b/libswscale/utils.c
> @@ -49,6 +49,7 @@
> #include "libavutil/mathematics.h"
> #include "libavutil/opt.h"
> #include "libavutil/pixdesc.h"
> +#include "libavutil/thread.h"
> #include "libavutil/aarch64/cpu.h"
> #include "libavutil/ppc/cpu.h"
> #include "libavutil/x86/asm.h"
> @@ -1189,12 +1190,13 @@ av_cold int sws_init_context(SwsContext *c,
> SwsFilter *srcFilter,
> int ret = 0;
> enum AVPixelFormat tmpFmt;
> static const float float_mult = 1.0f / 255.0f;
> + static AVOnce rgb2rgb_once = AV_ONCE_INIT;
>
> cpu_flags = av_get_cpu_flags();
> flags = c->flags;
> emms_c();
> - if (!rgb15to16)
> - ff_sws_rgb2rgb_init();
> + if (ff_thread_once(&rgb2rgb_once, ff_sws_rgb2rgb_init) != 0)
> + return AVERROR_UNKNOWN;
>
> unscaled = (srcW == dstW && srcH == dstH);
>
> --
> 2.31.1.527.g47e6f16901-goog
>
>
More information about the ffmpeg-devel
mailing list