From patchwork Tue Oct 2 20:08:45 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: 10637 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:ab0:73d2:0:0:0:0:0 with SMTP id m18csp3351133uaq; Tue, 2 Oct 2018 13:14:50 -0700 (PDT) X-Google-Smtp-Source: ACcGV62ij60mIHqNGBeQo5Ij0Gmjr5fcqTKR/kUx+eFuksAC4MF+kBnhGS7yIBLXMUaccjY7IWRx X-Received: by 2002:a1c:603:: with SMTP id 3-v6mr2855665wmg.64.1538511290296; Tue, 02 Oct 2018 13:14:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538511290; cv=none; d=google.com; s=arc-20160816; b=rGnLC4qCD+XHYcbd0d1QD+BJh53ZzPcvNoDpz/WOQjM5Y+l1YLDaVq8/E+tco/YXzF W8oFNTty18WIrAwiLkNUikdY49M8bfQC+Fb6A0ofTa7J8HGV6K6z2m9Eg/7+GAqYx1cF sJ8h0VDR6XnYhcK9gNhEE2eXaMB5O3C52QKRNTBMsaBmWT4gob0vCFw+LbrATiPbUEDc McG4r1OYfqEXY1ruPRw7RX0+J/nNThdyMkkiKD39PMD2yhDp/+qjOAgTv787Wt0VSIVa MZcDvLqkQuUvhFXKsSbMD4JeU3yh1cUscKDSixzO0IavOHtUHYhyeTP0OXwXqJhja/1b Gzcg== 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=bWkMDLzs3Ki9YG1HVx0vgpPadJx0JEkWpTQL+objqdM=; b=QRpKErSwY4vOHYM/SK2X0hyXGQNKNHlVzg5KlexAsgVlwtdZGK9+9gePwZ2+gsHPBs o5NLZDm1teAyzu0n0wSGaaw0fqMpPPyBMEhWmlkCEtsarlaK5Iq6GgOOIzJME0jiBKZ8 h7P2AIk6Y24ORJikTf3YvGGOhjY4TM/+x8k0FdY0fWQCMT0is+iG+QZvZ713QPE1RYEo sr6yzfxOsZLpfQ+zxHBRTge3/12hFYPXOl/kiBeYh9YEko8Uf/GgzwgjBELIO8n77wmm 3qsGqnqnY34omM+BgxeLryOf+ZY8lXe7k54PaTPOOq53UM74T7cY5qXMr6TiGEbb9ka9 vVfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=ZzyAAtSm; 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 q1-v6si12273136wrg.283.2018.10.02.13.14.49; Tue, 02 Oct 2018 13:14:50 -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=ZzyAAtSm; 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 F356E68A20D; Tue, 2 Oct 2018 23:14:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EEAC268A118 for ; Tue, 2 Oct 2018 23:14:22 +0300 (EEST) Received: by mail-ed1-f53.google.com with SMTP id f38-v6so3262220edd.8 for ; Tue, 02 Oct 2018 13:14:42 -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=Cb4CBRgBkDllmpeQQm7qFRUnBrujufDMHg4byu3xndk=; b=ZzyAAtSm19gzj5LgF2OCbYBWHNYvXia2M+MForq53NkV2I3QhiBCbRJrhZyhm7m04p vdPqs2drXB+VZEICH06z6qR1cXdftjmuOCmCKLGdQ3EdHw82PyJcyQBXxcpJK1nO7AhT zp0y/vQCQ7MGJbTaPpewAU3xB5CN2EOA5v/j6EUTFtLVCNIxC7Jr27HP0r3nyF9OekTv G9QkVdQ36licBHBZi75HrWD3nX3B5K4WL27UNx0ChoPfR2XTa9drZC84cEauSVJVllpM 9qJSm+0sIPAPNB6Vz8KELTXtniMiePG/pWLmRv/B+MR3++Hn3vm3gmQZjvYU3sBaxef/ Zkmg== 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=Cb4CBRgBkDllmpeQQm7qFRUnBrujufDMHg4byu3xndk=; b=Six20+nU8hrFEG5O+1OHqOoIZ78MdwLLoxk9pg3ohX6vjA1nqGimHG2z6a2PYwW/1I KrmZv318VMHBYGQuKyTdzeaDAJrTFwCCGINH67xQmsm1hZ14qTxGlENHlZ3/uNJn/ZyG Z47ZxByHlzF4NHUs06CStpxUPah0WUnOITkKs6la39hjhd30hd78eBWXgM+FyPSSPWHL tfPw4YxhO9zzTvg5dr7U9/kzR49V1Fpt4sJDMl/NIlYZI+eRx3WUiuFtca1ztyp1XVy8 FTvjJ3syYtw9HREm/q+NvkxO3JIIbUCeeDTS3WEl2iCy0LKvisN2rAfwAwslzkAmkOwx D84Q== X-Gm-Message-State: ABuFfohNiN3kCC0LjvBMfvSI92WkVqF9wjVvZPMDckMjF1KfsCfq/jMG sI0Z2mADDGlgRSpTGvi7oEfvCk5Z X-Received: by 2002:a50:f9c7:: with SMTP id a7-v6mr25251854edq.138.1538510939527; Tue, 02 Oct 2018 13:08:59 -0700 (PDT) Received: from localhost.localdomain ([94.250.174.60]) by smtp.gmail.com with ESMTPSA id g18-v6sm857842edg.69.2018.10.02.13.08.58 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 Oct 2018 13:08:59 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Tue, 2 Oct 2018 22:08:45 +0200 Message-Id: <20181002200845.24827-2-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181002200845.24827-1-onemda@gmail.com> References: <20181002200845.24827-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/2] avfilter/af_headphone: use lavfi internal queue instead 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 --- libavfilter/af_headphone.c | 46 ++++++++------------------------------ 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/libavfilter/af_headphone.c b/libavfilter/af_headphone.c index 6b210e1436..f13f5bedcc 100644 --- a/libavfilter/af_headphone.c +++ b/libavfilter/af_headphone.c @@ -20,7 +20,6 @@ #include -#include "libavutil/audio_fifo.h" #include "libavutil/avstring.h" #include "libavutil/channel_layout.h" #include "libavutil/float_dsp.h" @@ -79,7 +78,6 @@ typedef struct HeadphoneContext { AVFloatDSPContext *fdsp; struct headphone_inputs { - AVAudioFifo *fifo; AVFrame *frame; int ir_len; int delay_l; @@ -328,20 +326,13 @@ static int headphone_fast_convolute(AVFilterContext *ctx, void *arg, int jobnr, return 0; } -static int read_ir(AVFilterLink *inlink, int input_number, AVFrame *frame) +static int check_ir(AVFilterLink *inlink, int input_number) { AVFilterContext *ctx = inlink->dst; HeadphoneContext *s = ctx->priv; - int ir_len, max_ir_len, ret; + int ir_len, max_ir_len; - ret = av_audio_fifo_write(s->in[input_number].fifo, (void **)frame->extended_data, - frame->nb_samples); - av_frame_free(&frame); - - if (ret < 0) - return ret; - - ir_len = av_audio_fifo_size(s->in[input_number].fifo); + ir_len = ff_inlink_queued_samples(inlink); max_ir_len = 65536; if (ir_len > max_ir_len) { av_log(ctx, AV_LOG_ERROR, "Too big length of IRs: %d > %d.\n", ir_len, max_ir_len); @@ -457,14 +448,6 @@ static int convert_coeffs(AVFilterContext *ctx, AVFilterLink *inlink) goto fail; } - for (i = 0; i < s->nb_inputs - 1; i++) { - s->in[i + 1].frame = ff_get_audio_buffer(ctx->inputs[i + 1], s->ir_len); - if (!s->in[i + 1].frame) { - ret = AVERROR(ENOMEM); - goto fail; - } - } - if (s->type == TIME_DOMAIN) { s->temp_src[0] = av_calloc(FFALIGN(ir_len, 16), sizeof(float)); s->temp_src[1] = av_calloc(FFALIGN(ir_len, 16), sizeof(float)); @@ -490,7 +473,9 @@ static int convert_coeffs(AVFilterContext *ctx, AVFilterLink *inlink) int delay_r = s->in[i + 1].delay_r; float *ptr; - av_audio_fifo_read(s->in[i + 1].fifo, (void **)s->in[i + 1].frame->extended_data, len); + ret = ff_inlink_consume_samples(ctx->inputs[i + 1], len, len, &s->in[i + 1].frame); + if (ret < 0) + return ret; ptr = (float *)s->in[i + 1].frame->extended_data[0]; if (s->hrir_fmt == HRIR_STEREO) { @@ -623,23 +608,17 @@ static int activate(AVFilterContext *ctx) FF_FILTER_FORWARD_STATUS_BACK_ALL(ctx->outputs[0], ctx); if (!s->eof_hrirs) { for (i = 1; i < s->nb_inputs; i++) { - AVFrame *ir = NULL; int64_t pts; int status; if (s->in[i].eof) continue; - if ((ret = ff_inlink_consume_frame(ctx->inputs[i], &ir)) > 0) { - ret = read_ir(ctx->inputs[i], i, ir); - if (ret < 0) - return ret; - } - if (ret < 0) + if ((ret = check_ir(ctx->inputs[i], i)) < 0) return ret; if (!s->in[i].eof) { - if (ff_inlink_acknowledge_status(ctx->inputs[i], &status, &pts)) { + if (ff_inlink_acknowledge_status(ctx->inputs[i], &status, &pts) > 0) { if (status == AVERROR_EOF) { s->in[i].eof = 1; } @@ -659,6 +638,7 @@ static int activate(AVFilterContext *ctx) ff_inlink_request_frame(ctx->inputs[i]); } } + return 0; } else { s->eof_hrirs = 1; @@ -803,7 +783,6 @@ static int config_output(AVFilterLink *outlink) AVFilterContext *ctx = outlink->src; HeadphoneContext *s = ctx->priv; AVFilterLink *inlink = ctx->inputs[0]; - int i; if (s->hrir_fmt == HRIR_MULTI) { AVFilterLink *hrir_link = ctx->inputs[1]; @@ -814,11 +793,6 @@ static int config_output(AVFilterLink *outlink) } } - for (i = 0; i < s->nb_inputs; i++) { - s->in[i].fifo = av_audio_fifo_alloc(ctx->inputs[i]->format, ctx->inputs[i]->channels, 1024); - if (!s->in[i].fifo) - return AVERROR(ENOMEM); - } s->gain_lfe = expf((s->gain - 3 * inlink->channels - 6 + s->lfe_gain) / 20 * M_LN10); return 0; @@ -848,8 +822,6 @@ static av_cold void uninit(AVFilterContext *ctx) av_freep(&s->fdsp); for (i = 0; i < s->nb_inputs; i++) { - av_frame_free(&s->in[i].frame); - av_audio_fifo_free(s->in[i].fifo); if (ctx->input_pads && i) av_freep(&ctx->input_pads[i].name); }