spa: remove some obsolete functions

The spa_audio_info array now always holds enough positions for all
channels and we don't need to wrap around.
This commit is contained in:
Wim Taymans 2025-10-24 09:35:59 +02:00
parent 6d74eee874
commit 78219471ff
12 changed files with 34 additions and 64 deletions

View file

@ -28,35 +28,6 @@ extern "C" {
#endif
#endif
SPA_API_AUDIO_RAW_UTILS uint32_t
spa_format_audio_raw_get_position(const struct spa_audio_info_raw *info, uint32_t idx)
{
uint32_t pos, max_position = SPA_N_ELEMENTS(info->position);
if (idx < max_position) {
pos = info->position[idx];
} else {
pos = info->position[idx % max_position];
if (SPA_AUDIO_CHANNEL_IS_AUX(pos))
pos += (idx / max_position) * max_position;
}
return pos;
}
SPA_API_AUDIO_RAW_UTILS void
spa_format_audio_raw_set_position(struct spa_audio_info_raw *info, uint32_t idx, uint32_t position)
{
if (idx < SPA_N_ELEMENTS(info->position))
info->position[idx] = position;
}
SPA_API_AUDIO_RAW_UTILS uint32_t
spa_format_audio_raw_copy_positions(const struct spa_audio_info_raw *info, uint32_t *position, uint32_t max_position)
{
uint32_t i, n_pos = SPA_MIN(info->channels, max_position);
for (i = 0; i < n_pos; i++)
position[i] = spa_format_audio_raw_get_position(info, i);
return n_pos;
}
SPA_API_AUDIO_RAW_UTILS int
spa_format_audio_raw_ext_parse(const struct spa_pod *format, struct spa_audio_info_raw *info, size_t size)
{

View file

@ -1897,7 +1897,7 @@ static int reconfigure_mode(struct impl *this, enum spa_param_port_config_mode m
this->dir[SPA_DIRECTION_OUTPUT].n_ports = dir->n_ports + 1;
for (i = 0; i < dir->n_ports; i++) {
uint32_t pos = spa_format_audio_raw_get_position(&info->info.raw, i);
uint32_t pos = info->info.raw.position[i];
init_port(this, direction, i, pos, true, false, false);
if (this->monitor && direction == SPA_DIRECTION_INPUT)
init_port(this, SPA_DIRECTION_OUTPUT, i+1,
@ -2067,8 +2067,8 @@ static int setup_in_convert(struct impl *this)
uint32_t pi, pj;
char b1[8], b2[8];
pi = spa_format_audio_raw_get_position(&src_info.info.raw, i);
pj = spa_format_audio_raw_get_position(&dst_info.info.raw, j);
pi = src_info.info.raw.position[i];
pj = dst_info.info.raw.position[j];
if (pi != pj)
continue;
in->remap[i] = j;
@ -2078,7 +2078,7 @@ static int setup_in_convert(struct impl *this)
i, in->remap[i], j,
spa_type_audio_channel_make_short_name(pi, b1, 8, "UNK"),
spa_type_audio_channel_make_short_name(pj, b2, 8, "UNK"));
spa_format_audio_raw_set_position(&dst_info.info.raw, j, -1);
dst_info.info.raw.position[j] = -1;
break;
}
}
@ -2126,7 +2126,7 @@ static int remap_volumes(struct impl *this, const struct spa_audio_info *info)
for (i = 0; i < p->n_channels; i++) {
for (j = i; j < target; j++) {
uint32_t pj = spa_format_audio_raw_get_position(&info->info.raw, j);
uint32_t pj = info->info.raw.position[j];
spa_log_debug(this->log, "%d %d: %d <-> %d", i, j,
p->channel_map[i], pj);
if (p->channel_map[i] != pj)
@ -2142,7 +2142,7 @@ static int remap_volumes(struct impl *this, const struct spa_audio_info *info)
}
p->n_channels = target;
for (i = 0; i < p->n_channels; i++)
p->channel_map[i] = spa_format_audio_raw_get_position(&info->info.raw, i);
p->channel_map[i] = info->info.raw.position[i];
if (target == 0)
return 0;
@ -2216,7 +2216,7 @@ static int setup_channelmix(struct impl *this, uint32_t channels, uint32_t *posi
src_mask |= 1ULL << (p < 64 ? p : 0);
}
for (i = 0, dst_mask = 0; i < dst_chan; i++) {
p = spa_format_audio_raw_get_position(&out->format.info.raw, i);
p = out->format.info.raw.position[i];
dst_mask |= 1ULL << (p < 64 ? p : 0);
}
@ -2361,8 +2361,8 @@ static int setup_out_convert(struct impl *this)
uint32_t pi, pj;
char b1[8], b2[8];
pi = spa_format_audio_raw_get_position(&src_info.info.raw, i);
pj = spa_format_audio_raw_get_position(&dst_info.info.raw, j);
pi = src_info.info.raw.position[i];
pj = dst_info.info.raw.position[j];
if (pi != pj)
continue;
out->remap[i] = j;
@ -2374,7 +2374,7 @@ static int setup_out_convert(struct impl *this)
spa_type_audio_channel_make_short_name(pi, b1, 8, "UNK"),
spa_type_audio_channel_make_short_name(pj, b2, 8, "UNK"));
spa_format_audio_raw_set_position(&dst_info.info.raw, j, -1);
dst_info.info.raw.position[j] = -1;
break;
}
}

View file

@ -5038,9 +5038,13 @@ static DBusHandlerResult endpoint_set_configuration(DBusConnection *conn,
spa_log_error(monitor->log, "invalid transport configuration");
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
if (info.info.raw.channels > MAX_CHANNELS) {
spa_log_error(monitor->log, "too many channels in transport");
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
transport->n_channels = info.info.raw.channels;
spa_format_audio_raw_copy_positions(&info.info.raw,
transport->channels, SPA_N_ELEMENTS(transport->channels));
memcpy(transport->channels, info.info.raw.position,
transport->n_channels * sizeof(uint32_t));
} else {
transport->n_channels = 2;
transport->channels[0] = SPA_AUDIO_CHANNEL_FL;

View file

@ -475,7 +475,10 @@ static void get_channels(struct spa_bt_transport *t, bool a2dp_duplex, uint32_t
return;
}
*n_channels = spa_format_audio_raw_copy_positions(&info.info.raw, channels, max_channels);
*n_channels = info.info.raw.channels;
memcpy(channels, info.info.raw.position,
info.info.raw.channels * sizeof(uint32_t));
}
static const char *get_channel_name(uint32_t channel)

View file

@ -883,8 +883,8 @@ static int create_stream(struct stream_info *info)
s->remap[i] = i;
for (j = 0; j < tmp_info.channels; j++) {
uint32_t pj, pi;
pj = spa_format_audio_raw_get_position(&tmp_info, j);
pi = spa_format_audio_raw_get_position(&remap_info, i);
pj = tmp_info.position[j];
pi = remap_info.position[i];
if (pj == pi) {
s->remap[i] = j;
break;

View file

@ -525,8 +525,7 @@ static void make_stream_ports(struct stream *s)
if (i < s->info.channels) {
str = spa_type_audio_channel_make_short_name(
spa_format_audio_raw_get_position(&s->info, i),
pos, sizeof(pos), NULL);
s->info.position[i], pos, sizeof(pos), NULL);
if (str)
snprintf(name, sizeof(name), "%s_%s", prefix, str);
else

View file

@ -546,7 +546,7 @@ static void param_format_changed(struct impl *impl, const struct spa_pod *param,
(impl->info.channels != 0 &&
(impl->info.channels != info.channels ||
memcmp(impl->info.position, info.position,
SPA_MIN(info.channels, SPA_N_ELEMENTS(info.position)) * sizeof(uint32_t)) != 0))) {
info.channels * sizeof(uint32_t)) != 0))) {
uint8_t buffer[1024];
struct spa_pod_builder b;
const struct spa_pod *params[1];

View file

@ -442,8 +442,7 @@ static void make_stream_ports(struct stream *s)
if (i < s->info.channels) {
str = spa_type_audio_channel_make_short_name(
spa_format_audio_raw_get_position(&s->info, i),
name, sizeof(name), "UNK");
s->info.position[i], name, sizeof(name), "UNK");
props = pw_properties_new(
PW_KEY_FORMAT_DSP, "32 bit float mono audio",
PW_KEY_AUDIO_CHANNEL, str,
@ -866,8 +865,7 @@ static int handle_follower_setup(struct impl *impl, struct nj2_session_params *p
if ((uint32_t)peer->params.send_audio_channels != impl->sink.info.channels) {
impl->sink.info.channels = peer->params.send_audio_channels;
for (i = 0; i < impl->sink.info.channels; i++)
spa_format_audio_raw_set_position(&impl->sink.info, i,
SPA_AUDIO_CHANNEL_AUX0 + i);
impl->sink.info.position[i] = SPA_AUDIO_CHANNEL_AUX0 + i;
}
impl->source.n_ports = peer->params.recv_audio_channels + peer->params.recv_midi_channels;
if (impl->source.n_ports > MAX_PORTS) {
@ -878,8 +876,7 @@ static int handle_follower_setup(struct impl *impl, struct nj2_session_params *p
if ((uint32_t)peer->params.recv_audio_channels != impl->source.info.channels) {
impl->source.info.channels = peer->params.recv_audio_channels;
for (i = 0; i < impl->source.info.channels; i++)
spa_format_audio_raw_set_position(&impl->source.info, i,
SPA_AUDIO_CHANNEL_AUX0 + i);
impl->source.info.position[i] = SPA_AUDIO_CHANNEL_AUX0 + i;
}
impl->samplerate = peer->params.sample_rate;
impl->period_size = peer->params.period_size;

View file

@ -602,8 +602,7 @@ static void make_stream_ports(struct stream *s)
if (i < s->info.channels) {
str = spa_type_audio_channel_make_short_name(
spa_format_audio_raw_get_position(&s->info, i),
name, sizeof(name), "UNK");
s->info.position[i], name, sizeof(name), "UNK");
props = pw_properties_new(
PW_KEY_FORMAT_DSP, "32 bit float mono audio",
PW_KEY_AUDIO_CHANNEL, str,
@ -1031,16 +1030,14 @@ static int handle_follower_available(struct impl *impl, struct nj2_session_param
if ((uint32_t)peer->params.recv_audio_channels != follower->source.info.channels) {
follower->source.info.channels = peer->params.recv_audio_channels;
for (i = 0; i < follower->source.info.channels; i++)
spa_format_audio_raw_set_position(&follower->source.info, i,
SPA_AUDIO_CHANNEL_AUX0 + i);
follower->source.info.position[i] = SPA_AUDIO_CHANNEL_AUX0 + i;
}
follower->sink.n_ports = peer->params.send_audio_channels + peer->params.send_midi_channels;
follower->sink.info.rate = peer->params.sample_rate;
if ((uint32_t)peer->params.send_audio_channels != follower->sink.info.channels) {
follower->sink.info.channels = peer->params.send_audio_channels;
for (i = 0; i < follower->sink.info.channels; i++)
spa_format_audio_raw_set_position(&follower->sink.info, i,
SPA_AUDIO_CHANNEL_AUX0 + i);
follower->sink.info.position[i] = SPA_AUDIO_CHANNEL_AUX0 + i;
}
if (follower->source.n_ports > MAX_PORTS || follower->sink.n_ports > MAX_PORTS) {

View file

@ -585,7 +585,7 @@ int format_parse_param(const struct spa_pod *param, bool collect,
if (info.info.raw.channels) {
map->channels = SPA_MIN(info.info.raw.channels, CHANNELS_MAX);
for (i = 0; i < map->channels; i++)
map->map[i] = spa_format_audio_raw_get_position(&info.info.raw, i);
map->map[i] = info.info.raw.position[i];
}
}
return 0;

View file

@ -244,7 +244,7 @@ int module_args_to_audioinfo_keys(struct impl *impl, struct pw_properties *props
} else {
/* FIXME add more mappings */
for (i = 0; i < info->channels; i++)
spa_format_audio_raw_set_position(info, i, SPA_AUDIO_CHANNEL_UNKNOWN);
info->position[i] = SPA_AUDIO_CHANNEL_UNKNOWN;
}
if (info->position[0] == SPA_AUDIO_CHANNEL_UNKNOWN)
info->flags |= SPA_AUDIO_FLAG_UNPOSITIONED;
@ -290,8 +290,7 @@ void audioinfo_to_properties(struct spa_audio_info_raw *info, struct pw_properti
p = s = alloca(info->channels * 8);
for (i = 0; i < info->channels; i++)
p += spa_scnprintf(p, 8, "%s%s", i == 0 ? "" : ", ",
channel_id2name(spa_format_audio_raw_get_position(info, i),
pos, sizeof(pos)));
channel_id2name(info->position[i], pos, sizeof(pos)));
pw_properties_setf(props, SPA_KEY_AUDIO_POSITION, "[ %s ]", s);
}
}

View file

@ -755,7 +755,7 @@ static int create_pulse_stream(struct impl *impl)
map.channels = impl->info.channels;
for (i = 0; i < map.channels; i++)
map.map[i] = (pa_channel_position_t)channel_id2pa(
spa_format_audio_raw_get_position(&impl->info, i), &aux);
impl->info.position[i], &aux);
snprintf(stream_name, sizeof(stream_name), _("Tunnel for %s@%s"),
pw_get_user_name(), pw_get_host_name());