[FFmpeg-devel] [PATCH 2/3] audioconvert: add av_get_standard_channel_layout().

Nicolas George nicolas.george at normalesup.org
Mon Jul 30 00:40:08 CEST 2012


Signed-off-by: Nicolas George <nicolas.george at normalesup.org>
---
 doc/APIchanges           |    3 +++
 libavutil/audioconvert.c |   29 +++++++++++++++++++++++++++++
 libavutil/audioconvert.h |   16 ++++++++++++++++
 libavutil/version.h      |    2 +-
 4 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 9203cee..a3c9203 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil:     2011-04-18
 
 API changes, most recent first:
 
+2012-07-30 - xxxxxxx - lavu 51.66.100
+  Add av_get_standard_channel_layout() function.
+
 2012-07-20 - xxxxxxx - lavc 54.43.100
   Add decode_error_flags field to AVFrame.
 
diff --git a/libavutil/audioconvert.c b/libavutil/audioconvert.c
index 7010144..4937a60 100644
--- a/libavutil/audioconvert.c
+++ b/libavutil/audioconvert.c
@@ -232,3 +232,32 @@ uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index)
     }
     return 0;
 }
+
+int av_get_standard_channel_layout(unsigned index, uint64_t *layout,
+                                   const char **short_name,
+                                   const char **long_name)
+{
+    uint64_t l = 0;
+    const char *sn = NULL, *ln = NULL;
+    int ret = 0;
+
+    if (index < 64) {
+        l = (uint64_t)1 << index;
+        if (index < FF_ARRAY_ELEMS(channel_names)) {
+            sn = channel_names[index].short_name;
+            ln = channel_names[index]. long_name;
+        }
+    } else {
+        index -= 64;
+        if (index < FF_ARRAY_ELEMS(channel_layout_map)) {
+            l  = channel_layout_map[index].layout;
+            sn = channel_layout_map[index].name;
+        } else {
+            ret = AVERROR_EOF;
+        }
+    }
+    if (layout)     *layout     = l;
+    if (short_name) *short_name = sn;
+    if (long_name)  * long_name = ln;
+    return ret;
+}
diff --git a/libavutil/audioconvert.h b/libavutil/audioconvert.h
index 25e9cf0..a6d5fd6 100644
--- a/libavutil/audioconvert.h
+++ b/libavutil/audioconvert.h
@@ -181,6 +181,22 @@ uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
 const char *av_get_channel_name(uint64_t channel);
 
 /**
+ * Get the value, name and description of standard channel layouts.
+ *
+ * @param[in]  index       index in the list; indices between 0 and 63 are
+ *                         individual channels
+ * @param[out] layout      channel layout mask
+ * @param[out] short_name  short name of the layout, NULL for unaffected
+ *                         individual channels
+ * @param[out] long_name   long name of the layout, or NULL
+ * @return  0  if the layout exists (in the broad sense),
+ *          <0 if index is beyond the limits
+ */
+int av_get_standard_channel_layout(unsigned index, uint64_t *layout,
+                                   const char **short_name,
+                                   const char **long_name);
+
+/**
  * @}
  */
 
diff --git a/libavutil/version.h b/libavutil/version.h
index a06fbc7..04d111b 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -39,7 +39,7 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR 51
-#define LIBAVUTIL_VERSION_MINOR 65
+#define LIBAVUTIL_VERSION_MINOR 66
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
-- 
1.7.10.4



More information about the ffmpeg-devel mailing list