From patchwork Tue Sep 24 14:43:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 51797 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp422598vqy; Tue, 24 Sep 2024 07:59:21 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVKO7tSlfzr6P93R51NIKLdD0FoLL+uqaMaocWMTSbX7Zm1Vo7+ZTNwcfYEH5JAkJYBuNle3Vv/OKiTaJhaxZs6@gmail.com X-Google-Smtp-Source: AGHT+IHTZt0vI88q7jpqQfSyfg5QBv5/18J1bbyeH0SBbX4VO+JxTto2yA0iXvVft1et4hv2EKXk X-Received: by 2002:a05:6512:1250:b0:536:7a88:616b with SMTP id 2adb3069b0e04-536ac2f462cmr8405967e87.26.1727189961499; Tue, 24 Sep 2024 07:59:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727189961; cv=none; d=google.com; s=arc-20240605; b=eB1ARksbA+G07mx8AEWSM16o/CXghotwXmXAOKm2EzeeOKcA/nsoN69zj+OHimVCAS OeKYvcccX30cYpIZ5JIdc2qpsCLM9tYcYYBAEiOSROrU5wtG1iIhCF4cJliZEPKQwZl8 hSHH+rW5eIM+POrmD/xoI33Nwb7b1tUpO1CJdPUKbL6LCT6P5X2qoZDRJGaUu5SM/ktf LpLpXwHqYWVrpL6EUeXYG0GqSREaBVycbAJ6c4chIBZHj2B/sq/FBRnnYPMe8DzJLTmo sT9Ifomt4nw4vnc/Faycd0ZpyWtLeLEBgsPrI9l+jUoYN5GEKE3eLRPlwMfkAi80dP2r k36g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=rU/gUfYtHYTAp3xEqBQM9iPienpB/su/FS/1+KGi6/M=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=h79UodvDC2QMWeoE4CU7yP6uOz+P4mBUbR+nhW/dpfjUDtWiL7hIMuUE6uLz8ES8nj 39aaTA5SBuHJp8kmdV+grNCesssIhBQJkBLts0BiiBcZ159g1VxWrAQGZx+aJqg9Goon GhiyKpY6lwu4roGvIIDCS0G+P6oHrsGZvHUuMiurTZnlzf7gO84B/68A5+h4Kj4HAByy V7E7dLcKcEIhzdPThxjAnV7VcdgI0fjZYvwIreb/KwwzR0r6AdeSx8FuRsqxgsSp4dFR k2zb3D+h9u3YAoM0vf5wiaiNbeRjMIdDaQBGTi/KhVLDyVD5xZyJ2mV2WSSnODn7MdYo LxBw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=A2deRPqO; 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; dara=fail header.i=@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 2adb3069b0e04-537a863ec68si581449e87.244.2024.09.24.07.59.21; Tue, 24 Sep 2024 07:59:21 -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=20230601 header.b=A2deRPqO; 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; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8CFD768DBE9; Tue, 24 Sep 2024 17:42:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f48.google.com (mail-qv1-f48.google.com [209.85.219.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E696A68DBB0 for ; Tue, 24 Sep 2024 17:42:47 +0300 (EEST) Received: by mail-qv1-f48.google.com with SMTP id 6a1803df08f44-6c51d1df755so45536306d6.1 for ; Tue, 24 Sep 2024 07:42:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727188966; x=1727793766; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=5GPkVDFhKRKW+ihzglmg2nmgeWSjZTuKjlfCTj/cdSc=; b=A2deRPqO6BiPTw8mTqPfGXsaF1gkgoDD8TWXBekIC/LCC0+G+2PD2MFaxGC8XB4GeY /99c/4UWod8bitWmlHGEolwEwjMz0X+9fCwwAifXd9sm6Y8tcAz4EmJRJo9/LE0clBEG 3W6gveCQ/UEQELCkKufp7+XwLWVFJO9h9gFbEAgC87mU6NNz0XC0JVVx7KfiUqTD1SgZ EMBM8UJfaKycGcl7d0WghqnidfPzFifCzqQOa/uSP/ahFrppy4CKX1x5RXgrDSlx4Cll vUzpTsQ6I/VoeikCfDrdFQjUNNWTw3wXALoVwd5V3G0LkWzY+DM/G1E+Xt3/ULBAjD7d zf7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727188966; x=1727793766; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5GPkVDFhKRKW+ihzglmg2nmgeWSjZTuKjlfCTj/cdSc=; b=fr8eTqrWwVNPlPd1cgEjokc+Aqhem81FrTVyqWDc1imGV6T56PkHvldvN98yJmxvRL JFf+tvGqYk3UTjSRfiC1MCA4Ca/OFWpYUNvgRIwN4NcX0fAM/GgkPeA8HtZhnMf09P2y okB/JGbtPacDOWwPjGOy4aRb2U5W1EoRIbhFZGkUAu3u+QuRucohJlKOFrHaSXqgdkU2 9TH/b49AHIWIDmEwK2HgO40GIG1KVhRGOYp7NR61h4z/emMnUlIFqIsGK3JSZmzjH0pc CKzhWEpuoLw7nlbCwfNo2T5aywyccDVS9XaQVonq1/WfFZZl1TxN2VkVG3k8soJ3e84H lbuA== X-Gm-Message-State: AOJu0Yy3SGbI2j4ZP+cLIzBVHZxmSlwuwP6cpjlBrgw/OoSw/TjN9a5w Btl5yGUGJUIoJ0b5nGeYSkz1C8G7hwkyFpPKN/pe+TCH0F9YqeQ/uRW6WQ== X-Received: by 2002:a05:6214:3117:b0:6c4:c95a:6782 with SMTP id 6a1803df08f44-6c7bd5e0bd3mr176819546d6.51.1727188965736; Tue, 24 Sep 2024 07:42:45 -0700 (PDT) Received: from localhost.localdomain ([181.92.233.116]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6cb0f4c1b4fsm7152716d6.43.2024.09.24.07.42.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Sep 2024 07:42:45 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 11:43:07 -0300 Message-ID: <20240924144308.1196-2-jamrial@gmail.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240924144308.1196-1-jamrial@gmail.com> References: <20240924144308.1196-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] fftools/ffmpeg_demux: factorize the bitstream filtering loop 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: Ua9SwjiHd/Qk Will be needed by the following patch. Signed-off-by: James Almer --- fftools/ffmpeg_demux.c | 74 ++++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 13aef15eab..108a4a94bf 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -537,6 +537,47 @@ static int do_send(Demuxer *d, DemuxStream *ds, AVPacket *pkt, unsigned flags, return 0; } +static int demux_filter(Demuxer *d, DemuxThreadContext *dt, DemuxStream *ds, + AVBSFContext *bsf, AVPacket *pkt, void *logctx) +{ + int ret; + + if (pkt) + av_packet_rescale_ts(pkt, pkt->time_base, bsf->time_base_in); + + ret = av_bsf_send_packet(bsf, pkt); + if (ret < 0) { + if (pkt) + av_packet_unref(pkt); + av_log(logctx, AV_LOG_ERROR, "Error submitting a packet for filtering: %s\n", + av_err2str(ret)); + return ret; + } + + while (1) { + ret = av_bsf_receive_packet(bsf, dt->pkt_bsf); + if (ret == AVERROR(EAGAIN)) + return 0; + else if (ret < 0) { + if (ret != AVERROR_EOF) + av_log(logctx, AV_LOG_ERROR, + "Error applying bitstream filters to a packet: %s\n", + av_err2str(ret)); + break; + } + + dt->pkt_bsf->time_base = bsf->time_base_out; + + ret = do_send(d, ds, dt->pkt_bsf, 0, "filtered"); + if (ret < 0) { + av_packet_unref(dt->pkt_bsf); + break; + } + } + + return ret; +} + static int demux_send(Demuxer *d, DemuxThreadContext *dt, DemuxStream *ds, AVPacket *pkt, unsigned flags) { @@ -565,38 +606,9 @@ static int demux_send(Demuxer *d, DemuxThreadContext *dt, DemuxStream *ds, } if (ds->bsf) { - if (pkt) - av_packet_rescale_ts(pkt, pkt->time_base, ds->bsf->time_base_in); - - ret = av_bsf_send_packet(ds->bsf, pkt); - if (ret < 0) { - if (pkt) - av_packet_unref(pkt); - av_log(ds, AV_LOG_ERROR, "Error submitting a packet for filtering: %s\n", - av_err2str(ret)); + ret = demux_filter(d, dt, ds, ds->bsf, pkt, ds); + if (ret < 0) return ret; - } - - while (1) { - ret = av_bsf_receive_packet(ds->bsf, dt->pkt_bsf); - if (ret == AVERROR(EAGAIN)) - return 0; - else if (ret < 0) { - if (ret != AVERROR_EOF) - av_log(ds, AV_LOG_ERROR, - "Error applying bitstream filters to a packet: %s\n", - av_err2str(ret)); - return ret; - } - - dt->pkt_bsf->time_base = ds->bsf->time_base_out; - - ret = do_send(d, ds, dt->pkt_bsf, 0, "filtered"); - if (ret < 0) { - av_packet_unref(dt->pkt_bsf); - return ret; - } - } } else { ret = do_send(d, ds, pkt, flags, "demuxed"); if (ret < 0)