From patchwork Mon Aug 15 20:02:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thilo Borgmann X-Patchwork-Id: 37298 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3d0d:b0:8d:a68e:8a0e with SMTP id y13csp1468135pzi; Mon, 15 Aug 2022 13:02:38 -0700 (PDT) X-Google-Smtp-Source: AA6agR7XFhGW4UoN4qO48jM7EFzvociFN1w2YE/krC2AbkJ+lEvsQiYf10YtQGn98xDSRm51RFfA X-Received: by 2002:a05:6402:28ca:b0:43b:5235:f325 with SMTP id ef10-20020a05640228ca00b0043b5235f325mr15754262edb.320.1660593757766; Mon, 15 Aug 2022 13:02:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660593757; cv=none; d=google.com; s=arc-20160816; b=LJ5+2e7B4sYTyc4roD4CkNwQLKKzFBcilyGLMXM4eBCkBGhQlJwjyijt3pIs8Q9GJo 62bZOeHocA6y65sK9dmKC8zad0Jii/SVt2yx4Fc+x7K2gM6cHjMMK/2BYjujeh5xxpzx 0P6lapLJgz1NGD1EzBNokL5rVbXDJSrAO4kcBUz4TYVlvC9lVYXMEdKuDQIx3ysr5P8C O4p151mfbCMmH5bv+0qUZjT2S3MTWGL1Or95uP+c0n2shY7DZ4PI81j5Lof3nkCQabjR TV+CynHXABpHvxyPp9UzidSg25HcpI/woPJ7riwL92WaufWXHTcv9vZIJrKRq1nlCvld JFEg== 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 :in-reply-to:from:references:to:content-language:mime-version:date :message-id:dkim-signature:delivered-to; bh=Yse6mnFHDSH3MpaBExbhyULAMUh1WiTBe9gC3UhLb1U=; b=mAXRlxQhlsIEUcRLoXEfET5ObidJmkA+WPBkNsuxcISG0XlPiq6M4jA3r5Amta+V6D 2qDG5TzPjqEKwmFQ7ka3oxzNKaX5lDWp/OiQLA+lvfMk8jHQkT2vq8d7YM17U2XRuYOh aBQEKmShKpNeW8mhljkCBNfgozTrL6dyLVnq5O3zKxYHAeZQMGLovXfGwaVshVxRRzn9 ekcmd0CpmbGIYLRfx2pJjb6+z91+9KXTsiSwQ9eWPBk4QT2NaMK2Ne12nd2HDLZL5XJE HcHba0BQMVmqXve0137CcVm2EGr2pqlfepgCyj44j1E74HrjsTyPgYdf+QEj5v/O7PGt wJAw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@mail.de header.s=mailde202009 header.b=ip5MRHGZ; 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=NONE dis=NONE) header.from=mail.de Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p1-20020a17090653c100b00730c1ae0a9dsi7267794ejo.444.2022.08.15.13.02.37; Mon, 15 Aug 2022 13:02: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=@mail.de header.s=mailde202009 header.b=ip5MRHGZ; 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=NONE dis=NONE) header.from=mail.de Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4DE3068B97E; Mon, 15 Aug 2022 23:02:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from shout01.mail.de (shout01.mail.de [62.201.172.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3AC9168B93A for ; Mon, 15 Aug 2022 23:02:21 +0300 (EEST) Received: from postfix03.mail.de (postfix03.bt.mail.de [10.0.121.127]) by shout01.mail.de (Postfix) with ESMTP id D93FCA0937 for ; Mon, 15 Aug 2022 22:02:20 +0200 (CEST) Received: from smtp02.mail.de (smtp02.bt.mail.de [10.0.121.212]) by postfix03.mail.de (Postfix) with ESMTP id BEBF1801EC for ; Mon, 15 Aug 2022 22:02:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mail.de; s=mailde202009; t=1660593740; bh=h0bSIKiR34my9WUOXGvAidRbf1ZFWp3cVwWTXK+vNIY=; h=Message-ID:Date:Subject:To:From:From:To:CC:Subject:Reply-To; b=ip5MRHGZtwqBktN/pPyuDvxaj2/2Vm9O3RIMQT8I5U8BMpu+qErniC8CkhkssWPH3 nGttZc6aCubhm/RxFugv7I11y0nm7Z9NLP4sjOVqw86Ltx91gatpeWVGKjW9f0r9OH xX7PzmZxplmSuNctqsaPj/WR70rhfZZILneRZtHzr7f8Mw1mr3/2EoJps/ii7prqyh EyHIINR+mRvkAqau35gNqvUs6mIb6FO0/cW5uvjup2JGL9bnQjmVueN1ib4a+C5CoI yWj/yi8ffbjTI4YaSVsEcdLXCVxnhGt7tn3jqFc41x0Xudmp0Xc7MMbO9xnTg1fr0s 870ipa6II78bQ== Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by smtp02.mail.de (Postfix) with ESMTPSA id 93700A04B6 for ; Mon, 15 Aug 2022 22:02:20 +0200 (CEST) Message-ID: Date: Mon, 15 Aug 2022 22:02:19 +0200 MIME-Version: 1.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: From: Thilo Borgmann In-Reply-To: X-purgate: clean X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 5699 X-purgate-ID: 154282::1660593740-0000737C-BA0F36A9/0/0 Subject: [FFmpeg-devel] [PATCH v2 4/4] ffmpeg: Allow printing of option arguments in help output 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: 6EX9Wk2n6Abc $subject -Thilo From 33abe03ac137bd1e4bf4af90731ec177d34298a8 Mon Sep 17 00:00:00 2001 From: Thilo Borgmann Date: Mon, 15 Aug 2022 21:00:18 +0200 Subject: [PATCH v2 4/4] ffmpeg: Allow printing of option arguments in help output --- fftools/cmdutils.c | 5 +++++ libavutil/opt.c | 14 +++++++++++++- libavutil/opt.h | 8 ++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c index 22ba654bb0..dae018f83a 100644 --- a/fftools/cmdutils.c +++ b/fftools/cmdutils.c @@ -172,6 +172,11 @@ void show_help_options(const OptionDef *options, const char *msg, int req_flags, av_strlcat(buf, po->argname, sizeof(buf)); } printf("-%-17s %s\n", buf, po->help); + + if (po->args) { + const AVClass *p = po->args; + av_arg_show(&p, NULL); + } } printf("\n"); } diff --git a/libavutil/opt.c b/libavutil/opt.c index a3940f47fb..89ef111690 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -1256,7 +1256,7 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, av_log(av_log_obj, AV_LOG_INFO, " %-15s ", opt->name); else av_log(av_log_obj, AV_LOG_INFO, " %s%-17s ", - (opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? " " : "-", + (opt->flags & (AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_ARGUMENT)) ? " " : "-", opt->name); switch (opt->type) { @@ -1329,6 +1329,7 @@ FF_ENABLE_DEPRECATION_WARNINGS av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); break; } + if (!(opt->flags & AV_OPT_FLAG_ARGUMENT)) { av_log(av_log_obj, AV_LOG_INFO, "%c%c%c%c%c%c%c%c%c%c%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.', (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.', @@ -1341,6 +1342,7 @@ FF_ENABLE_DEPRECATION_WARNINGS (opt->flags & AV_OPT_FLAG_BSF_PARAM) ? 'B' : '.', (opt->flags & AV_OPT_FLAG_RUNTIME_PARAM) ? 'T' : '.', (opt->flags & AV_OPT_FLAG_DEPRECATED) ? 'P' : '.'); + } if (opt->help) av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help); @@ -1456,6 +1458,16 @@ int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags) return 0; } +int av_arg_show(void *obj, void *av_log_obj) +{ + if (!obj) + return -1; + + opt_list(obj, av_log_obj, NULL, AV_OPT_FLAG_ARGUMENT, 0, -1); + + return 0; +} + void av_opt_set_defaults(void *s) { av_opt_set_defaults2(s, 0, 0); diff --git a/libavutil/opt.h b/libavutil/opt.h index 461b5d3b6b..dce3483237 100644 --- a/libavutil/opt.h +++ b/libavutil/opt.h @@ -297,6 +297,7 @@ typedef struct AVOption { #define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering #define AV_OPT_FLAG_DEPRECATED (1<<17) ///< set if option is deprecated, users should refer to AVOption.help text for more information #define AV_OPT_FLAG_CHILD_CONSTS (1<<18) ///< set if option constants can also reside in child objects +#define AV_OPT_FLAG_ARGUMENT (1<<19) ///< set if option is an argument to another option //FIXME think about enc-audio, ... style flags /** @@ -386,6 +387,13 @@ typedef struct AVOptionRanges { */ int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); +/** + * Show the obj arguments. + * + * @param av_log_obj log context to use for showing the options + */ +int av_arg_show(void *obj, void *av_log_obj); + /** * Set the values of all AVOption fields to their default values. *