mirror of
https://gitlab.freedesktop.org/pipewire/wireplumber.git
synced 2026-05-09 07:28:41 +02:00
default-nodes: use WpSpaJson API
This commit is contained in:
parent
20187e07b5
commit
5bef0f240f
3 changed files with 29 additions and 47 deletions
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include <wp/wp.h>
|
||||
#include <spa/utils/defs.h>
|
||||
#include <pipewire/keys.h>
|
||||
#include "module-default-nodes/common.h"
|
||||
|
||||
|
|
@ -77,12 +78,15 @@ on_metadata_changed (WpMetadata *m, guint32 subject,
|
|||
return;
|
||||
|
||||
for (gint i = 0; i < N_DEFAULT_NODES; i++) {
|
||||
gchar name[1024];
|
||||
if (!g_strcmp0 (key, DEFAULT_KEY[i])) {
|
||||
g_clear_pointer (&self->defaults[i].value, g_free);
|
||||
if (value && !g_strcmp0 (type, "Spa:String:JSON") &&
|
||||
json_object_find (value, "name", name, sizeof(name)) == 0)
|
||||
self->defaults[i].value = g_strdup (name);
|
||||
|
||||
if (value && !g_strcmp0 (type, "Spa:String:JSON")) {
|
||||
g_autoptr (WpSpaJson) json = wp_spa_json_new_from_string (value);
|
||||
g_autofree gchar *name = NULL;
|
||||
if (wp_spa_json_object_get (json, "name", "s", &name, NULL))
|
||||
self->defaults[i].value = g_strdup (name);
|
||||
}
|
||||
|
||||
wp_debug_object (m, "changed '%s' -> '%s'", key,
|
||||
self->defaults[i].value);
|
||||
|
|
@ -91,12 +95,17 @@ on_metadata_changed (WpMetadata *m, guint32 subject,
|
|||
break;
|
||||
} else if (!g_strcmp0 (key, DEFAULT_CONFIG_KEY[i])) {
|
||||
g_clear_pointer (&self->defaults[i].config_value, g_free);
|
||||
if (value && !g_strcmp0 (type, "Spa:String:JSON") &&
|
||||
json_object_find (value, "name", name, sizeof(name)) == 0)
|
||||
self->defaults[i].config_value = g_strdup (name);
|
||||
|
||||
if (value && !g_strcmp0 (type, "Spa:String:JSON")) {
|
||||
g_autoptr (WpSpaJson) json = wp_spa_json_new_from_string (value);
|
||||
g_autofree gchar *name = NULL;
|
||||
if (wp_spa_json_object_get (json, "name", "s", &name, NULL))
|
||||
self->defaults[i].config_value = g_strdup (name);
|
||||
}
|
||||
|
||||
wp_debug_object (m, "changed '%s' -> '%s'", key,
|
||||
self->defaults[i].config_value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,7 +291,6 @@ reevaluate_default_node (WpDefaultNodes * self, WpMetadata *m, gint node_t)
|
|||
{
|
||||
WpNode *node = NULL;
|
||||
const gchar *node_name = NULL;
|
||||
gchar buf[1024];
|
||||
|
||||
node = find_best_node (self, node_t);
|
||||
if (node)
|
||||
|
|
@ -302,14 +301,17 @@ reevaluate_default_node (WpDefaultNodes * self, WpMetadata *m, gint node_t)
|
|||
if (node && node_name &&
|
||||
g_strcmp0 (node_name, self->defaults[node_t].value) != 0)
|
||||
{
|
||||
g_autoptr (WpSpaJson) json = NULL;
|
||||
|
||||
g_free (self->defaults[node_t].value);
|
||||
self->defaults[node_t].value = g_strdup (node_name);
|
||||
|
||||
wp_info_object (self, "set default node for %s: %s",
|
||||
NODE_TYPE_STR[node_t], node_name);
|
||||
|
||||
g_snprintf (buf, sizeof(buf), "{ \"name\": \"%s\" }", node_name);
|
||||
wp_metadata_set (m, 0, DEFAULT_KEY[node_t], "Spa:String:JSON", buf);
|
||||
json = wp_spa_json_new_object ("name", "s", node_name, NULL);
|
||||
wp_metadata_set (m, 0, DEFAULT_KEY[node_t], "Spa:String:JSON",
|
||||
wp_spa_json_get_data (json));
|
||||
} else if (!node && self->defaults[node_t].value) {
|
||||
g_clear_pointer (&self->defaults[node_t].value, g_free);
|
||||
wp_info_object (self, "unset default node for %s", NODE_TYPE_STR[node_t]);
|
||||
|
|
@ -490,7 +492,6 @@ on_metadata_changed (WpMetadata *m, guint32 subject,
|
|||
{
|
||||
WpDefaultNodes * self = WP_DEFAULT_NODES (d);
|
||||
gint node_t = -1;
|
||||
gchar name[1024];
|
||||
|
||||
if (subject == 0) {
|
||||
for (gint i = 0; i < N_DEFAULT_NODES; i++) {
|
||||
|
|
@ -504,10 +505,11 @@ on_metadata_changed (WpMetadata *m, guint32 subject,
|
|||
if (node_t != -1) {
|
||||
g_clear_pointer (&self->defaults[node_t].config_value, g_free);
|
||||
|
||||
if (value && !g_strcmp0 (type, "Spa:String:JSON") &&
|
||||
json_object_find (value, "name", name, sizeof(name)) == 0)
|
||||
{
|
||||
self->defaults[node_t].config_value = g_strdup (name);
|
||||
if (value && !g_strcmp0 (type, "Spa:String:JSON")) {
|
||||
g_autoptr (WpSpaJson) json = wp_spa_json_new_from_string (value);
|
||||
g_autofree gchar *name = NULL;
|
||||
if (wp_spa_json_object_get (json, "name", "s", &name, NULL))
|
||||
self->defaults[node_t].config_value = g_strdup (name);
|
||||
}
|
||||
|
||||
wp_debug_object (m, "changed '%s' -> '%s'", key,
|
||||
|
|
@ -540,12 +542,11 @@ on_metadata_added (WpObjectManager *om, WpMetadata *metadata, gpointer d)
|
|||
g_return_if_fail (core);
|
||||
|
||||
for (gint i = 0; i < N_DEFAULT_NODES; i++) {
|
||||
gchar buf[1024];
|
||||
if (self->defaults[i].config_value) {
|
||||
g_snprintf (buf, sizeof(buf), "{ \"name\": \"%s\" }",
|
||||
self->defaults[i].config_value);
|
||||
g_autoptr (WpSpaJson) json = wp_spa_json_new_object (
|
||||
"name", "s", self->defaults[i].config_value, NULL);
|
||||
wp_metadata_set (metadata, 0, DEFAULT_CONFIG_KEY[i], "Spa:String:JSON",
|
||||
buf);
|
||||
wp_spa_json_get_data (json));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,10 +6,6 @@
|
|||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <glib.h>
|
||||
#include <errno.h>
|
||||
#include <spa/utils/json.h>
|
||||
|
||||
enum {
|
||||
AUDIO_SINK,
|
||||
AUDIO_SOURCE,
|
||||
|
|
@ -34,27 +30,3 @@ static const gchar * DEFAULT_CONFIG_KEY[N_DEFAULT_NODES] = {
|
|||
[AUDIO_SOURCE] = "default.configured.audio.source",
|
||||
[VIDEO_SOURCE] = "default.configured.video.source",
|
||||
};
|
||||
|
||||
static int
|
||||
json_object_find (const char *obj, const char *key, char *value, size_t len)
|
||||
{
|
||||
struct spa_json it[2];
|
||||
const char *v;
|
||||
char k[128];
|
||||
|
||||
spa_json_init(&it[0], obj, strlen(obj));
|
||||
if (spa_json_enter_object(&it[0], &it[1]) <= 0)
|
||||
return -EINVAL;
|
||||
|
||||
while (spa_json_get_string(&it[1], k, sizeof(k)) > 0) {
|
||||
if (strcmp(k, key) == 0) {
|
||||
if (spa_json_get_string(&it[1], value, len) <= 0)
|
||||
continue;
|
||||
return 0;
|
||||
} else {
|
||||
if (spa_json_next(&it[1], &v) <= 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
return -ENOENT;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue