From patchwork Thu Oct 4 12:01:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 10576 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:ab0:73d2:0:0:0:0:0 with SMTP id m18csp786357uaq; Thu, 4 Oct 2018 05:01:54 -0700 (PDT) X-Google-Smtp-Source: ACcGV63WFFU+qBiA5vlWQkA2A29EMRbCjLqOzqu3z1GYiSGez3NMCWfniTKe2K6GQA8m63em+PiZ X-Received: by 2002:adf:94c2:: with SMTP id 60-v6mr4475593wrr.247.1538654514687; Thu, 04 Oct 2018 05:01:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538654514; cv=none; d=google.com; s=arc-20160816; b=k3+GATJ0TCSBTm8Sg5z7kvM65o0++eVS1//cde9TYwE/+AO6wMhr0x34XPQLOtDRlx PUpVVLFiZDKidR2X5ovsUfOdMl4uUujqSSzXe14kDXQewiIAxT7GIyOn+L2c5VVSoqLr F21luMBrXnFWYFMbN+pyUZ8s2TIpB1fo5M16ohbyDn0x8Val33V5JvmeJJSxGvKZwrQe FXvddCI61OLOeV5/naYH8IrgOgACycj+TfxckDNfQA31c5Nl9qTak56TCRCnRqTEa+r1 ObDMUZgqJcy+TyftKtlWt63OMX+CRBW8U2rygYwvtybgWS+2/kI7PO/GaICjo7FqtIMh 9Whg== 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: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; bh=OhbngFK5qXQCzpYztPBxKEGrJsNu8aRnTn85sLhduiQ=; b=M6rGE6A9MQfvW5cMB3sO1mLOZa0r0SLA7iJkxEjlXIdjqlJTIrdTR0ksTeanqRSPyG tz9XIDB5X64RXkpvsCLuHtUHztBbndiOeXIXIJxakpLYwUHfCZ+Oz1wMKjTlJWxJ2Pts KmfDquoNsdfALasQaeVKwaAUE3aTrtZo7EhBEyAz/pQ48VRRkuLhCCrcPGcnV/wbc/nQ Qe0IQLZoHvP4eRQf7wyMIfXf/FIMwNkzxtwJJdZSMkfM/TDaBZpa4a+CItGSF53kSkCs 3YCVgzVf3FSDawbKD1Y12Gk00hSK4FrFDx53f+iPUae9zHBsHVTFfk6iedhUiiCdWpb/ +8ZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=FkJl6WlC; 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=QUARANTINE 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 s4-v6si3814874wms.121.2018.10.04.05.01.54; Thu, 04 Oct 2018 05:01:54 -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=FkJl6WlC; 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=QUARANTINE 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 A1B8268A4AA; Thu, 4 Oct 2018 15:01:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1D03368A0FA for ; Thu, 4 Oct 2018 15:01:15 +0300 (EEST) Received: by mail-ed1-f42.google.com with SMTP id q19-v6so8328920edr.1 for ; Thu, 04 Oct 2018 05:01:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=HZ5Sr8YcNd6KGQxQFWgi46muMhElbBTI6nSPWROnq6A=; b=FkJl6WlCWs88Sj4ZVZ7dlyrVBV3Qc6NbY8wdJfxiYQqCfh8mx/RaME8ec8RkyBBywi oAkesnib46poERRSZOVwdZVvAWqS0BFobAJFSJdadI1wtc27+sm020fOZsodf0+z7tQC z7SnlnBCplQBLNaOOj9KF7T9uEhe3mesN0CCEXJ640+d7qafex8yprjE5tpvyPdKeVcf R5DVHgQJdT1Niw+fkAv51G1+M1EBYf7mfGNnnwPOq+mDhp+C8PTCf00rW7SDhlnsJhyd 2jSVMYBFi0brJnCRwUiC0jSwma4j1cM6nkDw2W+mLFXKusavkWIpNRGaR1eY9NYV6eJu V2ew== 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:in-reply-to :references; bh=HZ5Sr8YcNd6KGQxQFWgi46muMhElbBTI6nSPWROnq6A=; b=Vglwhpbk1jo2mzRS5UUCLwyBjgRiX26b9PmrjU67QZG8HAE3wevvjZd6z2R5f2xyff 7Qu3zF56SV48yIzYbBeyzxgI8co2FyekB279oBooi9208o2d8w1Tl8d0v0HHCa7S5FEW nfhjOjPwTaTksA9yZIh5dcHiuFCg/ET0TL7FNKdRqdb/m6TGBivxkTxY/+YTDOYdtLpu HHuiZexEd83XAs91Tlm1jJD8trjLWx5WRYJ2sRnjjwrRXCSxU+JOO7gKC+HoSjQxoWO6 7St44A5wfKACFGoXHuC068iW+zt9tSKPPbUcT8ddDVghyCw5GHuJUrJKNOlzRD0m/c54 Tlqg== X-Gm-Message-State: ABuFfoh8VPNGq+3GZC1J0+jn2uzMV3fmliPlQPjLOtFkYGQW/EE7XELD wgDk7HqcLBOZwy5/8TVU0AsnIy1B X-Received: by 2002:aa7:cdc9:: with SMTP id h9-v6mr8101835edw.133.1538654494493; Thu, 04 Oct 2018 05:01:34 -0700 (PDT) Received: from localhost.localdomain ([94.250.174.60]) by smtp.gmail.com with ESMTPSA id o4-v6sm805741ejx.30.2018.10.04.05.01.33 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 04 Oct 2018 05:01:34 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Thu, 4 Oct 2018 14:01:20 +0200 Message-Id: <20181004120120.20953-2-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181004120120.20953-1-onemda@gmail.com> References: <20181004120120.20953-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/2] avfilter/af_afftdn: use lavfi internal queue 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Paul B Mahol --- This is significantly slower than current state for some unknown reason to me. --- libavfilter/af_afftdn.c | 56 +++++++++++++---------------------------- 1 file changed, 17 insertions(+), 39 deletions(-) diff --git a/libavfilter/af_afftdn.c b/libavfilter/af_afftdn.c index fbcb0f18d5..4353db05d1 100644 --- a/libavfilter/af_afftdn.c +++ b/libavfilter/af_afftdn.c @@ -20,13 +20,13 @@ #include -#include "libavutil/audio_fifo.h" #include "libavutil/avstring.h" #include "libavutil/channel_layout.h" #include "libavutil/opt.h" #include "libavcodec/avfft.h" #include "avfilter.h" #include "audio.h" +#include "filters.h" #include "formats.h" #define C (M_LN10 * 0.1) @@ -98,7 +98,6 @@ typedef struct AudioFFTDeNoiseContext { float last_noise_balance; int64_t block_count; - int64_t pts; int channels; int sample_noise; int sample_noise_start; @@ -135,8 +134,6 @@ typedef struct AudioFFTDeNoiseContext { double vector_b[5]; double matrix_b[75]; double matrix_c[75]; - - AVAudioFifo *fifo; } AudioFFTDeNoiseContext; #define OFFSET(x) offsetof(AudioFFTDeNoiseContext, x) @@ -616,7 +613,6 @@ static int config_input(AVFilterLink *inlink) if (!s->dnch) return AVERROR(ENOMEM); - s->pts = AV_NOPTS_VALUE; s->channels = inlink->channels; s->sample_rate = inlink->sample_rate; s->sample_advance = s->sample_rate / 80; @@ -846,10 +842,6 @@ static int config_input(AVFilterLink *inlink) } s->noise_band_count = s->noise_band_edge[16]; - s->fifo = av_audio_fifo_alloc(inlink->format, inlink->channels, s->fft_length); - if (!s->fifo) - return AVERROR(ENOMEM); - return 0; } @@ -1153,34 +1145,22 @@ static void get_auto_noise_levels(AudioFFTDeNoiseContext *s, } } -static int filter_frame(AVFilterLink *inlink, AVFrame *frame) +static int activate(AVFilterContext *ctx) { - AVFilterContext *ctx = inlink->dst; + AVFilterLink *inlink = ctx->inputs[0]; AVFilterLink *outlink = ctx->outputs[0]; AudioFFTDeNoiseContext *s = ctx->priv; AVFrame *out = NULL, *in = NULL; ThreadData td; int ret = 0; - if (s->pts == AV_NOPTS_VALUE) - s->pts = frame->pts; + FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); - ret = av_audio_fifo_write(s->fifo, (void **)frame->extended_data, frame->nb_samples); - av_frame_free(&frame); + ret = ff_inlink_peek_samples(inlink, s->window_length, &in); if (ret < 0) return ret; - while (av_audio_fifo_size(s->fifo) >= s->window_length) { - if (!in) { - in = ff_get_audio_buffer(outlink, s->window_length); - if (!in) - return AVERROR(ENOMEM); - } - - ret = av_audio_fifo_peek(s->fifo, (void **)in->extended_data, s->window_length); - if (ret < 0) - break; - + if (ret > 0) { if (s->track_noise) { for (int ch = 0; ch < inlink->channels; ch++) { DeNoiseChannel *dnch = &s->dnch[ch]; @@ -1232,9 +1212,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) out = ff_get_audio_buffer(outlink, s->sample_advance); if (!out) { - ret = AVERROR(ENOMEM); - break; + av_frame_free(&in); + return AVERROR(ENOMEM); } + out->pts = in->pts; for (int ch = 0; ch < inlink->channels; ch++) { DeNoiseChannel *dnch = &s->dnch[ch]; @@ -1262,17 +1243,16 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) memset(src + (s->window_length - s->sample_advance), 0, s->sample_advance * sizeof(*src)); } - av_audio_fifo_drain(s->fifo, s->sample_advance); + ff_inlink_skip_samples(inlink, FFMIN(ff_inlink_queued_samples(inlink), s->sample_advance)); - out->pts = s->pts; - ret = ff_filter_frame(outlink, out); - if (ret < 0) - break; - s->pts += s->sample_advance; + av_frame_free(&in); + return ff_filter_frame(outlink, out); } - av_frame_free(&in); - return ret; + FF_FILTER_FORWARD_STATUS(inlink, outlink); + FF_FILTER_FORWARD_WANTED(outlink, inlink); + + return FFERROR_NOT_READY; } static av_cold void uninit(AVFilterContext *ctx) @@ -1308,8 +1288,6 @@ static av_cold void uninit(AVFilterContext *ctx) } av_freep(&s->dnch); } - - av_audio_fifo_free(s->fifo); } static int query_formats(AVFilterContext *ctx) @@ -1393,7 +1371,6 @@ static const AVFilterPad inputs[] = { { .name = "default", .type = AVMEDIA_TYPE_AUDIO, - .filter_frame = filter_frame, .config_props = config_input, }, { NULL } @@ -1416,6 +1393,7 @@ AVFilter ff_af_afftdn = { .uninit = uninit, .inputs = inputs, .outputs = outputs, + .activate = activate, .process_command = process_command, .flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,