diff --git a/libavutil/audioconvert.c b/libavutil/audioconvert.c index 877027f1f7d40728e84015bb1ade3b30d32b4968..7dc7e9f1a7145ef4956e8c04db0b7d2e45a969ef 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 f402b62f634961df485cb954579d969fd6dc989d..319cc8ab7129a727a5d7c57f4a68b1fc001a036b 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. */