From patchwork Tue Oct 24 09:31:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Muhammad Faiz X-Patchwork-Id: 5673 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp411701jah; Tue, 24 Oct 2017 02:31:55 -0700 (PDT) X-Received: by 10.223.135.231 with SMTP id c36mr14427380wrc.248.1508837515247; Tue, 24 Oct 2017 02:31:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508837515; cv=none; d=google.com; s=arc-20160816; b=KfEHuAOUA/BvIp/L54YEcpRyUID0HxA3UuNGJP+GaHc0uCckTNOjPxQdYfzCNfxuWc d25dUEEY1QGqvo4Ht4s8jDSmK9S3425cjPNInLhP/2mUUF7IXxHOYV4ZFH/XSoJx0Be0 ACYNx0INOg3UMo2M1FIqhkjaKyQ3spyDk7k1Lz7vqPuo7VFrO+U3HfCQcxZ4mo8pB6rM JSLzFTNLHUVD3dv/xea8dTQ2OCKLB0s8Fl0uaq79CkjJ5ks8y3CGufWN4aNd8D8rGNuK UzBIsqnd7H5HW9McdYhCdtgKJBXxRgMakfHEUb4oukqVjiNDr6Qc63o96dZBWMs6gSPd Kdww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to:arc-authentication-results; bh=+tY5Sk95ArQ4MgbIsRzKcSSo16em/X2pfENgQ7CYkAs=; b=s7g3j+hy1Qejh3WQjs4xVDfC67wCFLxqSqL+f4EYrxOF0WNv0Vni9Jz+gfgPx1kpEs 3DTTeqK4IgBKpTIxKJA4UGk9KcJoCd1lIgrRXvdDKbo3Evt0UvLwqp3QfhA+xwpBnecD U2Umk5I1LiPTCL5HN9wh3nbjB7/uXIMX/GxHVOWRQnmEuObOvmgxdWAPq0d7Q0S93Dh7 AJhDeRsPoOndZMuXjTB+ItQUrzBIqTlD1ndHdHiecss+ETHDWXOGdW+4h71dShHUQ67S 8GZJAHJNu0dlj8JFMztVhyLtvaI7Z5ytG/CbR3SAAuMleg+359IHdswLha3mEz6KoTj+ jBxg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Bka3xwQe; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l7si6827251wrg.340.2017.10.24.02.31.54; Tue, 24 Oct 2017 02:31:55 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Bka3xwQe; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AC7B468A277; Tue, 24 Oct 2017 12:31:45 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f193.google.com (mail-pf0-f193.google.com [209.85.192.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A24CA68A23D for ; Tue, 24 Oct 2017 12:31:39 +0300 (EEST) Received: by mail-pf0-f193.google.com with SMTP id a8so19259516pfc.0 for ; Tue, 24 Oct 2017 02:31:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=mGGhqpO2/kRVCt9qeIc63qdkLorFYxv5I8uz99ksiVE=; b=Bka3xwQex4mCmw6LZVZNNVc9/72bTZqxbG8u2OYbb87FMUojbrolpiV3QKv+8ww3Kb L/oUWd4hXkKPdbneq4C7T3gcLuEOZ1TFJU2u4mvDah/cEdy7DQvmhIpu/Nv74ipkjxa3 wFdMm0yZcqOdPbN/91au5Phh51mXiRXvgxVTHXjqvkEyf1WKEf8DrlcIi+SRzjE6VZoK Xc/82/00P0ApGwmajKQakLezt8k/rXWY9PUzmpcv1R4VadN44ylN5qV2dUeWFcZsnYCp NTysm/WQ4/QIZzWqeybh3QsRCFxRPK6Iawha/ru64d4ZAfQcJqT82HYvfqOu7NASISzF 91Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=mGGhqpO2/kRVCt9qeIc63qdkLorFYxv5I8uz99ksiVE=; b=U2iehlaTO0tQPKfautTrGY/7vUdLaXBikWzXrj3V8Jf4ANh/PnIVkXTbgJW0qfxSpS IFT/7qyDcOwzDgVeGY4Yb5IE7vLIWrv5Z4AZWlTWGCihMa79p8qkiAC0weZsCkjLRtZA ng6VoZyPhp0PqAG35ZMPVVqLnVE9aNMI9CsF5mrvCkaUigwEMcLUfY/zw1VIVhwf9gbf LLBg6BpRvivpyY5pMRc9u/C4zHygF5Vd6BDaPtIJq2OLBtIDdvfdNq7Q1jeAjqhzw6F1 xuQE6LgzsndSZvdd9+lYy+uF0DBrHvnYINBnK0W8Z++xdMG0150ECRWar19a3g5N/hX+ OmgQ== X-Gm-Message-State: AMCzsaX8p5Xi4Ze8qOHjY+yGcMto+AVzSnm3XZau5/W9R+pfadf1Ra0g xIjNZ+IvzV3p4T8FHwVUeiL2Gwae X-Google-Smtp-Source: ABhQp+TTj7SyykUWIvg/hG3eNDNR/MhaRmUJJTGsyemsBRw1QlQZX3Nr7BFX6+2ezQzQpFRrKl3upQ== X-Received: by 10.98.158.6 with SMTP id s6mr15974328pfd.191.1508837504856; Tue, 24 Oct 2017 02:31:44 -0700 (PDT) Received: from localhost.localdomain ([114.124.177.113]) by smtp.gmail.com with ESMTPSA id f1sm17715452pfe.150.2017.10.24.02.31.41 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Oct 2017 02:31:44 -0700 (PDT) From: Muhammad Faiz To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Oct 2017 16:31:26 +0700 Message-Id: <20171024093126.21715-1-mfcc64@gmail.com> X-Mailer: git-send-email 2.13.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avutil/crc: use ff_thread_once at av_crc_get_table 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Fix tsan warnings. Signed-off-by: Muhammad Faiz --- libavutil/crc.c | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/libavutil/crc.c b/libavutil/crc.c index 495732b163..d44550c9c0 100644 --- a/libavutil/crc.c +++ b/libavutil/crc.c @@ -20,6 +20,8 @@ #include "config.h" +#include "thread.h" +#include "avassert.h" #include "bswap.h" #include "common.h" #include "crc.h" @@ -291,20 +293,24 @@ static const AVCRC av_crc_table[AV_CRC_MAX][257] = { #else #define CRC_TABLE_SIZE 1024 #endif -static struct { - uint8_t le; - uint8_t bits; - uint32_t poly; -} av_crc_table_params[AV_CRC_MAX] = { - [AV_CRC_8_ATM] = { 0, 8, 0x07 }, - [AV_CRC_16_ANSI] = { 0, 16, 0x8005 }, - [AV_CRC_16_CCITT] = { 0, 16, 0x1021 }, - [AV_CRC_24_IEEE] = { 0, 24, 0x864CFB }, - [AV_CRC_32_IEEE] = { 0, 32, 0x04C11DB7 }, - [AV_CRC_32_IEEE_LE] = { 1, 32, 0xEDB88320 }, - [AV_CRC_16_ANSI_LE] = { 1, 16, 0xA001 }, -}; static AVCRC av_crc_table[AV_CRC_MAX][CRC_TABLE_SIZE]; + +#define DECLARE_CRC_INIT_TABLE_ONCE(id, le, bits, poly) \ +static AVOnce id ## _once_control = AV_ONCE_INIT; \ +static void id ## _init_table_once(void) \ +{ \ + av_assert0(av_crc_init(av_crc_table[id], le, bits, poly, sizeof(av_crc_table[id])) >= 0); \ +} + +#define CRC_INIT_TABLE_ONCE(id) ff_thread_once(&id ## _once_control, id ## _init_table_once) + +DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_8_ATM, 0, 8, 0x07) +DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_16_ANSI, 0, 16, 0x8005) +DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_16_CCITT, 0, 16, 0x1021) +DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_24_IEEE, 0, 24, 0x864CFB) +DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_32_IEEE, 0, 32, 0x04C11DB7) +DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_32_IEEE_LE, 1, 32, 0xEDB88320) +DECLARE_CRC_INIT_TABLE_ONCE(AV_CRC_16_ANSI_LE, 1, 16, 0xA001) #endif int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size) @@ -343,13 +349,16 @@ int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size) const AVCRC *av_crc_get_table(AVCRCId crc_id) { #if !CONFIG_HARDCODED_TABLES - if (!av_crc_table[crc_id][FF_ARRAY_ELEMS(av_crc_table[crc_id]) - 1]) - if (av_crc_init(av_crc_table[crc_id], - av_crc_table_params[crc_id].le, - av_crc_table_params[crc_id].bits, - av_crc_table_params[crc_id].poly, - sizeof(av_crc_table[crc_id])) < 0) - return NULL; + switch (crc_id) { + case AV_CRC_8_ATM: CRC_INIT_TABLE_ONCE(AV_CRC_8_ATM); break; + case AV_CRC_16_ANSI: CRC_INIT_TABLE_ONCE(AV_CRC_16_ANSI); break; + case AV_CRC_16_CCITT: CRC_INIT_TABLE_ONCE(AV_CRC_16_CCITT); break; + case AV_CRC_24_IEEE: CRC_INIT_TABLE_ONCE(AV_CRC_24_IEEE); break; + case AV_CRC_32_IEEE: CRC_INIT_TABLE_ONCE(AV_CRC_32_IEEE); break; + case AV_CRC_32_IEEE_LE: CRC_INIT_TABLE_ONCE(AV_CRC_32_IEEE_LE); break; + case AV_CRC_16_ANSI_LE: CRC_INIT_TABLE_ONCE(AV_CRC_16_ANSI_LE); break; + default: av_assert0(0); + } #endif return av_crc_table[crc_id]; }