From patchwork Wed Oct 3 11:03:46 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: 10605 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:ab0:73d2:0:0:0:0:0 with SMTP id m18csp4047441uaq; Wed, 3 Oct 2018 04:04:23 -0700 (PDT) X-Google-Smtp-Source: ACcGV62ezaPZDMprEiHLKOOVj+7JoCT4vHwajZPixR7wSDok/O36djNBOxE4oZdh1AwRVOtJR0CG X-Received: by 2002:a1c:a55:: with SMTP id 82-v6mr1141480wmk.54.1538564663648; Wed, 03 Oct 2018 04:04:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538564663; cv=none; d=google.com; s=arc-20160816; b=MbW+7b7aNYxTMdVtmclnbkPZPdwy2V1SH0neHZzW60YAn3fOy8riHjj2s2+cyQwFdI x+vbHJdcSxHufAGxHCtY+Tu8zh6YLnP/e6cKd+kDBzmTQUtLg/N8InkEFLW6khj3y4E9 XIQ47fJpMKSbhr5wMaeQV9G1XV3oWYiiw91st1WCcNuOzqyieUC0GAZcqNMaZSrqqUhM gzSbcQP2Z9N3dSB/v0U9keoPBL7iVvXRC7fjUln3dB4pJ703OjysUMtK49gXzTedCpSf ZX2iWLGaRESMHQrWD3GGBiK6fLKjlB3tBH3M7EbUWdPJ0GHx38UQlEKhxf2LFwj/azTp rUmw== 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=QewkkoHp3JfWF6gN0R6WZTFZvucBmFo17X/tpuwswF0=; b=mwFjIRJ0Ua+aUc/ZcFV2PlswXe/8klNcC11aOm0FocY4j6Vy12OR9alny6v+xko8dt ar+k7ohm5gqX9ryQAu/mdgRbDZETbcWnTe5uWYdIrLvIhG4XZDLvKcMehR5IAg49fK3F MlFmxKwNJi32w63c7sQbaa99eARM+qiWgQI37k2PXL8BaW8e9sQQPnezB1V686ZY940C jHASBiF2Shr1uShBa7onxUxIGV9bZw2fl+waeAAGvqfGDj4T0uq9cKyFdB8EwbSOQO9q fGsXTjHN6DTLbvXOIYKEhdgZRii5mNuiTfE4sPcYBYt9u6zIXPXNQDlmBqAFr7IZ/gUK VdDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Bkxlklpn; 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 d20-v6si851885wra.385.2018.10.03.04.04.23; Wed, 03 Oct 2018 04:04:23 -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=Bkxlklpn; 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 12B4868A281; Wed, 3 Oct 2018 14:03:47 +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 D02B968A3D1 for ; Wed, 3 Oct 2018 14:03:38 +0300 (EEST) Received: by mail-ed1-f42.google.com with SMTP id z21-v6so502486edb.11 for ; Wed, 03 Oct 2018 04:03:58 -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=o4HCrYrmYFwlrjm3RPLiRcchbSfEx0Axf4bQRkW2FlQ=; b=Bkxlklpn/jGnFQBi5pEP7EbRjfPBSK0hGU5V3To12V/KnXspG09P10DbAM75rFq9K8 mw9cbQIlyjnQoFh53Z2AEg/tMIr4GCGDPACCppTOxer3k3i/fZ/Zxlo+iQAA0muThQal JBzJuhD9LLO5Nx8yczLJPlE6piuVZaEDwpb+vTtHR5/KUj2wLpsCMyF+StWrCtbyWpU/ ry9/Of4soQU38m5xPUvsEdl2wY/WGXBXBTrJiI1KcEIwiYDMbKlyBQsMfcSoyFT7Xs9H 5dagiTT1Ax3ZglEgI8mJErmIdaEhW6CyAVTCMLk8NxSA0PURUzpl6XuKvB0tf11s7/8a grYQ== 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=o4HCrYrmYFwlrjm3RPLiRcchbSfEx0Axf4bQRkW2FlQ=; b=h1aWNMyPuczibaQgovc9b/Zp+m4ULfR+Kq5cNn3Lt9OcPh5k6nmp8ddbhmpl3UAnBU +25jtU0+iwRJWBc7nLWwUuI1iKEIoLIQ1VxxXs0cd43Ddz7sxMU3b5lzMwdj1AJ42nRu nb2SU1wthujOBH04J0lPu+URpOHnL8h4IPgmiu3BUwInKWiWmwOiXWDMHEsY6RyeMAum CqKxMLW3Mck9IE8PvRZml6m5mgH7Lge1NOrFK3QQb+L0gJ5zxSWNQId04cBXYIgF2o4k KBXy1edlNnaWw3IHWvT1S8cKRCOTZGsKM9+ar8lBeo+X3KrdfksgbDJusCswY7cwIDzH sMrg== X-Gm-Message-State: ABuFfohJ9ECEdLuLrCgdp5KfULQkoImfKkrO/hlnqopc+Dvpk1lEBgk4 7dCIVzLZY747f5tNpLyYPiyjvOpA X-Received: by 2002:aa7:d694:: with SMTP id d20-v6mr1714104edr.209.1538564637753; Wed, 03 Oct 2018 04:03:57 -0700 (PDT) Received: from localhost.localdomain ([94.250.174.60]) by smtp.gmail.com with ESMTPSA id k42-v6sm401263ede.94.2018.10.03.04.03.56 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Oct 2018 04:03:57 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Wed, 3 Oct 2018 13:03:46 +0200 Message-Id: <20181003110347.22904-3-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181003110347.22904-1-onemda@gmail.com> References: <20181003110347.22904-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH 3/4] 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 | 56 ++++++++------------------------------ 1 file changed, 12 insertions(+), 44 deletions(-) diff --git a/libavfilter/af_headphone.c b/libavfilter/af_headphone.c index 6b210e1436..760b97b733 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) { @@ -577,6 +562,8 @@ static int convert_coeffs(AVFilterContext *ctx, AVFilterLink *inlink) } } } + + av_frame_free(&s->in[i + 1].frame); } if (s->type == TIME_DOMAIN) { @@ -623,27 +610,15 @@ 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 (status == AVERROR_EOF) { - s->in[i].eof = 1; - } - } + if (ff_outlink_get_status(ctx->inputs[i]) == AVERROR_EOF) + s->in[i].eof = 1; } } @@ -659,6 +634,7 @@ static int activate(AVFilterContext *ctx) ff_inlink_request_frame(ctx->inputs[i]); } } + return 0; } else { s->eof_hrirs = 1; @@ -803,7 +779,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 +789,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 +818,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); }