summaryrefslogtreecommitdiff
path: root/libavutil/channel_layout.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavutil/channel_layout.c')
-rw-r--r--libavutil/channel_layout.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/libavutil/channel_layout.c b/libavutil/channel_layout.c
index 26c87c96a8..3bd5ee29b7 100644
--- a/libavutil/channel_layout.c
+++ b/libavutil/channel_layout.c
@@ -152,6 +152,28 @@ uint64_t av_get_channel_layout(const char *name)
return layout;
}
+int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels)
+{
+ int nb = 0;
+ char *end;
+ uint64_t layout = av_get_channel_layout(name);
+
+ if (layout) {
+ *channel_layout = layout;
+ *nb_channels = av_get_channel_layout_nb_channels(layout);
+ return 0;
+ }
+
+ nb = strtol(name, &end, 10);
+ if (!errno && *end == 'C' && *(end + 1) == '\0' && nb > 0 && nb < 64) {
+ *channel_layout = 0;
+ *nb_channels = nb;
+ return 0;
+ }
+
+ return AVERROR(EINVAL);
+}
+
void av_bprint_channel_layout(struct AVBPrint *bp,
int nb_channels, uint64_t channel_layout)
{