diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-11-15 20:56:22 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-11-24 11:35:03 +0100 |
commit | 16bb8247b45a51c06e27e8563d8a546f3dddc79e (patch) | |
tree | 9522fce749a98bb547e5e6292f804c25f0a8940d /libavcodec/mpegaudiodsp_template.c | |
parent | ead313415037bbb94954a346a17796c0f741f790 (diff) | |
download | ffmpeg-16bb8247b45a51c06e27e8563d8a546f3dddc79e.tar.gz |
avcodec/mpegaudiodsp: Make initializing synth windows thread-safe
These arrays are used by the Musepack decoders, the MPEG audio decoders
as well as qdm2 and up until now, these arrays might be initialized more
than once, leading to potential data races as well as unnecessary
initializations. Therefore this commit ensures that each array will only
be initialized once.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavcodec/mpegaudiodsp_template.c')
-rw-r--r-- | libavcodec/mpegaudiodsp_template.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/libavcodec/mpegaudiodsp_template.c b/libavcodec/mpegaudiodsp_template.c index f8d0870df6..c67c456e8a 100644 --- a/libavcodec/mpegaudiodsp_template.c +++ b/libavcodec/mpegaudiodsp_template.c @@ -22,6 +22,7 @@ #include "libavutil/attributes.h" #include "libavutil/mem.h" +#include "libavutil/thread.h" #include "dct32.h" #include "mathops.h" #include "mpegaudiodsp.h" @@ -192,7 +193,7 @@ void RENAME(ff_mpa_synth_filter)(MPADSPContext *s, MPA_INT *synth_buf_ptr, *synth_buf_offset = offset; } -av_cold void RENAME(ff_mpa_synth_init)(MPA_INT *window) +static av_cold void mpa_synth_init(MPA_INT *window) { int i, j; @@ -221,6 +222,17 @@ av_cold void RENAME(ff_mpa_synth_init)(MPA_INT *window) window[512+128+16*i+j] = window[64*i+48-j]; } +static av_cold void mpa_synth_window_init(void) +{ + mpa_synth_init(RENAME(ff_mpa_synth_window)); +} + +av_cold void RENAME(ff_mpa_synth_init)(void) +{ + static AVOnce init_static_once = AV_ONCE_INIT; + ff_thread_once(&init_static_once, mpa_synth_window_init); +} + /* cos(pi*i/18) */ #define C1 FIXHR(0.98480775301220805936/2) #define C2 FIXHR(0.93969262078590838405/2) |