From patchwork Tue Apr 4 16:48:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ronald S. Bultje" X-Patchwork-Id: 3290 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.44.195 with SMTP id s186csp275919vss; Tue, 4 Apr 2017 09:50:51 -0700 (PDT) X-Received: by 10.28.199.129 with SMTP id x123mr15596015wmf.7.1491324651557; Tue, 04 Apr 2017 09:50:51 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v21si25279870wrv.32.2017.04.04.09.50.51; Tue, 04 Apr 2017 09:50:51 -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; 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 94976688328; Tue, 4 Apr 2017 19:50:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f171.google.com (mail-qk0-f171.google.com [209.85.220.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 148ED680158 for ; Tue, 4 Apr 2017 19:50:08 +0300 (EEST) Received: by mail-qk0-f171.google.com with SMTP id p22so146799155qka.3 for ; Tue, 04 Apr 2017 09:50:10 -0700 (PDT) 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=zlLCcWJRz9u4kYKBeCguGZQieAZ3wAO5VkFxRYgXnYI=; b=Dqq57j3Xi5Y84AVaVLK9muOCf6+rU1GG1mlMYyqd+iuEhi5ctXNWQOt8PapdtF1rcO F1G/9sc3jmdAd5SIwwRxnoWaC3sSkQDlTOoPxyCI6TSpq1o6uy1abrFaqe+9uRQEu+r6 ok6e/dTy2Hcxr8mr34QC8l7qwmmYAPu9VfJdXB1MkKJ/rO1J/U1g++mz5KLQe69pF9rE RRZNMOJf+2Jeg79ZIbT3/b8peaad5PzrwkphGhcpFKYZyQw5wUNHMlzUHiayMSwG8jc0 dN9nzc/RokRXNlWlMr09EQotptYTvzVPKlRozomqrYRY1oI6GecHtGl6lrL/6TI/nJz5 fhOQ== 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=zlLCcWJRz9u4kYKBeCguGZQieAZ3wAO5VkFxRYgXnYI=; b=Pxt4YHX8G6KyUPVpeSgSBtuK5ZCXVAdyTZWaycH5XIZaRDpUg2F0KaAdwrtMW07yD+ 9s+GAqeWsxFO0YQ04T5KswAhgghzJtXjBbanYm+NunsKbLpiMDpf2WKBOQR28L33BDt2 2g4TUod/AlAZUf9fvC4VnwrSZk2DknNU/yluxBG0BgTy5M7hjeJCQ4ToVWN4SARWiKv2 Az3DZ6MVwaGf8R9UASU7yZlPfS0lHExyGVFFrwGm6Tbgvc/Eh9hBaCxtlGsYygGML/u5 jhtpZ1YbSVn8Kfq1YyZOZ3hrjD4tB+mOSzfrlFFG/5OEOnT4eNmk9MRUUfPXUHcXm7Xt qD1A== X-Gm-Message-State: AFeK/H2nsaaNw6/sNak7ZqM2GhHx8CEABhkAqgnsKMl95Ed8JTXjdYtlUvOB1leS6ODxdg== X-Received: by 10.55.31.65 with SMTP id f62mr17876332qkf.212.1491324609104; Tue, 04 Apr 2017 09:50:09 -0700 (PDT) Received: from localhost.localdomain ([65.206.95.146]) by smtp.gmail.com with ESMTPSA id x19sm12205798qtc.23.2017.04.04.09.50.08 (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 04 Apr 2017 09:50:08 -0700 (PDT) From: "Ronald S. Bultje" To: ffmpeg-devel@ffmpeg.org Date: Tue, 4 Apr 2017 12:48:18 -0400 Message-Id: <1491324498-26655-6-git-send-email-rsbultje@gmail.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1491324498-26655-1-git-send-email-rsbultje@gmail.com> References: <1491324498-26655-1-git-send-email-rsbultje@gmail.com> Subject: [FFmpeg-devel] [PATCH 6/6] jrev/xvid: hardcode use of C put/add_pixels_clamped. 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: "Ronald S. Bultje" MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This removes the last use of the ff_put/add_pixels_clamped global function pointers, and as such they are removed. This patch has a negative effect on performance on MIPS, since there's a SIMD-optimized put/add_pixels_clamped, but no xvid or jrev. From a code maintenance point of view, that is probably acceptable. Because the global function pointers are removed, this fixes the following tsan warnings when running e.g. fate-dnxhr-parse: WARNING: ThreadSanitizer: data race (pid=29917) Write of size 8 at 0x0000025b12d8 by thread T2 (mutexes: write M1543): #0 ff_idctdsp_init src/libavcodec/idctdsp.c:313 (ffmpeg+0x00000044b68e) [..] Previous write of size 8 at 0x0000025b12d8 by thread T1 (mutexes: write M1541): #0 ff_idctdsp_init src/libavcodec/idctdsp.c:313 (ffmpeg+0x00000044b68e) --- libavcodec/idctdsp.c | 18 ++++++------------ libavcodec/idctdsp.h | 6 ++++-- libavcodec/jrevdct.c | 4 ++-- libavcodec/xvididct.c | 4 ++-- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/libavcodec/idctdsp.c b/libavcodec/idctdsp.c index 84dd645..d596aed 100644 --- a/libavcodec/idctdsp.c +++ b/libavcodec/idctdsp.c @@ -80,11 +80,8 @@ av_cold void ff_init_scantable_permutation(uint8_t *idct_permutation, } } -void (*ff_put_pixels_clamped)(const int16_t *block, uint8_t *pixels, ptrdiff_t line_size); -void (*ff_add_pixels_clamped)(const int16_t *block, uint8_t *pixels, ptrdiff_t line_size); - -static void put_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels, - ptrdiff_t line_size) +void ff_put_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels, + ptrdiff_t line_size) { int i; @@ -157,8 +154,8 @@ static void put_signed_pixels_clamped_c(const int16_t *block, } } -static void add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels, - ptrdiff_t line_size) +void ff_add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels, + ptrdiff_t line_size) { int i; @@ -290,9 +287,9 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) } } - c->put_pixels_clamped = put_pixels_clamped_c; + c->put_pixels_clamped = ff_put_pixels_clamped_c; c->put_signed_pixels_clamped = put_signed_pixels_clamped_c; - c->add_pixels_clamped = add_pixels_clamped_c; + c->add_pixels_clamped = ff_add_pixels_clamped_c; if (CONFIG_MPEG4_DECODER && avctx->idct_algo == FF_IDCT_XVID) ff_xvid_idct_init(c, avctx); @@ -310,9 +307,6 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) if (ARCH_MIPS) ff_idctdsp_init_mips(c, avctx, high_bit_depth); - ff_put_pixels_clamped = c->put_pixels_clamped; - ff_add_pixels_clamped = c->add_pixels_clamped; - ff_init_scantable_permutation(c->idct_permutation, c->perm_type); } diff --git a/libavcodec/idctdsp.h b/libavcodec/idctdsp.h index f9ba6c3..26221f6 100644 --- a/libavcodec/idctdsp.h +++ b/libavcodec/idctdsp.h @@ -97,8 +97,10 @@ typedef struct IDCTDSPContext { enum idct_permutation_type perm_type; } IDCTDSPContext; -extern void (*ff_put_pixels_clamped)(const int16_t *block, uint8_t *pixels, ptrdiff_t line_size); -extern void (*ff_add_pixels_clamped)(const int16_t *block, uint8_t *pixels, ptrdiff_t line_size); +void ff_put_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels, + ptrdiff_t line_size); +void ff_add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels, + ptrdiff_t line_size); void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx); diff --git a/libavcodec/jrevdct.c b/libavcodec/jrevdct.c index 89dd9f2..3b15a52 100644 --- a/libavcodec/jrevdct.c +++ b/libavcodec/jrevdct.c @@ -1159,11 +1159,11 @@ void ff_j_rev_dct1(DCTBLOCK data){ void ff_jref_idct_put(uint8_t *dest, ptrdiff_t line_size, int16_t *block) { ff_j_rev_dct(block); - ff_put_pixels_clamped(block, dest, line_size); + ff_put_pixels_clamped_c(block, dest, line_size); } void ff_jref_idct_add(uint8_t *dest, ptrdiff_t line_size, int16_t *block) { ff_j_rev_dct(block); - ff_add_pixels_clamped(block, dest, line_size); + ff_add_pixels_clamped_c(block, dest, line_size); } diff --git a/libavcodec/xvididct.c b/libavcodec/xvididct.c index 4642a30..d8f3dd7 100644 --- a/libavcodec/xvididct.c +++ b/libavcodec/xvididct.c @@ -321,13 +321,13 @@ void ff_xvid_idct(int16_t *const in) static void xvid_idct_put(uint8_t *dest, ptrdiff_t line_size, int16_t *block) { ff_xvid_idct(block); - ff_put_pixels_clamped(block, dest, line_size); + ff_put_pixels_clamped_c(block, dest, line_size); } static void xvid_idct_add(uint8_t *dest, ptrdiff_t line_size, int16_t *block) { ff_xvid_idct(block); - ff_add_pixels_clamped(block, dest, line_size); + ff_add_pixels_clamped_c(block, dest, line_size); } av_cold void ff_xvid_idct_init(IDCTDSPContext *c, AVCodecContext *avctx)