summaryrefslogtreecommitdiffstats
path: root/libavutil
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2012-06-03 21:09:16 +0200
committerNicolas George <nicolas.george@normalesup.org>2012-06-07 22:28:32 +0200
commite45a92dc88498473e7392d4bea3efcc8a74089f8 (patch)
treecfa0cf325a82defd20a80fd867f4ebf706fd369d /libavutil
parent7a2b429175d9252c3a156e8f6795d5c6b85f07f1 (diff)
downloadffmpeg-streaming-e45a92dc88498473e7392d4bea3efcc8a74089f8.zip
ffmpeg-streaming-e45a92dc88498473e7392d4bea3efcc8a74089f8.tar.gz
audioconvert: implement av_bprint_channel_layout().
And reimplement av_get_channel_layout_string() on top of it.
Diffstat (limited to 'libavutil')
-rw-r--r--libavutil/audioconvert.c26
-rw-r--r--libavutil/audioconvert.h6
2 files changed, 24 insertions, 8 deletions
diff --git a/libavutil/audioconvert.c b/libavutil/audioconvert.c
index 877027f..7dc7e9f 100644
--- a/libavutil/audioconvert.c
+++ b/libavutil/audioconvert.c
@@ -26,6 +26,7 @@
#include "avstring.h"
#include "avutil.h"
#include "audioconvert.h"
+#include "bprint.h"
static const char * const channel_names[] = {
[0] = "FL", /* front left */
@@ -136,8 +137,8 @@ uint64_t av_get_channel_layout(const char *name)
return layout;
}
-void av_get_channel_layout_string(char *buf, int buf_size,
- int nb_channels, uint64_t channel_layout)
+void av_bprint_channel_layout(struct AVBPrint *bp,
+ int nb_channels, uint64_t channel_layout)
{
int i;
@@ -147,29 +148,38 @@ void av_get_channel_layout_string(char *buf, int buf_size,
for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++)
if (nb_channels == channel_layout_map[i].nb_channels &&
channel_layout == channel_layout_map[i].layout) {
- av_strlcpy(buf, channel_layout_map[i].name, buf_size);
+ av_bprintf(bp, "%s", channel_layout_map[i].name);
return;
}
- snprintf(buf, buf_size, "%d channels", nb_channels);
+ av_bprintf(bp, "%d channels", nb_channels);
if (channel_layout) {
int i, ch;
- av_strlcat(buf, " (", buf_size);
+ av_bprintf(bp, " (");
for (i = 0, ch = 0; i < 64; i++) {
if ((channel_layout & (UINT64_C(1) << i))) {
const char *name = get_channel_name(i);
if (name) {
if (ch > 0)
- av_strlcat(buf, "+", buf_size);
- av_strlcat(buf, name, buf_size);
+ av_bprintf(bp, "+");
+ av_bprintf(bp, "%s", name);
}
ch++;
}
}
- av_strlcat(buf, ")", buf_size);
+ av_bprintf(bp, ")");
}
}
+void av_get_channel_layout_string(char *buf, int buf_size,
+ int nb_channels, uint64_t channel_layout)
+{
+ AVBPrint bp;
+
+ av_bprint_init_for_buffer(&bp, buf, buf_size);
+ av_bprint_channel_layout(&bp, nb_channels, channel_layout);
+}
+
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
{
int count;
diff --git a/libavutil/audioconvert.h b/libavutil/audioconvert.h
index f402b62..319cc8a 100644
--- a/libavutil/audioconvert.h
+++ b/libavutil/audioconvert.h
@@ -133,6 +133,12 @@ uint64_t av_get_channel_layout(const char *name);
*/
void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout);
+struct AVBPrint;
+/**
+ * Append a description of a channel layout to a bprint buffer.
+ */
+void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout);
+
/**
* Return the number of channels in the channel layout.
*/
OpenPOWER on IntegriCloud