From patchwork Thu Dec 10 11:16:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 24501 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id BB35544A39A for ; Thu, 10 Dec 2020 13:24:27 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AB71A68A98D; Thu, 10 Dec 2020 13:19:23 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 83F6368A800 for ; Thu, 10 Dec 2020 13:19:20 +0200 (EET) Received: by mail-wr1-f68.google.com with SMTP id y17so5042955wrr.10 for ; Thu, 10 Dec 2020 03:19:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references:reply-to :mime-version:content-transfer-encoding; bh=yrhvCzthtGjo2HOxPPngNN9Vf6DuVpJvrLUG4FTe79s=; b=rymC/xxBCHasMxdcVaUVoPFzyqh7WvlGEPTPWialOFimE9OhXlZzYT7+fjj9JJNjy6 w/EPqv6DQVZ7t2AP3WrolnWru8jh2c7oCkRuDXvtbEmHMg8anjCEsk8GC4wYAZuwziTR f35ZXAbstZL+JlYYue6hQ44YfTA0Lp5A/wi3RfqLhpYaJnbzrFCcLk5M3lfud3RfNpCM Lv6WsVHdc5zWQtNjnXqm+S1+vmT8vuT0+P+3jjYo6eFsbcow1O8YiwlXyJlIOCwZIOOD KIfcCPCy67CklwPa8NsDKDGfcfQ24+oj33d+Wmtn67Wk7Nl7GHeas9ykkLGviAZStEGr avMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:reply-to:mime-version:content-transfer-encoding; bh=yrhvCzthtGjo2HOxPPngNN9Vf6DuVpJvrLUG4FTe79s=; b=OD9+Nra1fzGeyk1V1lI7qjoEb9QoaL7ewbZPIaGbdGtT3uxINzJCovvsvOcbIPwN5P y3lpRYVWKBMdoAbncC8JreU0etgSYDJpOn3wOlq35fHs/ZB3iBAMYjaPqmSEViPNSUuE 9oHdMOmtD/03MTAq2/lzb5zD8ob7E0kfbdziBw3scxBoho5eXW+MtNRq/szHsKhKWMyk sNm6CXgXTvmpeX9N02FTsNIbLYMhVNz6UxeaAMtL5pluVmqu+r5SQ9rLQPV2LF0PXrwA vv1qi+VM9DlQfILaNMkIn2khABfoYbB87raOXvYEXK/FNWaLrQ0cJCsh3xMndBbHW3gt D8pg== X-Gm-Message-State: AOAM5325AieeVRim1WaiFy0PfaODcb5Bc1eMaI/q3Z0ArXgr00jPJjC8 LhBu47FgS5vPTWOpAmwhNO3RuRCdpTemrg== X-Google-Smtp-Source: ABdhPJyA6bdWe4xK0a43gQ2MqnBLgvwa+DUujfKn0U7Hr5pMgfRSKH4VzKKUF979XWXU/X2+09SbXg== X-Received: by 2002:a5d:5385:: with SMTP id d5mr3769219wrv.384.1607599159735; Thu, 10 Dec 2020 03:19:19 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id s133sm8942330wmf.38.2020.12.10.03.19.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Dec 2020 03:19:19 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 10 Dec 2020 12:16:51 +0100 Message-Id: <20201210111657.2276739-34-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201210111657.2276739-1-andreas.rheinhardt@gmail.com> References: <20201210111657.2276739-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 33/39] avcodec/msmpeg4: Factor out common RLTable initialization code X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Up until now, both the msmpeg4 decoders and encoders initialized several RLTables common to them (the decoders also initialized the VLCs of these RLTables). This is an obstacle to making these codecs init-threadsafe. So move this initialization to ff_msmpeg4_common_init() that already contains this initialization code. This allows to reuse the AVOnce used for initializing ff_v2_dc_lum/chroma_table which automatically makes initializing these RLTables thread-safe. Signed-off-by: Andreas Rheinhardt --- libavcodec/msmpeg4.c | 12 +++++++++++- libavcodec/msmpeg4data.c | 1 - libavcodec/msmpeg4data.h | 1 - libavcodec/msmpeg4dec.c | 5 +---- libavcodec/msmpeg4enc.c | 3 --- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/libavcodec/msmpeg4.c b/libavcodec/msmpeg4.c index 93b6e4bbbb..91581dcfe2 100644 --- a/libavcodec/msmpeg4.c +++ b/libavcodec/msmpeg4.c @@ -104,6 +104,16 @@ static av_cold void init_h263_dc_for_msmpeg4(void) } } +static av_cold void msmpeg4_common_init_static(void) +{ + static uint8_t rl_table_store[NB_RL_TABLES][2][2 * MAX_RUN + MAX_LEVEL + 3]; + + for (int i = 0; i < NB_RL_TABLES; i++) + ff_rl_init(&ff_rl_table[i], rl_table_store[i]); + + init_h263_dc_for_msmpeg4(); +} + av_cold void ff_msmpeg4_common_init(MpegEncContext *s) { static AVOnce init_static_once = AV_ONCE_INIT; @@ -146,7 +156,7 @@ av_cold void ff_msmpeg4_common_init(MpegEncContext *s) } //Note the default tables are set in common_init in mpegvideo.c - ff_thread_once(&init_static_once, init_h263_dc_for_msmpeg4); + ff_thread_once(&init_static_once, msmpeg4_common_init_static); } /* predict coded block */ diff --git a/libavcodec/msmpeg4data.c b/libavcodec/msmpeg4data.c index b9c1d8ec0b..adfccb7977 100644 --- a/libavcodec/msmpeg4data.c +++ b/libavcodec/msmpeg4data.c @@ -33,7 +33,6 @@ uint32_t ff_v2_dc_lum_table[512][2]; uint32_t ff_v2_dc_chroma_table[512][2]; -uint8_t ff_static_rl_table_store[NB_RL_TABLES][2][2 * MAX_RUN + MAX_LEVEL + 3]; VLC ff_msmp4_mb_i_vlc; VLC ff_msmp4_dc_luma_vlc[2]; diff --git a/libavcodec/msmpeg4data.h b/libavcodec/msmpeg4data.h index 02199d0123..95d009aaa7 100644 --- a/libavcodec/msmpeg4data.h +++ b/libavcodec/msmpeg4data.h @@ -60,7 +60,6 @@ extern const uint8_t ff_wmv1_scantable[WMV1_SCANTABLE_COUNT][64]; #define NB_RL_TABLES 6 extern RLTable ff_rl_table[NB_RL_TABLES]; -extern uint8_t ff_static_rl_table_store[NB_RL_TABLES][2][2 * MAX_RUN + MAX_LEVEL + 3]; extern uint32_t ff_v2_dc_lum_table[512][2]; extern uint32_t ff_v2_dc_chroma_table[512][2]; diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c index d059e8eecc..f2779b8fdd 100644 --- a/libavcodec/msmpeg4dec.c +++ b/libavcodec/msmpeg4dec.c @@ -300,7 +300,7 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx) { MpegEncContext *s = avctx->priv_data; static volatile int done = 0; - int i, ret; + int ret; MVTable *mv; if ((ret = av_image_check_size(avctx->width, avctx->height, 0, avctx)) < 0) @@ -312,9 +312,6 @@ av_cold int ff_msmpeg4_decode_init(AVCodecContext *avctx) ff_msmpeg4_common_init(s); if (!done) { - for(i=0;i