mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-31 22:25:33 -04:00
add new API pa_channel_map_init_extend() to synthesize a channel map if noone is known
This commit is contained in:
parent
b95cf52030
commit
132e73b2ef
4 changed files with 43 additions and 3 deletions
|
|
@ -12,6 +12,7 @@ pa_bytes_to_usec;
|
|||
pa_channel_map_equal;
|
||||
pa_channel_map_init;
|
||||
pa_channel_map_init_auto;
|
||||
pa_channel_map_init_extend;
|
||||
pa_channel_map_init_mono;
|
||||
pa_channel_map_init_stereo;
|
||||
pa_channel_map_parse;
|
||||
|
|
|
|||
|
|
@ -394,6 +394,34 @@ pa_channel_map* pa_channel_map_init_auto(pa_channel_map *m, unsigned channels, p
|
|||
}
|
||||
}
|
||||
|
||||
pa_channel_map* pa_channel_map_init_extend(pa_channel_map *m, unsigned channels, pa_channel_map_def_t def) {
|
||||
unsigned c;
|
||||
|
||||
pa_assert(m);
|
||||
pa_assert(channels > 0);
|
||||
pa_assert(channels <= PA_CHANNELS_MAX);
|
||||
|
||||
pa_channel_map_init(m);
|
||||
|
||||
for (c = channels; c > 0; c--) {
|
||||
|
||||
if (pa_channel_map_init_auto(m, c, def)) {
|
||||
unsigned i = 0;
|
||||
|
||||
for (; c < channels; c++) {
|
||||
|
||||
m->map[c] = PA_CHANNEL_POSITION_AUX0 + i;
|
||||
i++;
|
||||
}
|
||||
|
||||
m->channels = channels;
|
||||
|
||||
return m;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char* pa_channel_position_to_string(pa_channel_position_t pos) {
|
||||
|
||||
|
|
|
|||
|
|
@ -166,10 +166,18 @@ pa_channel_map* pa_channel_map_init_mono(pa_channel_map *m);
|
|||
/** Initialize the specified channel map for stereophonic audio and return a pointer to it */
|
||||
pa_channel_map* pa_channel_map_init_stereo(pa_channel_map *m);
|
||||
|
||||
/** Initialize the specified channel map for the specified number
|
||||
* of channels using default labels and return a pointer to it. */
|
||||
/** Initialize the specified channel map for the specified number of
|
||||
* channels using default labels and return a pointer to it. This call
|
||||
* will fail (return NULL) if there is no default channel map known for this
|
||||
* specific number of channels and mapping. */
|
||||
pa_channel_map* pa_channel_map_init_auto(pa_channel_map *m, unsigned channels, pa_channel_map_def_t def);
|
||||
|
||||
/** Similar to pa_channel_map_init_auto() but instead of failing if no
|
||||
* default mapping is known with the specified parameters it will
|
||||
* synthesize a mapping based on a known mapping with fewer channels
|
||||
* and fill up the rest with AUX0...AUX31 channels \since 0.9.11 */
|
||||
pa_channel_map* pa_channel_map_init_extend(pa_channel_map *m, unsigned channels, pa_channel_map_def_t def);
|
||||
|
||||
/** Return a text label for the specified channel position */
|
||||
const char* pa_channel_position_to_string(pa_channel_position_t pos) PA_GCC_PURE;
|
||||
|
||||
|
|
|
|||
|
|
@ -20,12 +20,15 @@ int main(PA_GCC_UNUSED int argc, PA_GCC_UNUSED char *argv[]) {
|
|||
|
||||
fprintf(stderr, "map: <%s>\n", pa_channel_map_snprint(cm, sizeof(cm), &map));
|
||||
|
||||
pa_channel_map_init_extend(&map, 14, PA_CHANNEL_MAP_ALSA);
|
||||
|
||||
fprintf(stderr, "map: <%s>\n", pa_channel_map_snprint(cm, sizeof(cm), &map));
|
||||
|
||||
pa_channel_map_parse(&map2, cm);
|
||||
|
||||
assert(pa_channel_map_equal(&map, &map2));
|
||||
|
||||
pa_channel_map_parse(&map2, "left,test");
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue