[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