diff options
author | ToshikazuOhiwa <toshikazu_ohiwa@mail.toyota.co.jp> | 2020-03-30 09:24:26 +0900 |
---|---|---|
committer | ToshikazuOhiwa <toshikazu_ohiwa@mail.toyota.co.jp> | 2020-03-30 09:24:26 +0900 |
commit | 5b80bfd7bffd4c20d80b7c70a7130529e9a755dd (patch) | |
tree | b4bb18dcd1487dbf1ea8127e5671b7bb2eded033 /meta-agl-devel/meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-pipewire-cli-add-command-to-modify-endpoint-control-.patch | |
parent | 706ad73eb02caf8532deaf5d38995bd258725cb8 (diff) |
agl-basesystem
Diffstat (limited to 'meta-agl-devel/meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-pipewire-cli-add-command-to-modify-endpoint-control-.patch')
-rw-r--r-- | meta-agl-devel/meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-pipewire-cli-add-command-to-modify-endpoint-control-.patch | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/meta-agl-devel/meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-pipewire-cli-add-command-to-modify-endpoint-control-.patch b/meta-agl-devel/meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-pipewire-cli-add-command-to-modify-endpoint-control-.patch new file mode 100644 index 00000000..4394d60d --- /dev/null +++ b/meta-agl-devel/meta-pipewire/recipes-multimedia/pipewire/pipewire/0004-pipewire-cli-add-command-to-modify-endpoint-control-.patch @@ -0,0 +1,124 @@ +From 824c8abf88e9ee82567c177145798b619298ab91 Mon Sep 17 00:00:00 2001 +From: George Kiagiadakis <george.kiagiadakis@collabora.com> +Date: Wed, 5 Jun 2019 14:57:37 +0300 +Subject: [PATCH] pipewire-cli: add command to modify endpoint control values + +Upstream-Status: Pending +--- + src/tools/pipewire-cli.c | 86 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 86 insertions(+) + +diff --git a/src/tools/pipewire-cli.c b/src/tools/pipewire-cli.c +index 9511db82..b52ab100 100644 +--- a/src/tools/pipewire-cli.c ++++ b/src/tools/pipewire-cli.c +@@ -210,6 +210,7 @@ static bool do_export_node(struct data *data, const char *cmd, char *args, char + static bool do_enum_params(struct data *data, const char *cmd, char *args, char **error); + static bool do_permissions(struct data *data, const char *cmd, char *args, char **error); + static bool do_get_permissions(struct data *data, const char *cmd, char *args, char **error); ++static bool do_endpoint_control(struct data *data, const char *cmd, char *args, char **error); + + static struct command command_list[] = { + { "help", "Show this help", do_help }, +@@ -228,6 +229,7 @@ static struct command command_list[] = { + { "enum-params", "Enumerate params of an object <object-id> [<param-id-name>]", do_enum_params }, + { "permissions", "Set permissions for a client <client-id> <permissions>", do_permissions }, + { "get-permissions", "Get permissions of a client <client-id>", do_get_permissions }, ++ { "endpoint-control", "Set control value on an endpoint <object-id> <control-id> <type: b|i|l|d> <value>", do_endpoint_control }, + }; + + static bool do_help(struct data *data, const char *cmd, char *args, char **error) +@@ -1357,6 +1359,90 @@ static bool do_get_permissions(struct data *data, const char *cmd, char *args, c + return true; + } + ++static bool do_endpoint_control(struct data *data, const char *cmd, char *args, char **error) ++{ ++ struct remote_data *rd = data->current; ++ int n; ++ char *a[4]; ++ uint32_t id, control_id; ++ struct global *global; ++ char buffer[1024]; ++ struct spa_pod_builder b; ++ struct spa_pod_frame f; ++ struct spa_pod *param; ++ ++ n = pw_split_ip(args, WHITESPACE, 4, a); ++ if (n < 4) { ++ asprintf(error, "%s <object-id> <control-id> <type: b|i|l|d> <value>", cmd); ++ return false; ++ } ++ ++ id = atoi(a[0]); ++ global = pw_map_lookup(&rd->globals, id); ++ if (global == NULL) { ++ asprintf(error, "%s: unknown global %d", cmd, id); ++ return false; ++ } ++ if (global->type != PW_TYPE_INTERFACE_Endpoint) { ++ asprintf(error, "object %d is not an endpoint", atoi(a[0])); ++ return false; ++ } ++ if (global->proxy == NULL) { ++ if (!bind_global(rd, global, error)) ++ return false; ++ } ++ ++ control_id = atoi(a[1]); ++ ++ spa_pod_builder_init(&b, buffer, 1024); ++ spa_pod_builder_push_object (&b, &f, ++ PW_ENDPOINT_OBJECT_ParamControl, PW_ENDPOINT_PARAM_Control); ++ spa_pod_builder_add(&b, ++ PW_ENDPOINT_PARAM_CONTROL_id, SPA_POD_Int(control_id), ++ NULL); ++ ++ switch (*a[2]) { ++ case 'b': { ++ bool val = atoi(a[3]); ++ spa_pod_builder_add(&b, ++ PW_ENDPOINT_PARAM_CONTROL_value, SPA_POD_Bool(val), ++ NULL); ++ break; ++ } ++ case 'i': { ++ int val = atoi(a[3]); ++ spa_pod_builder_add(&b, ++ PW_ENDPOINT_PARAM_CONTROL_value, SPA_POD_Int(val), ++ NULL); ++ break; ++ } ++ case 'l': { ++ int64_t val = strtoll(a[3], NULL, 10); ++ spa_pod_builder_add(&b, ++ PW_ENDPOINT_PARAM_CONTROL_value, SPA_POD_Long(val), ++ NULL); ++ break; ++ } ++ case 'd': { ++ double val = strtod(a[3], NULL); ++ spa_pod_builder_add(&b, ++ PW_ENDPOINT_PARAM_CONTROL_value, SPA_POD_Double(val), ++ NULL); ++ break; ++ } ++ default: ++ asprintf(error, "%s: unknown value type %s", cmd, a[2]); ++ return false; ++ } ++ ++ param = spa_pod_builder_pop(&b, &f); ++ ++ pw_endpoint_proxy_set_param((struct pw_endpoint_proxy *) global->proxy, ++ PW_ENDPOINT_PARAM_Control, 0, param); ++ ++ return true; ++} ++ + static bool parse(struct data *data, char *buf, size_t size, char **error) + { + char *a[2]; +-- +2.20.1 + |