aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-05-28 12:20:57 +0200
committerAnton Khirnov <anton@khirnov.net>2012-06-10 08:03:45 +0200
commit59d58b3390cf866a5db6d3cd3908922d2905de6e (patch)
tree97b977e11f4a4ea296c71eb1ab596c7fb1f73ac0
parent5df320e167dc5b5a6fa46e2d1d59f51263dea181 (diff)
downloadffmpeg-59d58b3390cf866a5db6d3cd3908922d2905de6e.tar.gz
audioconvert: add a function for extracting the channel with the given index
-rw-r--r--libavutil/audioconvert.c14
-rw-r--r--libavutil/audioconvert.h5
2 files changed, 19 insertions, 0 deletions
diff --git a/libavutil/audioconvert.c b/libavutil/audioconvert.c
index 36d07ee5a4..1ac63a37a6 100644
--- a/libavutil/audioconvert.c
+++ b/libavutil/audioconvert.c
@@ -213,3 +213,17 @@ const char *av_get_channel_name(uint64_t channel)
return get_channel_name(i);
return NULL;
}
+
+uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index)
+{
+ int i;
+
+ if (av_get_channel_layout_nb_channels(channel_layout) <= index)
+ return 0;
+
+ for (i = 0; i < 64; i++) {
+ if ((1ULL << i) & channel_layout && !index--)
+ return 1ULL << i;
+ }
+ return 0;
+}
diff --git a/libavutil/audioconvert.h b/libavutil/audioconvert.h
index e516ae8296..691c64a9de 100644
--- a/libavutil/audioconvert.h
+++ b/libavutil/audioconvert.h
@@ -156,6 +156,11 @@ int av_get_channel_layout_channel_index(uint64_t channel_layout,
uint64_t channel);
/**
+ * Get the channel with the given index in channel_layout.
+ */
+uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
+
+/**
* Get the name of a given channel.
*
* @return channel name on success, NULL on error.