From 1db161ec93baf9451d061b1a420dbb4fa82bd19d Mon Sep 17 00:00:00 2001 From: mrbesen Date: Mon, 16 Mar 2020 13:43:22 +0100 Subject: [PATCH] print (en/de)coders --- fftools/cmdutils.c | 18 +++++++++++++++++- fftools/cmdutils.h | 3 +++ fftools/ffmpeg_opt.c | 13 ++++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c index e5b89a443b..68bbb76eb4 100644 --- a/fftools/cmdutils.c +++ b/fftools/cmdutils.c @@ -1608,7 +1608,7 @@ int show_codecs(void *optctx, const char *opt, const char *arg) return 0; } -static void print_codecs(int encoder) +void print_codecs(int encoder) { const AVCodecDescriptor **codecs; unsigned i, nb_codecs = get_codecs_sorted(&codecs); @@ -1646,6 +1646,22 @@ static void print_codecs(int encoder) av_free(codecs); } +void print_codecs_short(int encoder) { + const AVCodecDescriptor **codecs; + unsigned i, nb_codecs = get_codecs_sorted(&codecs); + + for (i = 0; i < nb_codecs; i++) { + const AVCodecDescriptor *desc = codecs[i]; + const AVCodec *codec = NULL; + + while ((codec = next_codec_for_id(desc->id, codec, encoder))) { + printf(" %s", codec->name); + } + } + printf("\n"); + av_free(codecs); +} + int show_decoders(void *optctx, const char *opt, const char *arg) { print_codecs(0); diff --git a/fftools/cmdutils.h b/fftools/cmdutils.h index 1917510589..faa14c9b64 100644 --- a/fftools/cmdutils.h +++ b/fftools/cmdutils.h @@ -51,6 +51,9 @@ extern AVDictionary *swr_opts; extern AVDictionary *format_opts, *codec_opts, *resample_opts; extern int hide_banner; +void print_codecs(int encoder); +void print_codecs_short(int encoder); + /** * Register a program-specific cleanup routine. */ diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index aa6ede5e88..797f8df0a7 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -683,7 +683,18 @@ static AVCodec *find_codec_or_die(const char *name, enum AVMediaType type, int e } if (!codec) { - av_log(NULL, AV_LOG_FATAL, "Unknown %s '%s'\n", codec_string, name); + int c; + + av_log(NULL, AV_LOG_FATAL, "Unknown %s '%s'\n", codec_string, name); + + av_log(NULL, AV_LOG_INFO, "Print %ss? [y/n]", codec_string); + + c = getchar(); + if(c == 'y' || c == 'Y') { + printf("\n"); + print_codecs_short(encoder); + } + exit_program(1); } if (codec->type != type) {