From patchwork Wed Jul 5 10:33:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Muhammad Faiz X-Patchwork-Id: 4216 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.1.76 with SMTP id 73csp672337vsb; Wed, 5 Jul 2017 03:33:53 -0700 (PDT) X-Received: by 10.223.169.145 with SMTP id b17mr24371512wrd.179.1499250833826; Wed, 05 Jul 2017 03:33:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499250833; cv=none; d=google.com; s=arc-20160816; b=XDBbWhY2quY91X74oWI3aVCLt81v7Mm4GBlNNIo14MZ3nPz+NhOE1jPImPO5xBgXPE h4hyhhX15zZjxqVue8Q3u/GXucDzcHyW6dBV4TuCtSulUGMcwK7k/tp4rjAUPgI+JffU 61bT0aPPuNae9cEHdLKrx6dH3O/Bmp1uMzsi1XPuqo30pVO1S7KN3VkMAzR5qSKTr/uH 1M30gr8q2RNLN/9n4Pu+egJji3hyVaVlq67XrDhGHlPpDTxO6qfDAk1zCzsm6IEfBe8y 7APYMK5HrohEYWDmWG0DknzfLYm8PdV5n5vsHybmYfrP88kI/jxnu787cTz9uHGyP7ey sW1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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=ze3AozLvinsCqbYsIGuisvCx4c8/U4I6ojCMoWlwGl8=; b=j+j96q97Oxtuqmwy1Q5WxykJxWDO1LVHeEi6ukbRS/XJjvkmjrPCqa6bB9Wx7oxfzV /1JBx18i+eJKspXsdqDiNJH8sPzhYuo/y/71UoXoPPzQEUjd5dVoIP0Dfy66gfQSyGiN mD+3klToJ+R67QGB0XX0rx1ZDtJnu0NTS9/fX8AlYvDxXQopPvi1ggWKndupCZTH4cA1 9BeP/gV0SHJI3w+zV/1Z0g54HcWNPThj86+r02rBBF+VyHEuJb8yfDj6SE3H2c5GEbcR /8GDVuWNraHeEBVWjLt3rvT8J1l95IslD1PosJJCCHZxCO3/zDzp2dttTM39asO6qT3p 2SNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.b=TndAtDVc; 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 p34si16445310wrc.158.2017.07.05.03.33.52; Wed, 05 Jul 2017 03:33:53 -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.b=TndAtDVc; 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 D7E7E688329; Wed, 5 Jul 2017 13:33:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f196.google.com (mail-pf0-f196.google.com [209.85.192.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 860666882B7 for ; Wed, 5 Jul 2017 13:33:40 +0300 (EEST) Received: by mail-pf0-f196.google.com with SMTP id c24so20268043pfe.1 for ; Wed, 05 Jul 2017 03:33:42 -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:mime-version :content-transfer-encoding; bh=kRzcD29jy9CUOQPkHDDVbRk+lFLy65qBZLKsoLblUSw=; b=TndAtDVch7sDIDWJtky+qe6W7RHe8UG7xXaTqEO24cb604ChY7UB4IkLCzMFpHn7E9 2YgINZ0AGYw1+BVBjbzfc51eYqou03JC7Irn71/iyAAnmuSiuGpmQB4TljZdvSKJ3SYy lEjaGacymu6cgzCpLmDTvh+1lWZFkonH68gOTbmWJmfQ3UX6MEn3uMr54yCEbnTXTzqn 31RgyXQko+/htSl2HNFbYcmLhBQpCeP2Itu4ADsS3OfLN+nyHuFLb3WABT/kj7O0w6NP n3cVGUypzUTdGySR5c3MTBxzqDJb41BLQgiXIbm8wldRCbJMoq9fLdLnTv1TiUCgWGF4 13dw== 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:mime-version :content-transfer-encoding; bh=kRzcD29jy9CUOQPkHDDVbRk+lFLy65qBZLKsoLblUSw=; b=no/aP7DECAJjy8l0rn9Yd6xPZBVIinPgeBKbiTgaz7EogWbUksZ+O74oICBit+tfwO i/QXvoInH1exJ26ha7usU9bzNiviPr3hKLFJUlz/GOotPuGHhwA5bs+GqAZhU29UIOQa j7RJXDIk5b874Jv63S/M0RFNdWmNZhuk9PE2UR2wo9SqA5pQHylmunV/wWdrxr4t4JYn hiWpUyk3D9GWnWIgoqoIPT+L5QfRDYP/2rqcUGfiVYEoDqz3iyhctn/gKN22znI76YPJ 6Nse2n4UQrEOL0HtylzvgpS+DVpcMYbzi122XRFIwZsNV18JSbgtJWlldgbkvD5D9A3z gxWQ== X-Gm-Message-State: AIVw1132Nj68OQRUeHyPuUcV23rrr7grIzsiBbBICOaXwB0U2wItpdA7 8WeJ6TMu2UFP0LHu X-Received: by 10.99.107.66 with SMTP id g63mr19921967pgc.277.1499250820824; Wed, 05 Jul 2017 03:33:40 -0700 (PDT) Received: from localhost.localdomain ([114.124.235.210]) by smtp.gmail.com with ESMTPSA id o4sm34492700pga.47.2017.07.05.03.33.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jul 2017 03:33:40 -0700 (PDT) From: Muhammad Faiz To: ffmpeg-devel@ffmpeg.org Date: Wed, 5 Jul 2017 17:33:17 +0700 Message-Id: <20170705103318.21826-1-mfcc64@gmail.com> X-Mailer: git-send-email 2.9.3 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/rdft: remove sintable 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: Muhammad Faiz Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" It is redundant with costable. The first half of sintable is identical with the second half of costable. The second half of sintable is negative value of the first half of sintable. The computation is changed to handle sign of sin values, so disable arm optimization. Signed-off-by: Muhammad Faiz --- libavcodec/Makefile | 3 +-- libavcodec/rdft.c | 70 +++++++++++++++++++---------------------------------- libavcodec/rdft.h | 25 +------------------ 3 files changed, 27 insertions(+), 71 deletions(-) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index b440a00..59029a8 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -122,8 +122,7 @@ OBJS-$(CONFIG_QSV) += qsv.o OBJS-$(CONFIG_QSVDEC) += qsvdec.o OBJS-$(CONFIG_QSVENC) += qsvenc.o OBJS-$(CONFIG_RANGECODER) += rangecoder.o -RDFT-OBJS-$(CONFIG_HARDCODED_TABLES) += sin_tables.o -OBJS-$(CONFIG_RDFT) += rdft.o $(RDFT-OBJS-yes) +OBJS-$(CONFIG_RDFT) += rdft.o OBJS-$(CONFIG_RV34DSP) += rv34dsp.o OBJS-$(CONFIG_SHARED) += log2_tab.o reverse.o OBJS-$(CONFIG_SINEWIN) += sinewin.o sinewin_fixed.o diff --git a/libavcodec/rdft.c b/libavcodec/rdft.c index c318aa8..9590673 100644 --- a/libavcodec/rdft.c +++ b/libavcodec/rdft.c @@ -28,28 +28,6 @@ * (Inverse) Real Discrete Fourier Transforms. */ -/* sin(2*pi*x/n) for 0<=x>2); i++) { - i1 = 2*i; - i2 = n-i1; - /* Separate even and odd FFTs */ - ev.re = k1*(data[i1 ]+data[i2 ]); - od.im = -k2*(data[i1 ]-data[i2 ]); - ev.im = k1*(data[i1+1]-data[i2+1]); - od.re = k2*(data[i1+1]+data[i2+1]); - /* Apply twiddle factors to the odd FFT and add to the even FFT */ - data[i1 ] = ev.re + od.re*tcos[i] - od.im*tsin[i]; - data[i1+1] = ev.im + od.im*tcos[i] + od.re*tsin[i]; - data[i2 ] = ev.re - od.re*tcos[i] + od.im*tsin[i]; - data[i2+1] = -ev.im + od.im*tcos[i] + od.re*tsin[i]; + +#define RDFT_UNMANGLE(sign0, sign1) \ + for (i = 1; i < (n>>2); i++) { \ + i1 = 2*i; \ + i2 = n-i1; \ + /* Separate even and odd FFTs */ \ + ev.re = k1*(data[i1 ]+data[i2 ]); \ + od.im = -k2*(data[i1 ]-data[i2 ]); \ + ev.im = k1*(data[i1+1]-data[i2+1]); \ + od.re = k2*(data[i1+1]+data[i2+1]); \ + /* Apply twiddle factors to the odd FFT and add to the even FFT */ \ + data[i1 ] = ev.re + od.re*tcos[i] sign0 od.im*tsin[i]; \ + data[i1+1] = ev.im + od.im*tcos[i] sign1 od.re*tsin[i]; \ + data[i2 ] = ev.re - od.re*tcos[i] sign1 od.im*tsin[i]; \ + data[i2+1] = -ev.im + od.im*tcos[i] sign1 od.re*tsin[i]; \ + } + + if (s->inverse != (s->sign_convention == 1)) { + RDFT_UNMANGLE(-,+) + } else { + RDFT_UNMANGLE(+,-) } + data[2*i+1]=s->sign_convention*data[2*i+1]; if (s->inverse) { data[0] *= k1; @@ -113,18 +100,11 @@ av_cold int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans) ff_init_ff_cos_tabs(nbits); s->tcos = ff_cos_tabs[nbits]; - s->tsin = ff_sin_tabs[nbits]+(trans == DFT_R2C || trans == DFT_C2R)*(n>>2); -#if !CONFIG_HARDCODED_TABLES - { - int i; - const double theta = (trans == DFT_R2C || trans == DFT_C2R ? -1 : 1) * 2 * M_PI / n; - for (i = 0; i < (n >> 2); i++) - s->tsin[i] = sin(i * theta); - } -#endif + s->tsin = ff_cos_tabs[nbits] + (n >> 2); s->rdft_calc = rdft_calc_c; - if (ARCH_ARM) ff_rdft_init_arm(s); + // FIXME change arm implementation + //if (ARCH_ARM) ff_rdft_init_arm(s); return 0; } diff --git a/libavcodec/rdft.h b/libavcodec/rdft.h index 37c40e7..0b3b675 100644 --- a/libavcodec/rdft.h +++ b/libavcodec/rdft.h @@ -25,29 +25,6 @@ #include "config.h" #include "fft.h" -#if CONFIG_HARDCODED_TABLES -# define SINTABLE_CONST const -#else -# define SINTABLE_CONST -#endif - -#define SINTABLE(size) \ - SINTABLE_CONST DECLARE_ALIGNED(16, FFTSample, ff_sin_##size)[size/2] - -extern SINTABLE(16); -extern SINTABLE(32); -extern SINTABLE(64); -extern SINTABLE(128); -extern SINTABLE(256); -extern SINTABLE(512); -extern SINTABLE(1024); -extern SINTABLE(2048); -extern SINTABLE(4096); -extern SINTABLE(8192); -extern SINTABLE(16384); -extern SINTABLE(32768); -extern SINTABLE(65536); - struct RDFTContext { int nbits; int inverse; @@ -55,7 +32,7 @@ struct RDFTContext { /* pre/post rotation tables */ const FFTSample *tcos; - SINTABLE_CONST FFTSample *tsin; + const FFTSample *tsin; FFTContext fft; void (*rdft_calc)(struct RDFTContext *s, FFTSample *z); };