From 703380d62dc913e4b56ef2d060fbe6163403e1c1 Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Mon, 26 Jan 2026 14:24:35 -0800 Subject: [PATCH] pulse-server: Fix querying after setting of mono mixdown --- src/modules/module-protocol-pulse/client.h | 1 + src/modules/module-protocol-pulse/message-handler.c | 3 +++ src/modules/module-protocol-pulse/pulse-server.c | 11 ++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/modules/module-protocol-pulse/client.h b/src/modules/module-protocol-pulse/client.h index 2c413e51c..7998e5deb 100644 --- a/src/modules/module-protocol-pulse/client.h +++ b/src/modules/module-protocol-pulse/client.h @@ -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; diff --git a/src/modules/module-protocol-pulse/message-handler.c b/src/modules/module-protocol-pulse/message-handler.c index 48c7c7be3..c3868230d 100644 --- a/src/modules/module-protocol-pulse/message-handler.c +++ b/src/modules/module-protocol-pulse/message-handler.c @@ -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; diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index c22499718..830fbc371 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -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))