Browse Source

cmdutils: add -layouts option.

Extract of the output:

| Individual channels:
| NAME        DESCRIPTION
| FL          front left
| FR          front right
| <snip>
| SDR         surround direct right
|
| Standard channel layouts:
| NAME        DECOMPOSITION
| mono        FC
| stereo      FL+FR
| <snip>
| octagonal   FL+FR+FC+BL+BR+BC+SL+SR
| downmix     DL+DR
Nicolas George 12 years ago
parent
commit
786dadc014
4 changed files with 40 additions and 0 deletions
  1. 29 0
      cmdutils.c
  2. 7 0
      cmdutils.h
  3. 1 0
      cmdutils_common_opts.h
  4. 3 0
      doc/avtools-common-opts.texi

+ 29 - 0
cmdutils.c

@@ -1087,6 +1087,35 @@ int show_pix_fmts(const char *opt, const char *arg)
     return 0;
     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 show_sample_fmts(const char *opt, const char *arg)
 {
 {
     int i;
     int i;

+ 7 - 0
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);
 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
  * Print a listing containing all the sample formats supported by the
  * program.
  * program.

+ 1 - 0
cmdutils_common_opts.h

@@ -12,6 +12,7 @@
     { "protocols"  , OPT_EXIT, {.func_arg = show_protocols},    "show available protocols" },
     { "protocols"  , OPT_EXIT, {.func_arg = show_protocols},    "show available protocols" },
     { "filters"    , OPT_EXIT, {.func_arg = show_filters  },    "show available filters" },
     { "filters"    , OPT_EXIT, {.func_arg = show_filters  },    "show available filters" },
     { "pix_fmts"   , OPT_EXIT, {.func_arg = show_pix_fmts },    "show available pixel formats" },
     { "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" },
     { "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" },
     { "loglevel"   , HAS_ARG,  {.func_arg = opt_loglevel},      "set libav* logging level", "loglevel" },
     { "v",           HAS_ARG,  {.func_arg = opt_loglevel},      "set libav* logging level", "loglevel" },
     { "v",           HAS_ARG,  {.func_arg = opt_loglevel},      "set libav* logging level", "loglevel" },

+ 3 - 0
doc/avtools-common-opts.texi

@@ -119,6 +119,9 @@ Show available pixel formats.
 @item -sample_fmts
 @item -sample_fmts
 Show available sample formats.
 Show available sample formats.
 
 
+@item -layouts
+Show channel names and standard channel layouts.
+
 @item -loglevel @var{loglevel} | -v @var{loglevel}
 @item -loglevel @var{loglevel} | -v @var{loglevel}
 Set the logging level used by the library.
 Set the logging level used by the library.
 @var{loglevel} is a number or a string containing one of the following values:
 @var{loglevel} is a number or a string containing one of the following values: