pulse-server: Fix querying after setting of mono mixdown

This commit is contained in:
Arun Raghavan 2026-01-26 14:24:35 -08:00
parent ced36a5315
commit f708c24897
3 changed files with 14 additions and 1 deletions

View file

@ -62,6 +62,7 @@ struct client {
struct pw_manager_object *metadata_schema_sm_settings;
bool have_force_mono_audio;
bool default_force_mono_audio;
struct pw_manager_object *metadata_sm_settings;
bool force_mono_audio;

View file

@ -110,12 +110,15 @@ static int core_object_force_mono_output(struct client *client, const char *para
if (spa_streq(params, "true")) {
ret = pw_manager_set_metadata(client->manager, client->metadata_sm_settings, PW_ID_CORE,
METADATA_FEATURES_AUDIO_MONO, "Spa:String:JSON", "true");
client->force_mono_audio = true;
} else if (spa_streq(params, "false")) {
ret = pw_manager_set_metadata(client->manager, client->metadata_sm_settings, PW_ID_CORE,
METADATA_FEATURES_AUDIO_MONO, "Spa:String:JSON", "false");
client->force_mono_audio = false;
} else if (spa_streq(params, "null")) {
ret = pw_manager_set_metadata(client->manager, client->metadata_sm_settings, PW_ID_CORE,
METADATA_FEATURES_AUDIO_MONO, NULL, NULL);
client->force_mono_audio = client->default_force_mono_audio;
} else {
fprintf(response, "Value must be true, false, or clear");
return -EINVAL;

View file

@ -973,8 +973,17 @@ static void manager_metadata(void *data, struct pw_manager_object *o,
if (subject == PW_ID_CORE && o == client->metadata_routes)
client_update_routes(client, key, value);
if (subject == PW_ID_CORE && o == client->metadata_schema_sm_settings) {
if (spa_streq(key, METADATA_FEATURES_AUDIO_MONO))
char default_[16];
if (spa_streq(key, METADATA_FEATURES_AUDIO_MONO)) {
client->have_force_mono_audio = true;
if (spa_json_str_object_find(value, strlen(value),
"default", default_, sizeof(default_)) < 0)
client->default_force_mono_audio = false;
else
client->default_force_mono_audio = spa_streq(default_, "true");
}
}
if (subject == PW_ID_CORE && o == client->metadata_sm_settings) {
if (spa_streq(key, METADATA_FEATURES_AUDIO_MONO))