From patchwork Sat Sep 28 09:53:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51904 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:d8ca:0:b0:48e:c0f8:d0de with SMTP id dy10csp897790vqb; Sat, 28 Sep 2024 03:01:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWepRJMrCUOwH+v9cEIKVRYobedZp5gtEI6aLrZAfn/sTt7JJuLAHBnd2xT9vQUIqb3TqsSAguCl7L6aveobmf+@gmail.com X-Google-Smtp-Source: AGHT+IEqhVmRCQTMeq5mK7kVw1GcX0ZzQt7olD1ip+cMu6vlfnfUnA8cnB3LuqrPG+Exanp+F1pw X-Received: by 2002:a2e:bea0:0:b0:2fa:c55b:1af1 with SMTP id 38308e7fff4ca-2fac55b2100mr740741fa.0.1727517674476; Sat, 28 Sep 2024 03:01:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727517674; cv=none; d=google.com; s=arc-20240605; b=WRnmlMPLg1g1o37/3RePwlxCZVAa0/hOWqbr4/IUYuSZswXyjzpUxZtjS8kMl2Ha+v /Dl+dsqB4Ajryhx7LOsdkKHk9Y8+vt+3wuwGk6vylNk/x/dM99AEN5aht5b59Q4ENn9K F3+ZqdPi0j2NmHGwwV1rePIL3SginiVlAQfBMGF4iWrzyQ2lqt1jSW6toMv8ODeQ426b 6+ishZnqFLX8isocLF0ni3xnFVxG3ar4AoyCCagDA8wW5hknTL7G3Y4z5/6IaGkPJJ0c 3fgRHMQjT5c095EL7tms6qKSPW3/dNYLFJAfDZhTmuUprngMEEnTCg/1VEO1+Na3Ova/ IXow== 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=zeLoTkUGBzQo9wOo5G8gSCAuvvmvdjrgK1DIGJNjpSc=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=DV8KOJmKzCK3VBIcRa0TwFNJETcrHFp2lJB1ZHlkF3QV5HdUFymuNYOJzxCu1NWuGN MO18a9ZJx4fI1/Kdx08vE6vUKUtWm/aid5rz0NW30K50BWqs1JfNzOAGyIGvQqHgXGg8 NqZG8VxPY8pKMStpZRYcrV9yPVF2nA/kYw9KXU0cL2to+++YM2usMdiNNaI1JQ4MGmEn /9DEyhuSoaMZXk715ZtzHcl7aKX4x3sw4D1RVdpEeCMnfVFoju6icpX4m3rjrG5WJNXM GpGlfo2RKYypqqAEVBAWWq5Tw2WbHwyqYlv3DAQCwowobFsrqg/oNah82wJSR3ZdbtTz qdzQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=F7VpQFuu; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2f9d466833dsi12452591fa.645.2024.09.28.03.01.13; Sat, 28 Sep 2024 03:01:14 -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=@khirnov.net header.s=mail header.b=F7VpQFuu; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 293C868DC95; Sat, 28 Sep 2024 12:54:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5EA8268DB34 for ; Sat, 28 Sep 2024 12:54:02 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=F7VpQFuu; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 3E9D04DEE for ; Sat, 28 Sep 2024 11:53:57 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id ET5yvDyVQfK1 for ; Sat, 28 Sep 2024 11:53:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727517234; bh=n/FpK33CqW+5kLvt0cD+QxMz3DZODU+DkI6a337Z8OI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=F7VpQFuuhBlIbZFF9KnNWpjSuGOKRi0jTVvp9sIzOj4aziHzJUr5jj8RKfqp8kzgx AJ+/B6xCXEEGvqRhMsikgs5UtZIQoyFz2liIf2a/XuHpj31tLwlpUr9cOzdF0CeUbc RgepepnzxHbwwwaxrxqDXc2mCyd/nJMBOTCFiE3uwJeR5Kgi6+aZ7sMpfMxHxZHrI7 9VEoaCuvH8WMJZ5HjSqy9nuvbJXa6iTXEtO5C1wlXYqhHGbEfAbfafZOkPxBGcb3yc QQ4vq1PQMtvccK+f6Ny4z9cflX0w0mGBqlIQftRShS41fgjZdGw0vBeZcITp5ZUXZ9 ZmuyitMInWK2Q== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id C8C194E02 for ; Sat, 28 Sep 2024 11:53:54 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id AF72A3A19A6 for ; Sat, 28 Sep 2024 11:53:48 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Sat, 28 Sep 2024 11:53:41 +0200 Message-ID: <20240928095341.15552-9-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240928095341.15552-1-anton@khirnov.net> References: <20240928095341.15552-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 9/9] fftools/ffmpeg_mux_init: consolidate connecting source to mux stream 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: p+fqA9QdEp5Y --- fftools/ffmpeg_mux_init.c | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index 50ce45ef1b..944176ca5d 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -899,7 +899,8 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, const OptionsContext *o, AVRational enc_tb, enum VideoSyncMethod vsync_method, int keep_pix_fmt, int autoscale, int threads_manual, - const ViewSpecifier *vs) + const ViewSpecifier *vs, + SchedulerNode *src) { OutputStream *ost = &ms->ost; AVCodecContext *enc_ctx = ost->enc->enc_ctx; @@ -1005,12 +1006,9 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, if (ret < 0) return ret; - ret = sch_connect(mux->sch, SCH_ENC(ms->sch_idx_enc), - SCH_MSTREAM(mux->sch_idx, ms->sch_idx)); - if (ret < 0) - return ret; + *src = SCH_ENC(ms->sch_idx_enc); - return ret; + return 0; } static int streamcopy_init(const OptionsContext *o, const Muxer *mux, @@ -1188,6 +1186,7 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, OutputStream *ost; const AVCodec *enc; AVStream *st; + SchedulerNode src = { .type = SCH_NODE_TYPE_NONE }; AVDictionary *encoder_opts = NULL; int ret = 0, keep_pix_fmt = 0, autoscale = 1; int threads_manual = 0; @@ -1535,12 +1534,10 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, if (ost->enc && (type == AVMEDIA_TYPE_VIDEO || type == AVMEDIA_TYPE_AUDIO)) { ret = ost_bind_filter(mux, ms, ofilter, o, enc_tb, vsync_method, - keep_pix_fmt, autoscale, threads_manual, vs); + keep_pix_fmt, autoscale, threads_manual, vs, &src); if (ret < 0) goto fail; } else if (ost->ist) { - SchedulerNode src; - ret = ist_use(ost->ist, !!ost->enc, NULL, &src); if (ret < 0) { av_log(ost, AV_LOG_ERROR, @@ -1549,24 +1546,26 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, } ms->sch_idx_src = src.idx; + // src refers to a decoder for transcoding, demux stream otherwise if (ost->enc) { ret = sch_connect(mux->sch, src, SCH_ENC(ms->sch_idx_enc)); if (ret < 0) goto fail; - - ret = sch_connect(mux->sch, SCH_ENC(ms->sch_idx_enc), - SCH_MSTREAM(mux->sch_idx, ms->sch_idx)); - if (ret < 0) - goto fail; - } else { - ret = sch_connect(mux->sch, - src, SCH_MSTREAM(ost->file->index, ms->sch_idx)); - if (ret < 0) - goto fail; + src = SCH_ENC(ms->sch_idx_enc); } } + if (src.type != SCH_NODE_TYPE_NONE) { + ret = sch_connect(mux->sch, + src, SCH_MSTREAM(mux->sch_idx, ms->sch_idx)); + if (ret < 0) + goto fail; + } else { + // only attachment streams don't have a source + av_assert0(type == AVMEDIA_TYPE_ATTACHMENT && ms->sch_idx < 0); + } + if (ost->ist && !ost->enc) { ret = streamcopy_init(o, mux, ost, &encoder_opts); if (ret < 0)