From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id C42B54F624 for ; Thu, 19 Jun 2025 15:03:14 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 6779368D942; Thu, 19 Jun 2025 18:03:10 +0300 (EEST) References: In-Reply-To: Date: Thu, 19 Jun 2025 17:02:50 +0200 To: FFmpeg development discussions and patches MIME-Version: 1.0 Message-ID: List-Id: FFmpeg development discussions and patches List-Post: From: Maryla Ustarroz via ffmpeg-devel Precedence: list Cc: Maryla Ustarroz X-Mailman-Version: 2.1.29 X-BeenThere: ffmpeg-devel@ffmpeg.org List-Subscribe: , List-Unsubscribe: , List-Archive: Reply-To: FFmpeg development discussions and patches List-Help: Subject: Re: [FFmpeg-devel] [PATCH] ffprobe: add -codec: option Content-Type: multipart/mixed; boundary="===============0532307530365438795==" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --===============0532307530365438795== Content-Type: message/rfc822 Content-Disposition: inline Return-Path: X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.46]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 04FC268D646 for ; Thu, 19 Jun 2025 18:03:03 +0300 (EEST) Received: by mail-qv1-f46.google.com with SMTP id 6a1803df08f44-6faf66905baso12467326d6.2 for ; Thu, 19 Jun 2025 08:03:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1750345382; x=1750950182; darn=ffmpeg.org; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Jc3KIsgNgli7sDoibfyV2kBhEMlRan05slrBlGMJ5qY=; b=Ppwq4KJGbv0KWvBnEEq22jRmk7yYICwqMgeDvAGTUSpbGAvsLPNCh/iuWDfWwFCNtC QwqrDI9LhywFR95hTs8mivQf1vP+ni9tEs9I6X/OYaXMYDD9MUuxdGpC0chorvrmPReC P0mXo2y2551chaKR8gUz4LAXG215kaeVgLWbQ6lZHQQFzkyiN0tIcALKzV8Pz4JvVyV9 XNbxXd4rmTY2lMXjMKNdakqK91OGEYZqRIqaDtn0LbMXI8j/eQICDdgwmLkqAwFtKTST knVA7xpiTWCHtBR9pwaVpOkYr6o6Gjr5PCjjr7D3Bi45YrcZPaxiAjrJDCo12kMnYRSi 8wyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750345382; x=1750950182; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Jc3KIsgNgli7sDoibfyV2kBhEMlRan05slrBlGMJ5qY=; b=UNqAFQkgjK4KWOZF9cPKypUjCWdLH9uqIuvKRRU2kAgKqdJvOhlzm/2vv8iJL9m8uM +HmU2cvdVBOn33hiORnpXiJd8ui3UQV+1kg8rNcAYRY97CkOJqrgTll0uFdTDTp9253w P/aWsuaEGD4dUzAB5AvwKzJujQJw1bBI6rUg2HLVqG6sxghdOZlpM/aZoNK55LdoI73p y6hfKaRFFFCEtYhjHHZAy2RVJtZz6gfOojTJcJiXlcOqv8eoq6eUa4K/Ujhq9nC+Xpzt N5I3Vc6BLilIVMcV1lMKgD5iv1wfjLnWs7Z2ot+JLyd1Duj6iRm11yvLl2CtPBGlqwYZ oEPw== X-Gm-Message-State: AOJu0YzSIdNASibeORTYixCjgmzeKPjVk4s8D26rBVhWRQS/A4bVjnID cdsEmpYq8ITG5LTZuqEXZCeeT3tFamh+I1IFNXcM0kpAj6vsGvL98PotzYuNM46mSTc+oZ8Rhnd HX9en+t0JRpSeYLGBVNqWoPdfU9W2KQkGMss4p4HJCO/9hgv+qaBkAJKGEUc= X-Gm-Gg: ASbGncsik8MEWfGvYZjExXlVbxuVTRfKSdQoIs2WVYPHyfGa7++OkLD6zJmw2X0aC+5 nXFX1eaRlbpxIczM2uB+kylKGh2PxYleDluZPUoe0qK71k0Dq0nS8dCFsrHxA6nwKqTBKWFl40A kfyKn7fGPz8dOioytzyEJy+VdH5sM8d+g9N9vZNg/MG/a4FyBcaq2aRxn5sdggA6dlPn0JQA8tM DLePT14lb9P X-Google-Smtp-Source: AGHT+IEYw5r6PjHshd37p06k24u5gLpZtoGSgeFmOgKK66coQMYNR6YVZRWgHJqzb5XGLzkSYp8oZZZEx3MTeEd2Qd0= X-Received: by 2002:a05:6214:5703:b0:6fa:c81a:6207 with SMTP id 6a1803df08f44-6fb47627913mr323914926d6.9.1750345381733; Thu, 19 Jun 2025 08:03:01 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Maryla Ustarroz Date: Thu, 19 Jun 2025 17:02:50 +0200 X-Gm-Features: Ac12FXx8V7oo6xGFmLtRgGG5eMaJ-POVsFN0ljYg79Bio6R3VeW7eySyjbNewsc Message-ID: Subject: Re: [FFmpeg-devel] [PATCH] ffprobe: add -codec: option To: FFmpeg development discussions and patches Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Friendly ping. This feature came up during the review of "[PATCH 2/2] avcodec/libaom: Add tests for HDR10+ metadata support" https://ffmpeg.org/pipermail/ffmpeg-devel/2025-June/344683.html On Tue, Jun 10, 2025 at 5:02=E2=80=AFPM Maryla Ustarroz-Calonge via ffmpeg-devel wrote: > > > > > ---------- Forwarded message ---------- > From: Maryla Ustarroz-Calonge > To: ffmpeg-devel@ffmpeg.org > Cc: > Bcc: > Date: Tue, 10 Jun 2025 17:02:05 +0200 > Subject: [PATCH] ffprobe: add -codec: option > opt_codec() is mostly copied over from ffplay.c > > Signed-off-by: Maryla Ustarroz-Calonge > --- > Changelog | 2 +- > fftools/ffprobe.c | 114 +++++++++++++++++++++++++++++++++++++++++----- > 2 files changed, 103 insertions(+), 13 deletions(-) > > diff --git a/Changelog b/Changelog > index 4217449438..ae73611222 100644 > --- a/Changelog > +++ b/Changelog > @@ -18,7 +18,7 @@ version : > - APV encoding support through a libopenapv wrapper > - VVC decoder supports all content of SCC (Screen Content Coding): > IBC (Inter Block Copy), Palette Mode and ACT (Adaptive Color Transform > - > +- ffprobe -codec option > > version 7.1: > - Raw Captions with Time (RCWT) closed caption demuxer > diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c > index 1346ed33c5..0124ce114c 100644 > --- a/fftools/ffprobe.c > +++ b/fftools/ffprobe.c > @@ -36,6 +36,7 @@ > #include "libavutil/ambient_viewing_environment.h" > #include "libavutil/avassert.h" > #include "libavutil/avstring.h" > +#include "libavutil/avutil.h" > #include "libavutil/bprint.h" > #include "libavutil/channel_layout.h" > #include "libavutil/display.h" > @@ -130,6 +131,11 @@ static int use_byte_value_binary_prefix =3D 0; > static int use_value_sexagesimal_format =3D 0; > static int show_private_data =3D 1; > > +static const char *audio_codec_name =3D NULL; > +static const char *data_codec_name =3D NULL; > +static const char *subtitle_codec_name =3D NULL; > +static const char *video_codec_name =3D NULL; > + > #define SHOW_OPTIONAL_FIELDS_AUTO -1 > #define SHOW_OPTIONAL_FIELDS_NEVER 0 > #define SHOW_OPTIONAL_FIELDS_ALWAYS 1 > @@ -2284,6 +2290,64 @@ static void show_error(AVTextFormatContext *tfc, i= nt err) > avtext_print_section_footer(tfc); > } > > +static int get_decoder_by_name(const char *codec_name, const AVCodec **c= odec) > +{ > + if (codec_name =3D=3D NULL) > + return 0; > + > + *codec =3D avcodec_find_decoder_by_name(codec_name); > + if (*codec =3D=3D NULL) { > + av_log(NULL, AV_LOG_ERROR, > + "No codec could be found with name '%s'\n", codec_name); > + return AVERROR(EINVAL);; > + } > + return 0; > +} > + > +static int set_decoders(AVFormatContext *fmt_ctx) > +{ > + int ret; > + ret =3D get_decoder_by_name(audio_codec_name, &fmt_ctx->audio_codec)= ; > + if (ret < 0) return ret; > + ret =3D get_decoder_by_name(data_codec_name, &fmt_ctx->data_codec); > + if (ret < 0) return ret; > + ret =3D get_decoder_by_name(subtitle_codec_name, &fmt_ctx->subtitle_= codec); > + if (ret < 0) return ret; > + ret =3D get_decoder_by_name(video_codec_name, &fmt_ctx->video_codec)= ; > + if (ret < 0) return ret; > + return 0; > +} > + > +static const AVCodec *get_decoder_for_stream(AVFormatContext *fmt_ctx, A= VStream *stream) > +{ > + const AVCodec *codec =3D NULL; > + switch (stream->codecpar->codec_type) { > + case AVMEDIA_TYPE_VIDEO: codec =3D fmt_ctx->video_codec; brea= k; > + case AVMEDIA_TYPE_AUDIO: codec =3D fmt_ctx->audio_codec; brea= k; > + case AVMEDIA_TYPE_SUBTITLE: codec =3D fmt_ctx->subtitle_codec; b= reak; > + case AVMEDIA_TYPE_DATA: codec =3D fmt_ctx->data_codec; break= ; > + } > + > + if (codec !=3D NULL) > + return codec; > + > + if (stream->codecpar->codec_id =3D=3D AV_CODEC_ID_PROBE) { > + av_log(NULL, AV_LOG_WARNING, > + "Failed to probe codec for input stream %d\n", stream->in= dex); > + return NULL; > + } > + > + codec =3D avcodec_find_decoder(stream->codecpar->codec_id); > + if (codec =3D=3D NULL) { > + av_log(NULL, AV_LOG_WARNING, > + "Unsupported codec with id %d for input stream %d\n", > + stream->codecpar->codec_id, stream->index); > + return NULL; > + } > + > + return codec; > +} > + > static int open_input_file(InputFile *ifile, const char *filename, > const char *print_filename) > { > @@ -2296,6 +2360,9 @@ static int open_input_file(InputFile *ifile, const = char *filename, > if (!fmt_ctx) > return AVERROR(ENOMEM); > > + err =3D set_decoders(fmt_ctx); > + if (err < 0) > + return err; > if (!av_dict_get(format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_C= ASE)) { > av_dict_set(&format_opts, "scan_all_pmts", "1", AV_DICT_DONT_OVE= RWRITE); > scan_all_pmts_set =3D 1; > @@ -2350,20 +2417,10 @@ static int open_input_file(InputFile *ifile, cons= t char *filename, > > ist->st =3D stream; > > - if (stream->codecpar->codec_id =3D=3D AV_CODEC_ID_PROBE) { > - av_log(NULL, AV_LOG_WARNING, > - "Failed to probe codec for input stream %d\n", > - stream->index); > + codec =3D get_decoder_for_stream(fmt_ctx, stream); > + if (!codec) > continue; > - } > > - codec =3D avcodec_find_decoder(stream->codecpar->codec_id); > - if (!codec) { > - av_log(NULL, AV_LOG_WARNING, > - "Unsupported codec with id %d for input stream %d\n"= , > - stream->codecpar->codec_id, stream->index); > - continue; > - } > { > AVDictionary *opts; > > @@ -2510,6 +2567,10 @@ end: > av_freep(&selected_streams); > av_freep(&streams_with_closed_captions); > av_freep(&streams_with_film_grain); > + av_freep(&audio_codec_name); > + av_freep(&data_codec_name); > + av_freep(&subtitle_codec_name); > + av_freep(&video_codec_name); > > return ret; > } > @@ -2964,6 +3025,34 @@ static int opt_sections(void *optctx, const char *= opt, const char *arg) > return 0; > } > > +static int opt_codec(void *optctx, const char *opt, const char *arg) > +{ > + const char *spec =3D strchr(opt, ':'); > + const char **name; > + if (!spec) { > + av_log(NULL, AV_LOG_ERROR, > + "No media specifier was specified for '%s' in option '%s'.= Use -%s:\n", > + arg, opt, opt); > + return AVERROR(EINVAL); > + } > + spec++; > + > + switch (spec[0]) { > + case 'a' : name =3D &audio_codec_name; break; > + case 'd' : name =3D &data_codec_name; break; > + case 's' : name =3D &subtitle_codec_name; break; > + case 'v' : name =3D &video_codec_name; break; > + default: > + av_log(NULL, AV_LOG_ERROR, > + "Invalid media specifier '%s' in option '%s'. Must be one = of: v, a, s, d\n", spec, opt); > + return AVERROR(EINVAL); > + } > + > + av_freep(name); > + *name =3D av_strdup(arg); > + return *name ? 0 : AVERROR(ENOMEM); > +} > + > static int opt_show_versions(void *optctx, const char *opt, const char *= arg) > { > mark_section_show_entries(SECTION_ID_PROGRAM_VERSION, 1, NULL); > @@ -3039,6 +3128,7 @@ static const OptionDef real_options[] =3D { > { "print_filename", OPT_TYPE_FUNC, OPT_FUNC_ARG, {.func_arg = =3D opt_print_filename}, "override the printed input filename", "print_file= "}, > { "find_stream_info", OPT_TYPE_BOOL, OPT_INPUT | OPT_EXPERT, { = &find_stream_info }, > "read and decode the streams to fill missing information with he= uristics" }, > + { "codec", OPT_TYPE_FUNC, OPT_FUNC_ARG, { .func_arg = =3D opt_codec}, "force decoder", "decoder_name" }, > { NULL, }, > }; > > -- > 2.50.0.rc1.591.g9c95f17f64-goog > > > > > ---------- Forwarded message ---------- > From: Maryla Ustarroz-Calonge via ffmpeg-devel > To: ffmpeg-devel@ffmpeg.org > Cc: Maryla Ustarroz-Calonge > Bcc: > Date: Tue, 10 Jun 2025 17:02:05 +0200 > Subject: [FFmpeg-devel] [PATCH] ffprobe: add -codec: option > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --===============0532307530365438795== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --===============0532307530365438795==--