From patchwork Thu May 18 17:48:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 41717 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:ba91:b0:105:feb:71f2 with SMTP id fb17csp707184pzb; Thu, 18 May 2023 10:49:37 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7Y0zVwXdyIGoRGCuc9W68SzzlEut0QPlAN7fkp6W8D4XDN9Yxo1WaNEMW5vZSm6FbQJnyF X-Received: by 2002:a17:907:318b:b0:957:17c5:8705 with SMTP id xe11-20020a170907318b00b0095717c58705mr38863158ejb.51.1684432177440; Thu, 18 May 2023 10:49:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684432177; cv=none; d=google.com; s=arc-20160816; b=t6QcAnEciQOIZB5X6UgI0k96QsaeAFmNhTbHvMAP6jT0g8PBXxEM+0aOpoN38wMawb ds/264Adbrz/97WQpqKG7EZDeqk3O5/erDN7niCRWmGZCqb81OYv8bUsGaDt8sorco5v Uf/boFEn3jiQcw184nKAtS5aga1IdIl9cePwjZ0LaEUxScrb5KttWeupHqLmt338j7Ix mHgGacrUH5Z4/iuQdbHV3GSjkcOHYzly499EsWS36GdkEJWZ3mLKIhujPvPYeNJLyeKa rhPWTfLdmrwapuTn9tCd0pMrzPH4W+VuXJ3Sf5qAD54gvd93SaXAJUFtdJ72UadHktHB YZhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:mime-version:dkim-signature:delivered-to; bh=S1d4M6HIpqjQwvilMPdk3kbXZxLCJ7X5c0gYKyFihlk=; b=QAtkyKaDPVAIlHwN81yJ27wrwg/BY0qbmEkLfhQJ5zGz2MXAlv1J/lvldyhCy6ajGg atgjDaglv6oZpfvox1r9aGvrHULhSv4mH1nnk9bgn6exuDWic+ynJcPzGpVSzofzq/3a Akdg4tXefXCMkwRVLlDyyXavzoDHJJeN2fqERyAfUzE+huyl7qr9NnLyPV0jLAVshM0H wlYjcGLBG2e4GjmwQikV7EGi59tmnrbrYgG1GmE228P5s/eUDz4inpzGbQP88K2z/BbA sOGL6Tgu5IBwG8jfumDoG+y9EEkyCBc3tX2xxmyTfNXhoCr4Ofy9ENij77Q55jpgu3pU /RVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=rNuLxfRr; 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 b13-20020a05640202cd00b00510d00bfc7bsi1482838edx.329.2023.05.18.10.49.36; Thu, 18 May 2023 10:49:37 -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=20221208 header.b=rNuLxfRr; 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 CB7C568BFC7; Thu, 18 May 2023 20:49:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-vs1-f41.google.com (mail-vs1-f41.google.com [209.85.217.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A3CF168BFC7 for ; Thu, 18 May 2023 20:49:26 +0300 (EEST) Received: by mail-vs1-f41.google.com with SMTP id ada2fe7eead31-434834245c3so730237137.0 for ; Thu, 18 May 2023 10:49:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684432165; x=1687024165; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=WyiQ4d2uqhLjkTXU8Eg0oldlboTJjSDHfhebSE9W3w0=; b=rNuLxfRrUkWjSjNADaKyj76ZarvlPW9JgBzONnF9FuA0UU/hN+eYwSPl/bV3yp/U1z Akg3Se3Uv7Y/YYv9fD/1kZU1tCMIUlBfkWQhEFcgWWyG6VRBoOo8rXmkP1Q2UdTWLL3o h9DNHzBZeCzkqKyWirsiQ66L/FLVVq1ye5RaUWAzraCceR9Wlma6PMui3db8tB0NCFV/ XEYee9fLFYplqQItK0sE36wGPmsVQ7Jrbu/CkZYiXwEtk6pZNE43VJAEuzAQAvjsVXY3 yEbeLxrCfIMmbZAn60veXjH+tlNT7rXlQmiPod1LOo0FbIHYd6Bhr0BtTCHpggVEnXEZ 2Lkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684432165; x=1687024165; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=WyiQ4d2uqhLjkTXU8Eg0oldlboTJjSDHfhebSE9W3w0=; b=LCaQJ8XqxZrRgovlc2oHp9G5o6R0gRmKR5yWWPP105vsWa8vkFipIvJ+Hijvs1Uour 4gY9thLQG+EoWdw9r0ehxbWW5PefyU1dB90Wvw3sgnvIiHuIqc42MOKZXyuU/INjO7Fy 9RtXV/0wNNVBYg8GILizKTkkdwEhcmK4AGDgbptgDnAoNY11v8Cd0KViyZR0OBTrOEw2 43aTikiY4d/vnZYSigrA9swbgEuvYZJ6c/nzh/lM5ZjRN5Id+/rgd3L/aNGfDdgBHuFc w6zV8f38PMzVTtldonyJHQx4d2vSveyCLAgUqtkDsP/reOxV65GAS3u7WZQBVAZ+vlI5 iy8g== X-Gm-Message-State: AC+VfDwt3gUVoS1qH0S15K4gfafmREwNUtqnSaNeQk3MhcM5gYtugAip 4ZcsOZOts9yCfTduRzG9r7Deoe+U4TMwdzJIdniDivai X-Received: by 2002:a05:6102:11e1:b0:434:6a1c:214 with SMTP id e1-20020a05610211e100b004346a1c0214mr403850vsg.24.1684432165215; Thu, 18 May 2023 10:49:25 -0700 (PDT) MIME-Version: 1.0 From: Paul B Mahol Date: Thu, 18 May 2023 19:48:47 +0200 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] avfilter/af_apad: switch to activate X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: O16+ngZziV9S Attached. From c06d3d9f6020fdda19641637cafa6f86c77b4b73 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Wed, 17 May 2023 09:14:56 +0200 Subject: [PATCH 21/27] avfilter/af_apad: switch to activate Signed-off-by: Paul B Mahol --- libavfilter/af_apad.c | 105 ++++++++++++++++++++++++++++-------------- 1 file changed, 71 insertions(+), 34 deletions(-) diff --git a/libavfilter/af_apad.c b/libavfilter/af_apad.c index df17c9a531..45693a2bd5 100644 --- a/libavfilter/af_apad.c +++ b/libavfilter/af_apad.c @@ -32,12 +32,14 @@ #include "libavutil/avassert.h" #include "avfilter.h" #include "audio.h" +#include "filters.h" #include "internal.h" typedef struct APadContext { const AVClass *class; int64_t next_pts; + int eof; int packet_size; int64_t pad_len, pad_len_left; int64_t whole_len, whole_len_left; @@ -87,50 +89,86 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) return ff_filter_frame(ctx->outputs[0], frame); } -static int request_frame(AVFilterLink *outlink) +static int push_frame(AVFilterLink *outlink) { AVFilterContext *ctx = outlink->src; APadContext *s = ctx->priv; - int ret; + AVFrame *outsamplesref; + int n_out; - ret = ff_request_frame(ctx->inputs[0]); + if (ctx->is_disabled) + return 0; + n_out = s->packet_size; - if (ret == AVERROR_EOF && !ctx->is_disabled) { - int n_out = s->packet_size; - AVFrame *outsamplesref; + if (s->whole_len >= 0 && s->pad_len < 0) { + s->pad_len = s->pad_len_left = s->whole_len_left; + } + if (s->pad_len >=0 || s->whole_len >= 0) { + n_out = FFMIN(n_out, s->pad_len_left); + s->pad_len_left -= n_out; + av_log(ctx, AV_LOG_DEBUG, + "padding n_out:%d pad_len_left:%"PRId64"\n", n_out, s->pad_len_left); + } - if (s->whole_len >= 0 && s->pad_len < 0) { - s->pad_len = s->pad_len_left = s->whole_len_left; - } - if (s->pad_len >=0 || s->whole_len >= 0) { - n_out = FFMIN(n_out, s->pad_len_left); - s->pad_len_left -= n_out; - av_log(ctx, AV_LOG_DEBUG, - "padding n_out:%d pad_len_left:%"PRId64"\n", n_out, s->pad_len_left); - } + if (!n_out) + return AVERROR_EOF; + + outsamplesref = ff_get_audio_buffer(outlink, n_out); + if (!outsamplesref) + return AVERROR(ENOMEM); + + av_assert0(outsamplesref->sample_rate == outlink->sample_rate); + av_assert0(outsamplesref->nb_samples == n_out); + + av_samples_set_silence(outsamplesref->extended_data, 0, + n_out, + outsamplesref->ch_layout.nb_channels, + outsamplesref->format); + + outsamplesref->pts = s->next_pts; + if (s->next_pts != AV_NOPTS_VALUE) + s->next_pts += av_rescale_q(n_out, (AVRational){1, outlink->sample_rate}, outlink->time_base); + + return ff_filter_frame(outlink, outsamplesref); +} - if (!n_out) - return AVERROR_EOF; +static int activate(AVFilterContext *ctx) +{ + AVFilterLink *inlink = ctx->inputs[0]; + AVFilterLink *outlink = ctx->outputs[0]; + APadContext *s = ctx->priv; + int64_t pts; + int status; - outsamplesref = ff_get_audio_buffer(outlink, n_out); - if (!outsamplesref) - return AVERROR(ENOMEM); + FF_FILTER_FORWARD_STATUS_BACK(outlink, inlink); - av_assert0(outsamplesref->sample_rate == outlink->sample_rate); - av_assert0(outsamplesref->nb_samples == n_out); + if (!s->eof && ff_inlink_queued_frames(inlink)) { + AVFrame *frame = NULL; + int ret; + + ret = ff_inlink_consume_frame(inlink, &frame); + if (ret < 0) + return ret; + if (ret > 0) + return filter_frame(inlink, frame); + } - av_samples_set_silence(outsamplesref->extended_data, 0, - n_out, - outsamplesref->ch_layout.nb_channels, - outsamplesref->format); + if (!s->eof && ff_inlink_acknowledge_status(inlink, &status, &pts)) + s->eof = status == AVERROR_EOF; - outsamplesref->pts = s->next_pts; - if (s->next_pts != AV_NOPTS_VALUE) - s->next_pts += av_rescale_q(n_out, (AVRational){1, outlink->sample_rate}, outlink->time_base); + if (s->eof) { + int ret = push_frame(outlink); - return ff_filter_frame(outlink, outsamplesref); + if (ret == AVERROR_EOF) { + ff_outlink_set_status(outlink, AVERROR_EOF, s->next_pts); + return 0; + } + return ret; } - return ret; + + FF_FILTER_FORWARD_WANTED(outlink, inlink); + + return FFERROR_NOT_READY; } static int config_output(AVFilterLink *outlink) @@ -153,16 +191,14 @@ static const AVFilterPad apad_inputs[] = { { .name = "default", .type = AVMEDIA_TYPE_AUDIO, - .filter_frame = filter_frame, }, }; static const AVFilterPad apad_outputs[] = { { .name = "default", - .request_frame = request_frame, - .config_props = config_output, .type = AVMEDIA_TYPE_AUDIO, + .config_props = config_output, }, }; @@ -170,6 +206,7 @@ const AVFilter ff_af_apad = { .name = "apad", .description = NULL_IF_CONFIG_SMALL("Pad audio with silence."), .init = init, + .activate = activate, .priv_size = sizeof(APadContext), FILTER_INPUTS(apad_inputs), FILTER_OUTPUTS(apad_outputs), -- 2.39.1