spa: add 64 AUX channels

Make 64 AUX channels instead of using the CUSTOM range for them.
This commit is contained in:
Wim Taymans 2021-07-21 11:25:43 +02:00
parent d03f29eb66
commit 1ad54e8a26
7 changed files with 211 additions and 86 deletions

View file

@ -54,38 +54,38 @@ static const uint32_t channel_table[PA_CHANNEL_POSITION_MAX] = {
[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_AUX0] = ACP_CHANNEL_START_Aux + 0,
[PA_CHANNEL_POSITION_AUX1] = ACP_CHANNEL_START_Aux + 1,
[PA_CHANNEL_POSITION_AUX2] = ACP_CHANNEL_START_Aux + 2,
[PA_CHANNEL_POSITION_AUX3] = ACP_CHANNEL_START_Aux + 3,
[PA_CHANNEL_POSITION_AUX4] = ACP_CHANNEL_START_Aux + 4,
[PA_CHANNEL_POSITION_AUX5] = ACP_CHANNEL_START_Aux + 5,
[PA_CHANNEL_POSITION_AUX6] = ACP_CHANNEL_START_Aux + 6,
[PA_CHANNEL_POSITION_AUX7] = ACP_CHANNEL_START_Aux + 7,
[PA_CHANNEL_POSITION_AUX8] = ACP_CHANNEL_START_Aux + 8,
[PA_CHANNEL_POSITION_AUX9] = ACP_CHANNEL_START_Aux + 9,
[PA_CHANNEL_POSITION_AUX10] = ACP_CHANNEL_START_Aux + 10,
[PA_CHANNEL_POSITION_AUX11] = ACP_CHANNEL_START_Aux + 11,
[PA_CHANNEL_POSITION_AUX12] = ACP_CHANNEL_START_Aux + 12,
[PA_CHANNEL_POSITION_AUX13] = ACP_CHANNEL_START_Aux + 12,
[PA_CHANNEL_POSITION_AUX14] = ACP_CHANNEL_START_Aux + 14,
[PA_CHANNEL_POSITION_AUX15] = ACP_CHANNEL_START_Aux + 15,
[PA_CHANNEL_POSITION_AUX16] = ACP_CHANNEL_START_Aux + 16,
[PA_CHANNEL_POSITION_AUX17] = ACP_CHANNEL_START_Aux + 17,
[PA_CHANNEL_POSITION_AUX18] = ACP_CHANNEL_START_Aux + 18,
[PA_CHANNEL_POSITION_AUX19] = ACP_CHANNEL_START_Aux + 19,
[PA_CHANNEL_POSITION_AUX20] = ACP_CHANNEL_START_Aux + 20,
[PA_CHANNEL_POSITION_AUX21] = ACP_CHANNEL_START_Aux + 21,
[PA_CHANNEL_POSITION_AUX22] = ACP_CHANNEL_START_Aux + 22,
[PA_CHANNEL_POSITION_AUX23] = ACP_CHANNEL_START_Aux + 23,
[PA_CHANNEL_POSITION_AUX24] = ACP_CHANNEL_START_Aux + 24,
[PA_CHANNEL_POSITION_AUX25] = ACP_CHANNEL_START_Aux + 25,
[PA_CHANNEL_POSITION_AUX26] = ACP_CHANNEL_START_Aux + 26,
[PA_CHANNEL_POSITION_AUX27] = ACP_CHANNEL_START_Aux + 27,
[PA_CHANNEL_POSITION_AUX28] = ACP_CHANNEL_START_Aux + 28,
[PA_CHANNEL_POSITION_AUX29] = ACP_CHANNEL_START_Aux + 29,
[PA_CHANNEL_POSITION_AUX30] = ACP_CHANNEL_START_Aux + 30,
[PA_CHANNEL_POSITION_AUX31] = ACP_CHANNEL_START_Aux + 31,
[PA_CHANNEL_POSITION_TOP_CENTER] = ACP_CHANNEL_TC,
@ -150,8 +150,8 @@ static inline uint32_t channel_pa2acp(pa_channel_position_t channel)
char *acp_channel_str(char *buf, size_t len, enum acp_channel ch)
{
if (ch >= ACP_CHANNEL_CUSTOM_START) {
snprintf(buf, len, "AUX%d", ch - ACP_CHANNEL_CUSTOM_START);
if (ch >= ACP_CHANNEL_START_Aux && ch <= ACP_CHANNEL_LAST_Aux) {
snprintf(buf, len, "AUX%d", ch - ACP_CHANNEL_START_Aux);
} else if (ch >= ACP_CHANNEL_UNKNOWN && ch <= ACP_CHANNEL_BRC) {
snprintf(buf, len, "%s", channel_names[ch]);
} else {

View file

@ -98,7 +98,11 @@ enum acp_channel {
ACP_CHANNEL_BC, /**< bottom center */
ACP_CHANNEL_BLC, /**< bottom left center */
ACP_CHANNEL_BRC, /**< bottom right center */
ACP_CHANNEL_CUSTOM_START = 0x10000,
ACP_CHANNEL_START_Aux = 0x1000,
ACP_CHANNEL_LAST_Aux = 0x1fff,
ACP_CHANNEL_START_Custom = 0x10000,
};
char *acp_channel_str(char *buf, size_t len, enum acp_channel ch);

View file

@ -228,19 +228,13 @@ static int init_port(struct impl *this, enum spa_direction direction, uint32_t p
uint32_t position)
{
struct port *port = GET_PORT(this, direction, port_id);
const char *name;
port->direction = direction;
port->id = port_id;
if (position < SPA_N_ELEMENTS(spa_type_audio_channel)) {
snprintf(port->position, sizeof(port->position), "%s",
spa_debug_type_short_name(spa_type_audio_channel[position].name));
} else if (position >= SPA_AUDIO_CHANNEL_CUSTOM_START) {
snprintf(port->position, sizeof(port->position), "AUX%d",
position - SPA_AUDIO_CHANNEL_CUSTOM_START);
} else {
snprintf(port->position, sizeof(port->position), "UNK");
}
name = spa_debug_type_find_short_name(spa_type_audio_channel, position);
snprintf(port->position, sizeof(port->position), "%s", name ? name : "UNK");
port->info_all = SPA_PORT_CHANGE_MASK_FLAGS |
SPA_PORT_CHANGE_MASK_PROPS |

View file

@ -168,19 +168,13 @@ static int init_port(struct impl *this, enum spa_direction direction,
uint32_t port_id, uint32_t position)
{
struct port *port = GET_OUT_PORT(this, port_id);
const char *name;
port->direction = direction;
port->id = port_id;
if (position < SPA_N_ELEMENTS(spa_type_audio_channel)) {
snprintf(port->position, sizeof(port->position), "%s",
spa_debug_type_short_name(spa_type_audio_channel[position].name));
} else if (position >= SPA_AUDIO_CHANNEL_CUSTOM_START) {
snprintf(port->position, sizeof(port->position), "AUX%d",
position - SPA_AUDIO_CHANNEL_CUSTOM_START);
} else {
snprintf(port->position, sizeof(port->position), "UNK");
}
name = spa_debug_type_find_short_name(spa_type_audio_channel, position);
snprintf(port->position, sizeof(port->position), "%s", name ? name : "UNK");
port->info_all = SPA_PORT_CHANGE_MASK_FLAGS |
SPA_PORT_CHANGE_MASK_PROPS |