pulse-server: fix set-port

Parse the name as a string
Pass the device id and port_id in the right properties
Return an error when unknown port was specified.

Fixes #443
This commit is contained in:
Wim Taymans 2020-12-04 15:41:11 +01:00
parent 745b7ee900
commit c6663b6a18
2 changed files with 6 additions and 4 deletions

View file

@ -523,7 +523,7 @@ static uint32_t find_port_id(struct pw_manager_object *card, uint32_t direction,
SPA_TYPE_OBJECT_ParamRoute, NULL, SPA_TYPE_OBJECT_ParamRoute, NULL,
SPA_PARAM_ROUTE_index, SPA_POD_Int(&id), SPA_PARAM_ROUTE_index, SPA_POD_Int(&id),
SPA_PARAM_ROUTE_direction, SPA_POD_Id(&dir), SPA_PARAM_ROUTE_direction, SPA_POD_Id(&dir),
SPA_PARAM_ROUTE_name, SPA_POD_Id(&name)) < 0) SPA_PARAM_ROUTE_name, SPA_POD_String(&name)) < 0)
continue; continue;
if (dir != direction) if (dir != direction)
continue; continue;

View file

@ -2598,8 +2598,8 @@ static int set_card_volume_mute(struct pw_manager_object *o, uint32_t id,
return 0; return 0;
} }
static int set_card_port(struct pw_manager_object *o, uint32_t id, static int set_card_port(struct pw_manager_object *o, uint32_t device_id,
uint32_t device_id) uint32_t port_id)
{ {
char buf[1024]; char buf[1024];
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buf, sizeof(buf)); struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buf, sizeof(buf));
@ -2611,7 +2611,7 @@ static int set_card_port(struct pw_manager_object *o, uint32_t id,
SPA_PARAM_Route, 0, SPA_PARAM_Route, 0,
spa_pod_builder_add_object(&b, spa_pod_builder_add_object(&b,
SPA_TYPE_OBJECT_ParamRoute, SPA_PARAM_Route, SPA_TYPE_OBJECT_ParamRoute, SPA_PARAM_Route,
SPA_PARAM_ROUTE_index, SPA_POD_Int(id), SPA_PARAM_ROUTE_index, SPA_POD_Int(port_id),
SPA_PARAM_ROUTE_device, SPA_POD_Int(device_id))); SPA_PARAM_ROUTE_device, SPA_POD_Int(device_id)));
return 0; return 0;
@ -2930,6 +2930,8 @@ static int do_set_port(struct client *client, uint32_t command, uint32_t tag, st
return -ENOENT; return -ENOENT;
port_id = find_port_id(card, direction, port_name); port_id = find_port_id(card, direction, port_name);
if (port_id == SPA_ID_INVALID)
return -ENOENT;
if ((res = set_card_port(card, device_id, port_id)) < 0) if ((res = set_card_port(card, device_id, port_id)) < 0)
return res; return res;