mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
audioconvert: implement av_bprint_channel_layout().
And reimplement av_get_channel_layout_string() on top of it.
This commit is contained in:
parent
7a2b429175
commit
e45a92dc88
@ -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;
|
||||
|
@ -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.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user