From 786dadc014fd2bb690ec254272c809c1d3f41866 Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Mon, 30 Jul 2012 00:34:01 +0200 Subject: [PATCH] cmdutils: add -layouts option. Extract of the output: | Individual channels: | NAME DESCRIPTION | FL front left | FR front right | | SDR surround direct right | | Standard channel layouts: | NAME DECOMPOSITION | mono FC | stereo FL+FR | | octagonal FL+FR+FC+BL+BR+BC+SL+SR | downmix DL+DR --- cmdutils.c | 29 +++++++++++++++++++++++++++++ cmdutils.h | 7 +++++++ cmdutils_common_opts.h | 1 + doc/avtools-common-opts.texi | 3 +++ 4 files changed, 40 insertions(+) diff --git a/cmdutils.c b/cmdutils.c index a5871c3207..619a4a81e5 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -1087,6 +1087,35 @@ int show_pix_fmts(const char *opt, const char *arg) return 0; } +int show_layouts(const char *opt, const char *arg) +{ + int i = 0; + uint64_t layout, j; + const char *name, *descr; + + printf("Individual channels:\n" + "NAME DESCRIPTION\n"); + for (i = 0; i < 63; i++) { + name = av_get_channel_name((uint64_t)1 << i); + if (!name) + continue; + descr = av_get_channel_description((uint64_t)1 << i); + printf("%-12s%s\n", name, descr); + } + printf("\nStandard channel layouts:\n" + "NAME DECOMPOSITION\n"); + for (i = 0; !av_get_standard_channel_layout(i, &layout, &name); i++) { + if (name) { + printf("%-12s", name); + for (j = 1; j; j <<= 1) + if ((layout & j)) + printf("%s%s", (layout & (j - 1)) ? "+" : "", av_get_channel_name(j)); + printf("\n"); + } + } + return 0; +} + int show_sample_fmts(const char *opt, const char *arg) { int i; diff --git a/cmdutils.h b/cmdutils.h index fc36331cb1..e3638a97fe 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -359,6 +359,13 @@ int show_protocols(const char *opt, const char *arg); */ int show_pix_fmts(const char *opt, const char *arg); +/** + * Print a listing containing all the standard channel layouts supported by + * the program. + * This option processing function does not utilize the arguments. + */ +int show_layouts(const char *opt, const char *arg); + /** * Print a listing containing all the sample formats supported by the * program. diff --git a/cmdutils_common_opts.h b/cmdutils_common_opts.h index b4892bbfe6..bfd71feb7d 100644 --- a/cmdutils_common_opts.h +++ b/cmdutils_common_opts.h @@ -12,6 +12,7 @@ { "protocols" , OPT_EXIT, {.func_arg = show_protocols}, "show available protocols" }, { "filters" , OPT_EXIT, {.func_arg = show_filters }, "show available filters" }, { "pix_fmts" , OPT_EXIT, {.func_arg = show_pix_fmts }, "show available pixel formats" }, + { "layouts" , OPT_EXIT, {.func_arg = show_layouts }, "show standard channel layouts" }, { "sample_fmts", OPT_EXIT, {.func_arg = show_sample_fmts }, "show available audio sample formats" }, { "loglevel" , HAS_ARG, {.func_arg = opt_loglevel}, "set libav* logging level", "loglevel" }, { "v", HAS_ARG, {.func_arg = opt_loglevel}, "set libav* logging level", "loglevel" }, diff --git a/doc/avtools-common-opts.texi b/doc/avtools-common-opts.texi index 805064c854..1fc12aa966 100644 --- a/doc/avtools-common-opts.texi +++ b/doc/avtools-common-opts.texi @@ -119,6 +119,9 @@ Show available pixel formats. @item -sample_fmts Show available sample formats. +@item -layouts +Show channel names and standard channel layouts. + @item -loglevel @var{loglevel} | -v @var{loglevel} Set the logging level used by the library. @var{loglevel} is a number or a string containing one of the following values: