From patchwork Mon Oct 7 10:50:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 52086 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:938f:0:b0:48e:c0f8:d0de with SMTP id z15csp1831850vqg; Mon, 7 Oct 2024 03:50:49 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVmwggRCcWd9IfB1fGX6xYwuTIrtoiLPttZ8AtD3x/jTxqEgwJ5WpDNVosGfYuyFFUKzZiJQeMn89nrctnLQ9Ei@gmail.com X-Google-Smtp-Source: AGHT+IGiJuzG9w5jc+MSdC2wlIXQWvA9xBExjhaUY6W0IbN+tZ9/peikJ29RcigmMzHn/mPwPg6g X-Received: by 2002:a17:907:9693:b0:a99:3d93:c8bc with SMTP id a640c23a62f3a-a993d93cc22mr867470566b.13.1728298249450; Mon, 07 Oct 2024 03:50:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1728298249; cv=none; d=google.com; s=arc-20240605; b=FH4FHuH8ckd1fv+qdZ9NkFoq/KvBtBgssINZmcK3YynzfXL97PXQ5wribg3uva8YB6 6dDinlXyaGZGdodEATYxF10Z7Kr8SYa+wVCboaPt75RtJugj0MXdEDtjYat4pWUO9sRr DxjaJlcfzsq/NzydGfy3bskbK8DAfNByiv0ymgr7GXq8mCRgW1tenXLAVenNY9PNRtEu LkYhYMeccp3syeWfIsmAIWViNdRRrZjdX4pDVVb/yJc3AcHonsHMqN/7cPTdU9JoYpeo /Eqb1H34zs0P7hMaHIacM2NNVoMJ4vtArdB6FHcYsckrSfTxYc6yAjwam3x6Xc5nThnr Cztg== 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=SSfLouTB7nN6uBD0G5b1cT8wxIe1m77kTfigqMUxPF4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=b5yrqi1Mz657dt0kXfUOIGYosG7KJvSyYrH5aV3g85vSeFJ2ECsi53QCqruWFB9GLu WoO+Q3KF4dQ6qk6VQy6QmiE+n+IPLPRFmY7JGoonk3UwP23gSxVvMFJCQF9V+b77yk1O qQzgfMFFndcmeRGaDc5T8QtolGSNcOyxO+yV74yXIfo33SBrE+m4fpR+MBt0HuPhvDGv D/LCLk0agSxOqXcchum1cWo4nRs//V4xb+f34daPAFh51S2c9JxhlH12hZxM8j9W54x9 IzSqFMMUL/u2pjogV/2hFzrjST/DE5TD1bTP4hbJnpfBLIA+HhXsl2vnepi4dIANi0vY nGrA==; 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=nGmEn1+x; 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 a640c23a62f3a-a99420e6fd8si309685266b.342.2024.10.07.03.50.49; Mon, 07 Oct 2024 03:50:49 -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=nGmEn1+x; 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 7EF9068DAC8; Mon, 7 Oct 2024 13:50:45 +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 D0D1A68D449 for ; Mon, 7 Oct 2024 13:50:38 +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=nGmEn1+x; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id DA55D4E18 for ; Mon, 7 Oct 2024 12:50:37 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id jlOL2Ht0Sg66 for ; Mon, 7 Oct 2024 12:50:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1728298236; bh=bdaM/5ENpK4XVpbLA3aolWfCTHCHW3HQidk8UWOBXkw=; h=From:To:Subject:Date:In-Reply-To:References:From; b=nGmEn1+xl5Kg7XjulixDHdDDVJ0fCyBZlMgQK9oyzz5yzHVZfOOqKXi+kWJiz6reQ 8xei3oSK5uj4RPjcHYNI1Sg0fC7kfelvGVD0cHI7DVCxm2D4VYjV+PtXWMVPc1ciE8 gRTd+IUhEWuez2mwTeDktcWWS1l5WOAjN1MOqU+PRBWODnBnT8Y878Ra2oespA7RSx Cm5aNxIhAJnM8R/dNji+O5B6TaDhdLJDSlwVvZVsgKuyYjXz9seur0k/pIViXRCBHg EOsOhbiAZVEHJfHv/9A7hCKcjGVSOwnY7eOICHUHZWpwHn6uio8lOwHcSS+kyT0h/8 iPEfNknR8DODA== 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 CA4C14DF6 for ; Mon, 7 Oct 2024 12:50:36 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 759CE3A0F41 for ; Mon, 07 Oct 2024 12:50:30 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 7 Oct 2024 12:50:14 +0200 Message-ID: <20241007105016.1597-3-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241007105016.1597-1-anton@khirnov.net> References: <20241007105016.1597-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] fftools/ffmpeg_opt: add a struct to be passed as opaque to global-option handlers 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: LqKn1b8aMhxv Will be useful in following commits. --- fftools/ffmpeg_opt.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index f639a1cf0a..052e68e943 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -86,6 +86,12 @@ int ignore_unknown_streams = 0; int copy_unknown_streams = 0; int recast_media = 0; +// this struct is passed as the optctx argument +// to func_arg() for global options +typedef struct GlobalOptionsContext { + Scheduler *sch; +} GlobalOptionsContext; + static void uninit_options(OptionsContext *o) { /* all OPT_SPEC and OPT_TYPE_STRING can be freed in generic way */ @@ -611,8 +617,8 @@ static int opt_attach(void *optctx, const char *opt, const char *arg) static int opt_sdp_file(void *optctx, const char *opt, const char *arg) { - Scheduler *sch = optctx; - return sch_sdp_filename(sch, arg); + GlobalOptionsContext *go = optctx; + return sch_sdp_filename(go->sch, arg); } #if CONFIG_VAAPI @@ -1150,18 +1156,18 @@ static int opt_audio_qscale(void *optctx, const char *opt, const char *arg) static int opt_filter_complex(void *optctx, const char *opt, const char *arg) { - Scheduler *sch = optctx; + GlobalOptionsContext *go = optctx; char *graph_desc = av_strdup(arg); if (!graph_desc) return AVERROR(ENOMEM); - return fg_create(NULL, graph_desc, sch); + return fg_create(NULL, graph_desc, go->sch); } #if FFMPEG_OPT_FILTER_SCRIPT static int opt_filter_complex_script(void *optctx, const char *opt, const char *arg) { - Scheduler *sch = optctx; + GlobalOptionsContext *go = optctx; char *graph_desc = file_read(arg); if (!graph_desc) return AVERROR(EINVAL); @@ -1169,7 +1175,7 @@ static int opt_filter_complex_script(void *optctx, const char *opt, const char * av_log(NULL, AV_LOG_WARNING, "-%s is deprecated, use -/filter_complex %s instead\n", opt, arg); - return fg_create(NULL, graph_desc, sch); + return fg_create(NULL, graph_desc, go->sch); } #endif @@ -1346,6 +1352,7 @@ static int open_files(OptionGroupList *l, const char *inout, Scheduler *sch, int ffmpeg_parse_options(int argc, char **argv, Scheduler *sch) { + GlobalOptionsContext go = { .sch = sch }; OptionParseContext octx; const char *errmsg = NULL; int ret; @@ -1361,7 +1368,7 @@ int ffmpeg_parse_options(int argc, char **argv, Scheduler *sch) } /* apply global options */ - ret = parse_optgroup(sch, &octx.global_opts, options); + ret = parse_optgroup(&go, &octx.global_opts, options); if (ret < 0) { errmsg = "parsing global options"; goto fail;