From patchwork Wed Jul 12 03:51:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rostislav Pehlivanov X-Patchwork-Id: 4303 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.1.76 with SMTP id 73csp285147vsb; Tue, 11 Jul 2017 20:57:56 -0700 (PDT) X-Received: by 10.28.156.203 with SMTP id f194mr126773wme.1.1499831876094; Tue, 11 Jul 2017 20:57:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499831876; cv=none; d=google.com; s=arc-20160816; b=LeJtjpEEgRdY2mWTZIgzYcWD8QkaIgKS0A9cxZZKLMQ+DFpW723NoCV41GVlFWyvLJ 9D5pB7hL7v27ZdSDIjFzGt0d5//Kssjkw4P7cKqy2QTKtDpA4HF1LjkR1/eOYDr9LQ9J cQO9Wtyc6gtSYphqkY5VFvtcbtak2Vxqfb/gkNigFz/CHWGon0bHjU6eBprI6ktE1ZmH hOPcBW/eoy1zbyb3PwjVcUzWj+EVpcj2underm2CVgiDMt6fAyoNdF1knS9Ypj3Ux+Pe ty+cZwSTYaBIVhpBmbiwJy/NNiiXdz9JolDJMBY85ww9axrPLq/ilpoDGCHtN53nWJoR yZeg== 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:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=fAV4CyoVl0qPOKVX+OEuf6/jbkB8tZbM3JapnQAYi+Y=; b=AuVa7BNSW7n9PXFqoSUtrktj5hArDmiwdkOc5ATObL7ASIN8m6hpdqAUHsh/T8A81f 3FWpPN0J9kIWBRyJGUFfQ+DBYacOX7U4QVxXQz6A9qhWU/tiT4xfcslZWCDVOacfNAy1 STMiJveo/AFs2MQQw/raK142m/1j37mHaGuXulQ3X9sJ/nTdb4McJiIo03fpCjMn+wBI KZm9wFdUuTRjuXjg3+IIm4MqFjXgc8Gon3J/5HB7x30dKg8OpyxoM1ghabDP2FT6MsNV JI+XX2AyJcEzVb1EFxJDTw3NZZ2cyLPh5253n7VWPYsKnWbCH73qTtr9THHvXHNGiPt/ IJNA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.b=BhuFEace; 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 k6si1057218wmd.148.2017.07.11.20.57.55; Tue, 11 Jul 2017 20:57:56 -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=BhuFEace; 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 8698C689A3F; Wed, 12 Jul 2017 06:57:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f195.google.com (mail-wr0-f195.google.com [209.85.128.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 88ECA6882B3 for ; Wed, 12 Jul 2017 06:57:40 +0300 (EEST) Received: by mail-wr0-f195.google.com with SMTP id z45so2767656wrb.2 for ; Tue, 11 Jul 2017 20:57:45 -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; bh=QVvrSrSU8XUmZ+nWvWHxThsLg+TMrlMOfEY7jgdMHfI=; b=BhuFEaceboJiikVPVn+Ga5KNkrLpsZ86rcI8BidjwBMnOlzsdhUFykTjIqaI1MToqS Cekv5fAEyiICmR6O07H4pR0oHinfUT/nt0/bSRa9Wp5F+cat9+eG/tDSRI+u6oGsYsWR 6Evtt+XBxBWZmHlvzcLfqaXlHQ6FF9wj16ONGXww+RijjLCQ24LjM1UYT254SaXXLneb A6S7Crci7t6i5XGiEOMGzEMyAV5dohnrpz1VnedxY5TSc1P/twz1VzIYVPs1rj5TczC2 NHD6ZYp2SGP2LWN7xZNK4TKpMqPjeSNtLO0Gt/5yf1x3fgo8IohlnuSR9AJIGwQlz32K X+YA== 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; bh=QVvrSrSU8XUmZ+nWvWHxThsLg+TMrlMOfEY7jgdMHfI=; b=C3r17/psr+zrufQRFiRzKIKRtfu8948YYYbuq4/CPnFjwZy5u8JJSskrs2cm6NKkOM 3IFdvFy3u73kvqksUQ/Zd/jzFOsf/4G85mJGenIFT/815Od2AAsXOeH/MJiRP/WygpIV VotZqZmlh+X/5jYfkTE35hV9gJChLKpnMu1cxf6x2hWcXmol/Hsy5wFQ2xEV0UV9WmEt L+JzCok0xAQzCYoNDQLJEAgcw3pZuycqJFYLeRdaYgBcQnI9wN3uRViYAjN7/whQPJLz Wd9gwCnL6ztDL1S5r0pvqlJ6VA3elppXCjGGEiDYIyfB5IfswhalYoI2S4/eUO2qcwZI q37Q== X-Gm-Message-State: AIVw110fTeMgKu7+G+QCdCoD99C1O9SXePXLsyoB1ZY3Loe7u50S8Jb+ 7sUVMAVfgsaIrlLg+SE= X-Received: by 10.28.51.212 with SMTP id z203mr886294wmz.103.1499831490600; Tue, 11 Jul 2017 20:51:30 -0700 (PDT) Received: from skyhide.lan ([2a00:23c4:7c80:f00:b068:4c81:65c4:534d]) by smtp.gmail.com with ESMTPSA id e31sm1625427wre.54.2017.07.11.20.51.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Jul 2017 20:51:29 -0700 (PDT) From: Rostislav Pehlivanov To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jul 2017 04:51:27 +0100 Message-Id: <20170712035127.6917-1-atomnuker@gmail.com> X-Mailer: git-send-email 2.13.2 Subject: [FFmpeg-devel] [PATCH] opusenc: use float_dsp for transient mdcts 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" vector_fmul_reverse requires padding the window at the front Signed-off-by: Rostislav Pehlivanov --- libavcodec/opus_celt.h | 4 ++-- libavcodec/opusenc.c | 8 +++----- libavcodec/opustab.c | 8 ++++++-- libavcodec/opustab.h | 3 +-- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/libavcodec/opus_celt.h b/libavcodec/opus_celt.h index b80ade84f2..62aee359f6 100644 --- a/libavcodec/opus_celt.h +++ b/libavcodec/opus_celt.h @@ -75,8 +75,8 @@ typedef struct CeltBlock { DECLARE_ALIGNED(32, float, coeffs)[CELT_MAX_FRAME_SIZE]; /* Used by the encoder */ - DECLARE_ALIGNED(32, float, overlap)[120]; - DECLARE_ALIGNED(32, float, samples)[CELT_MAX_FRAME_SIZE]; + DECLARE_ALIGNED(32, float, overlap)[CELT_OVERLAP]; + DECLARE_ALIGNED(32, float, samples)[FFALIGN(CELT_MAX_FRAME_SIZE, 8)]; /* postfilter parameters */ int pf_period_new; diff --git a/libavcodec/opusenc.c b/libavcodec/opusenc.c index 8aba291e7e..6cefd33884 100644 --- a/libavcodec/opusenc.c +++ b/libavcodec/opusenc.c @@ -210,17 +210,15 @@ static void celt_frame_mdct(OpusEncContext *s, CeltFrame *f) int i, t, ch; float *win = s->scratch; - /* I think I can use s->dsp->vector_fmul_window for transients at least */ if (f->transient) { for (ch = 0; ch < f->channels; ch++) { CeltBlock *b = &f->block[ch]; float *src1 = b->overlap; for (t = 0; t < f->blocks; t++) { float *src2 = &b->samples[CELT_OVERLAP*t]; - for (i = 0; i < CELT_OVERLAP; i++) { - win[ i] = src1[i]*ff_celt_window[i]; - win[CELT_OVERLAP + i] = src2[i]*ff_celt_window[CELT_OVERLAP - i - 1]; - } + s->dsp->vector_fmul(win, src1, ff_celt_window, CELT_OVERLAP); + s->dsp->vector_fmul_reverse(&win[CELT_OVERLAP], src2, + ff_celt_window - 8, CELT_OVERLAP + 8); src1 = src2; s->mdct[0]->mdct(s->mdct[0], b->coeffs + t, win, f->blocks); } diff --git a/libavcodec/opustab.c b/libavcodec/opustab.c index 635cc363e2..1f3049676e 100644 --- a/libavcodec/opustab.c +++ b/libavcodec/opustab.c @@ -1096,7 +1096,9 @@ const float ff_celt_postfilter_taps[3][3] = { { 0.7998046875f, 0.1000976562f, 0.0 } }; -DECLARE_ALIGNED(32, const float, ff_celt_window)[120] = { +DECLARE_ALIGNED(32, static const float, ff_celt_window_padded)[128] = { + 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, + 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f, 6.7286966e-05f, 0.00060551348f, 0.0016815970f, 0.0032947962f, 0.0054439943f, 0.0081276923f, 0.011344001f, 0.015090633f, 0.019364886f, 0.024163635f, 0.029483315f, 0.035319905f, 0.041668911f, 0.048525347f, 0.055883718f, @@ -1120,9 +1122,11 @@ DECLARE_ALIGNED(32, const float, ff_celt_window)[120] = { 0.99499004f, 0.99592297f, 0.99672162f, 0.99739874f, 0.99796667f, 0.99843728f, 0.99882195f, 0.99913147f, 0.99937606f, 0.99956527f, 0.99970802f, 0.99981248f, 0.99988613f, 0.99993565f, 0.99996697f, - 0.99998518f, 0.99999457f, 0.99999859f, 0.99999982f, 1.0000000f, + 0.99998518f, 0.99999457f, 0.99999859f, 0.99999982f, 1.00000000f, }; +const float *ff_celt_window = &ff_celt_window_padded[8]; + /* square of the window, used for the postfilter */ const float ff_celt_window2[120] = { 4.5275357e-09f, 3.66647e-07f, 2.82777e-06f, 1.08557e-05f, 2.96371e-05f, 6.60594e-05f, diff --git a/libavcodec/opustab.h b/libavcodec/opustab.h index b4589869ef..bce5a42830 100644 --- a/libavcodec/opustab.h +++ b/libavcodec/opustab.h @@ -154,8 +154,7 @@ extern const uint32_t ff_celt_pvq_u[1272]; extern const float ff_celt_postfilter_taps[3][3]; extern const float ff_celt_window2[120]; - -DECLARE_ALIGNED(32, extern const float, ff_celt_window)[120]; +extern const float *ff_celt_window; extern const uint32_t * const ff_celt_pvq_u_row[15];