From cd6093081495b89d6c55b84ff3ef02fee19f85fc Mon Sep 17 00:00:00 2001 From: Jim Bankoski Date: Thu, 18 Dec 2014 15:50:46 -0800 Subject: [PATCH] make vp9 encoder static initializers thread safe Change-Id: If2d0888d13ebe52bc7c3b16f16319408a86ab6de --- vp9/common/vp9_rtcd.c | 2 ++ vp9/decoder/vp9_decoder.c | 5 +++-- vp9/encoder/vp9_encoder.c | 2 +- vp9/vp9_cx_iface.c | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/vp9/common/vp9_rtcd.c b/vp9/common/vp9_rtcd.c index dc15a84ff..c777bc81f 100644 --- a/vp9/common/vp9_rtcd.c +++ b/vp9/common/vp9_rtcd.c @@ -16,5 +16,7 @@ void vpx_scale_rtcd(void); void vp9_rtcd() { vpx_scale_rtcd(); + // TODO(JBB): Remove this once, by insuring that both the encoder and + // decoder setup functions are protected by once(); once(setup_rtcd_internal); } diff --git a/vp9/decoder/vp9_decoder.c b/vp9/decoder/vp9_decoder.c index 2daf86200..185b268b3 100644 --- a/vp9/decoder/vp9_decoder.c +++ b/vp9/decoder/vp9_decoder.c @@ -15,6 +15,7 @@ #include "./vpx_scale_rtcd.h" #include "vpx_mem/vpx_mem.h" +#include "vpx_ports/vpx_once.h" #include "vpx_ports/vpx_timer.h" #include "vpx_scale/vpx_scale.h" @@ -34,7 +35,7 @@ #include "vp9/decoder/vp9_dthread.h" static void initialize_dec() { - static int init_done = 0; + static volatile int init_done = 0; if (!init_done) { vp9_rtcd(); @@ -85,7 +86,7 @@ VP9Decoder *vp9_decoder_create() { sizeof(*cm->frame_contexts))); pbi->need_resync = 1; - initialize_dec(); + once(initialize_dec); // Initialize the references to not point to any frame buffers. vpx_memset(&cm->ref_frame_map, -1, sizeof(cm->ref_frame_map)); diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index aaa6b238d..e821e3b49 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -182,7 +182,7 @@ static void vp9_swap_mi_and_prev_mi(VP9_COMMON *cm) { } void vp9_initialize_enc() { - static int init_done = 0; + static volatile int init_done = 0; if (!init_done) { vp9_rtcd(); diff --git a/vp9/vp9_cx_iface.c b/vp9/vp9_cx_iface.c index b9fb8140c..0d663deb9 100644 --- a/vp9/vp9_cx_iface.c +++ b/vp9/vp9_cx_iface.c @@ -13,6 +13,7 @@ #include "./vpx_config.h" #include "vpx/vpx_codec.h" +#include "vpx_ports/vpx_once.h" #include "vpx/internal/vpx_codec_internal.h" #include "./vpx_version.h" #include "vp9/encoder/vp9_encoder.h" @@ -729,7 +730,7 @@ static vpx_codec_err_t encoder_init(vpx_codec_ctx_t *ctx, } priv->extra_cfg = default_extra_cfg; - vp9_initialize_enc(); + once(vp9_initialize_enc); res = validate_config(priv, &priv->cfg, &priv->extra_cfg); -- 2.40.0