mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
acp: add channel layout and map channels
This commit is contained in:
parent
8f7e5dd950
commit
af3f18b489
2 changed files with 116 additions and 2 deletions
|
|
@ -32,6 +32,75 @@ void *_acp_log_data;
|
|||
|
||||
#define VOLUME_ACCURACY (PA_VOLUME_NORM/100) /* don't require volume adjustments to be perfectly correct. don't necessarily extend granularity in software unless the differences get greater than this level */
|
||||
|
||||
static const uint32_t channel_table[PA_CHANNEL_POSITION_MAX] = {
|
||||
[PA_CHANNEL_POSITION_MONO] = ACP_CHANNEL_MONO,
|
||||
|
||||
[PA_CHANNEL_POSITION_FRONT_LEFT] = ACP_CHANNEL_FL,
|
||||
[PA_CHANNEL_POSITION_FRONT_RIGHT] = ACP_CHANNEL_FR,
|
||||
[PA_CHANNEL_POSITION_FRONT_CENTER] = ACP_CHANNEL_FC,
|
||||
|
||||
[PA_CHANNEL_POSITION_REAR_CENTER] = ACP_CHANNEL_RC,
|
||||
[PA_CHANNEL_POSITION_REAR_LEFT] = ACP_CHANNEL_RL,
|
||||
[PA_CHANNEL_POSITION_REAR_RIGHT] = ACP_CHANNEL_RR,
|
||||
|
||||
[PA_CHANNEL_POSITION_LFE] = ACP_CHANNEL_LFE,
|
||||
[PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER] = ACP_CHANNEL_FLC,
|
||||
[PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER] = ACP_CHANNEL_FRC,
|
||||
|
||||
[PA_CHANNEL_POSITION_SIDE_LEFT] = ACP_CHANNEL_SL,
|
||||
[PA_CHANNEL_POSITION_SIDE_RIGHT] = ACP_CHANNEL_SR,
|
||||
|
||||
[PA_CHANNEL_POSITION_AUX0] = ACP_CHANNEL_CUSTOM_START + 1,
|
||||
[PA_CHANNEL_POSITION_AUX1] = ACP_CHANNEL_CUSTOM_START + 2,
|
||||
[PA_CHANNEL_POSITION_AUX2] = ACP_CHANNEL_CUSTOM_START + 3,
|
||||
[PA_CHANNEL_POSITION_AUX3] = ACP_CHANNEL_CUSTOM_START + 4,
|
||||
[PA_CHANNEL_POSITION_AUX4] = ACP_CHANNEL_CUSTOM_START + 5,
|
||||
[PA_CHANNEL_POSITION_AUX5] = ACP_CHANNEL_CUSTOM_START + 6,
|
||||
[PA_CHANNEL_POSITION_AUX6] = ACP_CHANNEL_CUSTOM_START + 7,
|
||||
[PA_CHANNEL_POSITION_AUX7] = ACP_CHANNEL_CUSTOM_START + 8,
|
||||
[PA_CHANNEL_POSITION_AUX8] = ACP_CHANNEL_CUSTOM_START + 9,
|
||||
[PA_CHANNEL_POSITION_AUX9] = ACP_CHANNEL_CUSTOM_START + 10,
|
||||
[PA_CHANNEL_POSITION_AUX10] = ACP_CHANNEL_CUSTOM_START + 11,
|
||||
[PA_CHANNEL_POSITION_AUX11] = ACP_CHANNEL_CUSTOM_START + 12,
|
||||
[PA_CHANNEL_POSITION_AUX12] = ACP_CHANNEL_CUSTOM_START + 13,
|
||||
[PA_CHANNEL_POSITION_AUX13] = ACP_CHANNEL_CUSTOM_START + 14,
|
||||
[PA_CHANNEL_POSITION_AUX14] = ACP_CHANNEL_CUSTOM_START + 15,
|
||||
[PA_CHANNEL_POSITION_AUX15] = ACP_CHANNEL_CUSTOM_START + 16,
|
||||
[PA_CHANNEL_POSITION_AUX16] = ACP_CHANNEL_CUSTOM_START + 17,
|
||||
[PA_CHANNEL_POSITION_AUX17] = ACP_CHANNEL_CUSTOM_START + 18,
|
||||
[PA_CHANNEL_POSITION_AUX18] = ACP_CHANNEL_CUSTOM_START + 19,
|
||||
[PA_CHANNEL_POSITION_AUX19] = ACP_CHANNEL_CUSTOM_START + 20,
|
||||
[PA_CHANNEL_POSITION_AUX20] = ACP_CHANNEL_CUSTOM_START + 21,
|
||||
[PA_CHANNEL_POSITION_AUX21] = ACP_CHANNEL_CUSTOM_START + 22,
|
||||
[PA_CHANNEL_POSITION_AUX22] = ACP_CHANNEL_CUSTOM_START + 23,
|
||||
[PA_CHANNEL_POSITION_AUX23] = ACP_CHANNEL_CUSTOM_START + 24,
|
||||
[PA_CHANNEL_POSITION_AUX24] = ACP_CHANNEL_CUSTOM_START + 25,
|
||||
[PA_CHANNEL_POSITION_AUX25] = ACP_CHANNEL_CUSTOM_START + 26,
|
||||
[PA_CHANNEL_POSITION_AUX26] = ACP_CHANNEL_CUSTOM_START + 27,
|
||||
[PA_CHANNEL_POSITION_AUX27] = ACP_CHANNEL_CUSTOM_START + 28,
|
||||
[PA_CHANNEL_POSITION_AUX28] = ACP_CHANNEL_CUSTOM_START + 29,
|
||||
[PA_CHANNEL_POSITION_AUX29] = ACP_CHANNEL_CUSTOM_START + 30,
|
||||
[PA_CHANNEL_POSITION_AUX30] = ACP_CHANNEL_CUSTOM_START + 31,
|
||||
[PA_CHANNEL_POSITION_AUX31] = ACP_CHANNEL_CUSTOM_START + 32,
|
||||
|
||||
[PA_CHANNEL_POSITION_TOP_CENTER] = ACP_CHANNEL_TC,
|
||||
|
||||
[PA_CHANNEL_POSITION_TOP_FRONT_LEFT] = ACP_CHANNEL_TFL,
|
||||
[PA_CHANNEL_POSITION_TOP_FRONT_RIGHT] = ACP_CHANNEL_TFR,
|
||||
[PA_CHANNEL_POSITION_TOP_FRONT_CENTER] = ACP_CHANNEL_TFC,
|
||||
|
||||
[PA_CHANNEL_POSITION_TOP_REAR_LEFT] = ACP_CHANNEL_TRL,
|
||||
[PA_CHANNEL_POSITION_TOP_REAR_RIGHT] = ACP_CHANNEL_TRR,
|
||||
[PA_CHANNEL_POSITION_TOP_REAR_CENTER] = ACP_CHANNEL_TRC,
|
||||
};
|
||||
|
||||
static inline uint32_t channel_pa2acp(pa_channel_position_t channel)
|
||||
{
|
||||
if (channel < 0 || (size_t)channel >= SPA_N_ELEMENTS(channel_table))
|
||||
return ACP_CHANNEL_UNKNOWN;
|
||||
return channel_table[channel];
|
||||
}
|
||||
|
||||
const char *acp_available_str(enum acp_available status)
|
||||
{
|
||||
switch (status) {
|
||||
|
|
@ -89,7 +158,7 @@ static void init_device(pa_card *impl, pa_alsa_device *dev, pa_alsa_direction_t
|
|||
dev->device.format.channels = m->channel_map.channels;
|
||||
pa_cvolume_reset(&dev->real_volume, m->channel_map.channels);
|
||||
for (i = 0; i < m->channel_map.channels; i++)
|
||||
dev->device.format.map[i]= m->channel_map.map[i];
|
||||
dev->device.format.map[i]= channel_pa2acp(m->channel_map.map[i]);
|
||||
dev->direction = direction;
|
||||
dev->proplist = pa_proplist_new();
|
||||
pa_proplist_update(dev->proplist, PA_UPDATE_REPLACE, m->proplist);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue