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 <plundb...@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
>
>
_______________________________________________
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".

Reply via email to