[FFmpeg-devel] [PATCH] libswscale: Make sws_init_context thread safe.

Michael Niedermayer michael at niedermayer.cc
Thu Jul 1 23:46:50 EEST 2021


On Wed, Apr 28, 2021 at 11:51:23AM +0200, Peter Lundblad 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;
>  

it would be ideal if the use of global/static variables in ff_sws_rgb2rgb_init
could be avoided because as it is before and after your patch it doesnt
work fully when the cpu flags are manually changed and sws_init_context() called
again.

That said your patch fixes a race so ill apply it

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Asymptotically faster algorithms should always be preferred if you have
asymptotical amounts of data
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20210701/185c523b/attachment.sig>


More information about the ffmpeg-devel mailing list