From patchwork Sat Nov 25 17:01:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rostislav Pehlivanov X-Patchwork-Id: 6351 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp3661464jah; Sat, 25 Nov 2017 09:02:23 -0800 (PST) X-Google-Smtp-Source: AGs4zMbzlx8uYpo+JnfPaqbHjXXuA0BYwkz7hewEMvsv35sTdHiT80/nTYsSGwUOTYJ3r2x+wLwe X-Received: by 10.223.166.51 with SMTP id k48mr27400374wrc.125.1511629343634; Sat, 25 Nov 2017 09:02:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511629343; cv=none; d=google.com; s=arc-20160816; b=qX3qw0EjoA1TxEvf5wcAb9utxinFDbIg0j5yIk8Nf/EeHhkAmj2bpFJc9BmJ0rItfz 08Z8TbMOWTWqeU/YfOO+kbH5MXn53kSxM3hNaJ5d7iGZDTFQwojUT/AkB4daGxnTsZu0 EMeak038wutBY4oBLKEXuB1XO7D63T7MEJjOHN3KMhIedo7EDSXphAPmlgHH+bWAzf7+ rEP37yfdZa9sZkuJOfEhQYTKI+QhRah8RFWgiv+cp1m0U9gpLUhGlPq5chOcmtaFzmD4 5/j3XgjWsVi8I/sFx6yGMZGAEobyL3a3Tu1T5mJsfiQGe95XJTj4qzDVfzCcI7qepoI8 w1SA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=5Oehp3clDvgvNyXfI8zwPzMj7gEOGZIsrBPCEexUKQM=; b=stRroTM9QtquniVzViWMcuonGS3PHigoM7PPh0FnesfnBkidDvxEmZPT28JH/H/OVP 5HC0GcUyQ8R7nCvRAbmv/OATLAfaY5VbWseQ+cu3HNmZAzsHFyOE+X/s5IzpkavaAuwP MUOffai+GVlzfhJwM27aeOzszXF0+trNG5g2xo8pLx9+qEXXN/XTmu42q7kf5RzRuTne 1zYxuhdBxYft6XWQeqEe4R7BPNiznKqE3983qVG7v/1d59StXgabfAiSKiV0hNW4xC6K vH6lSQRtZVscgWyBqeu59Z+xK5V/aJU4u1RHnPUBtWVMOlRItS8De/6lOAF4X2SVdUOt Qygw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=VgVkhEaa; 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 40si18090830wru.74.2017.11.25.09.02.23; Sat, 25 Nov 2017 09:02:23 -0800 (PST) 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=VgVkhEaa; 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 CB52B68A32C; Sat, 25 Nov 2017 19:02:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f193.google.com (mail-wr0-f193.google.com [209.85.128.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 03D2968A2C0 for ; Sat, 25 Nov 2017 19:02:04 +0200 (EET) Received: by mail-wr0-f193.google.com with SMTP id l22so22693136wrc.11 for ; Sat, 25 Nov 2017 09:02:05 -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; bh=Z7yLgYpFZ9akODZwlq/Jj6aY0wrq0ACu7Z4ZKYTkbhg=; b=VgVkhEaasUGx9Gll8LEohbIulXYgcJwYNDFDBFE1rBg9o41XasAveUq+tk1hVkitwj rNJA8hrDEg3AAYiqO0pD4YlrHjvGu7Rjw6EGbdkpKE72wvFuu36W6WDk3nxTZjbfH2wm TO8fUdWJ6H7Tru+CnS8Ntc1PIJT0/ChpNUzo8sdLK1ZVKdx4OiQnKLXkIiIrop1ktIjA 2JVzdatPz5N9YEVwSrTAK6q6xwQecmIEy9cinSXLmN914m0+6eXVQBHGiIQaS48j9GmD cU7QOpzC67+YRch7280DplJXDr/JB4GNLGVB6XIzAN8IgACkWsTBuLuTTExf4hEgQqlZ wYtw== 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; bh=Z7yLgYpFZ9akODZwlq/Jj6aY0wrq0ACu7Z4ZKYTkbhg=; b=ihOnqL5H916pMHjVD7TLiaM+6ZX/BkpqaoMhtzTLnKc3y0TUaLyC2WDJrZdgCkG8bJ 9/5H+IoZrtDFextlqwtUg4OiGib7MveW4jV9DN2uG4ycpBJMnyFRSvfpB5k/Cb2BhcOh no08Tr4Hxh9vnr38WvPMBzKv0acfK9Vx2F9yKTmb/2zdYs80AzLcFFjjn5MufwwoOYFI vmfjGjANq9vXRYSoEVzh+rBg1hwS+sPdxzxjpE0zcrHedfqtf8cA7vU9Lrmh0sIdH9FR dHXO+bWLh2nFlrh1j7kELCqQWyWyMsNe95vHYtz5+tJ5ZpCt+a8LErGYGXtgH4tA+Pdc cwqg== X-Gm-Message-State: AJaThX4K9SaJJyWGtGIyxBt+BeRXK4EAMAPOqEiQYWQvkjNBtnHtQMv9 2g6a8jQThmtrhMkVID8WFMcRfcLk X-Received: by 10.223.160.61 with SMTP id k58mr20144869wrk.252.1511629324671; Sat, 25 Nov 2017 09:02:04 -0800 (PST) Received: from moonbase.pars.ee ([2a00:23c4:7c83:f700:8110:b6b7:54ec:1dae]) by smtp.gmail.com with ESMTPSA id m133sm17838624wmd.40.2017.11.25.09.02.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 25 Nov 2017 09:02:04 -0800 (PST) From: Rostislav Pehlivanov To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Nov 2017 17:01:57 +0000 Message-Id: <20171125170157.32154-3-atomnuker@gmail.com> X-Mailer: git-send-email 2.15.0.417.g466bffb3ac In-Reply-To: <20171125170157.32154-1-atomnuker@gmail.com> References: <20171125170157.32154-1-atomnuker@gmail.com> Subject: [FFmpeg-devel] [PATCH v3 3/3] error_resilience: remove avpriv_atomic usage 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: Rostislav Pehlivanov MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Rostislav Pehlivanov --- libavcodec/error_resilience.c | 20 ++++++++++---------- libavcodec/error_resilience.h | 3 ++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c index 0c7f29d171..8f172beca6 100644 --- a/libavcodec/error_resilience.c +++ b/libavcodec/error_resilience.c @@ -807,7 +807,7 @@ void ff_er_frame_start(ERContext *s) memset(s->error_status_table, ER_MB_ERROR | VP_START | ER_MB_END, s->mb_stride * s->mb_height * sizeof(uint8_t)); - s->error_count = 3 * s->mb_num; + atomic_init(&s->error_count, 3 * s->mb_num); s->error_occurred = 0; } @@ -852,20 +852,20 @@ void ff_er_add_slice(ERContext *s, int startx, int starty, mask &= ~VP_START; if (status & (ER_AC_ERROR | ER_AC_END)) { mask &= ~(ER_AC_ERROR | ER_AC_END); - avpriv_atomic_int_add_and_fetch(&s->error_count, start_i - end_i - 1); + atomic_fetch_add(&s->error_count, start_i - end_i - 1); } if (status & (ER_DC_ERROR | ER_DC_END)) { mask &= ~(ER_DC_ERROR | ER_DC_END); - avpriv_atomic_int_add_and_fetch(&s->error_count, start_i - end_i - 1); + atomic_fetch_add(&s->error_count, start_i - end_i - 1); } if (status & (ER_MV_ERROR | ER_MV_END)) { mask &= ~(ER_MV_ERROR | ER_MV_END); - avpriv_atomic_int_add_and_fetch(&s->error_count, start_i - end_i - 1); + atomic_fetch_add(&s->error_count, start_i - end_i - 1); } if (status & ER_MB_ERROR) { s->error_occurred = 1; - avpriv_atomic_int_set(&s->error_count, INT_MAX); + atomic_store(&s->error_count, INT_MAX); } if (mask == ~0x7F) { @@ -878,7 +878,7 @@ void ff_er_add_slice(ERContext *s, int startx, int starty, } if (end_i == s->mb_num) - avpriv_atomic_int_set(&s->error_count, INT_MAX); + atomic_store(&s->error_count, INT_MAX); else { s->error_status_table[end_xy] &= mask; s->error_status_table[end_xy] |= status; @@ -893,7 +893,7 @@ void ff_er_add_slice(ERContext *s, int startx, int starty, prev_status &= ~ VP_START; if (prev_status != (ER_MV_END | ER_DC_END | ER_AC_END)) { s->error_occurred = 1; - avpriv_atomic_int_set(&s->error_count, INT_MAX); + atomic_store(&s->error_count, INT_MAX); } } } @@ -910,10 +910,10 @@ void ff_er_frame_end(ERContext *s) /* We do not support ER of field pictures yet, * though it should not crash if enabled. */ - if (!s->avctx->error_concealment || s->error_count == 0 || + if (!s->avctx->error_concealment || !atomic_load(&s->error_count) || s->avctx->lowres || !er_supported(s) || - s->error_count == 3 * s->mb_width * + atomic_load(&s->error_count) == 3 * s->mb_width * (s->avctx->skip_top + s->avctx->skip_bottom)) { return; } @@ -927,7 +927,7 @@ void ff_er_frame_end(ERContext *s) if ( mb_x == s->mb_width && s->avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO && (FFALIGN(s->avctx->height, 16)&16) - && s->error_count == 3 * s->mb_width * (s->avctx->skip_top + s->avctx->skip_bottom + 1) + && atomic_load(&s->error_count) == 3 * s->mb_width * (s->avctx->skip_top + s->avctx->skip_bottom + 1) ) { av_log(s->avctx, AV_LOG_DEBUG, "ignoring last missing slice\n"); return; diff --git a/libavcodec/error_resilience.h b/libavcodec/error_resilience.h index 27c2008694..664a765659 100644 --- a/libavcodec/error_resilience.h +++ b/libavcodec/error_resilience.h @@ -20,6 +20,7 @@ #define AVCODEC_ERROR_RESILIENCE_H #include +#include #include "avcodec.h" #include "me_cmp.h" @@ -60,7 +61,7 @@ typedef struct ERContext { ptrdiff_t mb_stride; ptrdiff_t b8_stride; - volatile int error_count; + atomic_int error_count; int error_occurred; uint8_t *error_status_table; uint8_t *er_temp_buffer;