mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
jack: update format flags when format is set
So that the introspection of the port will show a format when it is set.
This commit is contained in:
parent
882f1aee6c
commit
2d88ad179a
1 changed files with 32 additions and 20 deletions
|
|
@ -1740,6 +1740,10 @@ static int param_latency_other(struct client *c, struct port *p,
|
||||||
static int port_set_format(struct client *c, struct port *p,
|
static int port_set_format(struct client *c, struct port *p,
|
||||||
uint32_t flags, const struct spa_pod *param)
|
uint32_t flags, const struct spa_pod *param)
|
||||||
{
|
{
|
||||||
|
struct spa_pod *params[6];
|
||||||
|
uint8_t buffer[4096];
|
||||||
|
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
|
||||||
|
|
||||||
if (param == NULL) {
|
if (param == NULL) {
|
||||||
struct mix *mix;
|
struct mix *mix;
|
||||||
|
|
||||||
|
|
@ -1747,6 +1751,8 @@ static int port_set_format(struct client *c, struct port *p,
|
||||||
|
|
||||||
spa_list_for_each(mix, &p->mix, port_link)
|
spa_list_for_each(mix, &p->mix, port_link)
|
||||||
clear_buffers(c, mix);
|
clear_buffers(c, mix);
|
||||||
|
|
||||||
|
p->params[IDX_Format] = SPA_PARAM_INFO(SPA_PARAM_Format, SPA_PARAM_INFO_WRITE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
struct spa_audio_info info = { 0 };
|
struct spa_audio_info info = { 0 };
|
||||||
|
|
@ -1784,7 +1790,29 @@ static int port_set_format(struct client *c, struct port *p,
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
p->params[IDX_Format] = SPA_PARAM_INFO(SPA_PARAM_Format, SPA_PARAM_INFO_READWRITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pw_log_info("port %s: update", p->object->port.name);
|
||||||
|
|
||||||
|
p->info.change_mask |= SPA_PORT_CHANGE_MASK_PARAMS;
|
||||||
|
|
||||||
|
param_enum_format(c, p, ¶ms[0], &b);
|
||||||
|
param_format(c, p, ¶ms[1], &b);
|
||||||
|
param_buffers(c, p, ¶ms[2], &b);
|
||||||
|
param_io(c, p, ¶ms[3], &b);
|
||||||
|
param_latency(c, p, ¶ms[4], &b);
|
||||||
|
param_latency_other(c, p, ¶ms[5], &b);
|
||||||
|
|
||||||
|
pw_client_node_port_update(c->node,
|
||||||
|
p->direction,
|
||||||
|
p->id,
|
||||||
|
PW_CLIENT_NODE_PORT_UPDATE_PARAMS |
|
||||||
|
PW_CLIENT_NODE_PORT_UPDATE_INFO,
|
||||||
|
SPA_N_ELEMENTS(params),
|
||||||
|
(const struct spa_pod **) params,
|
||||||
|
&p->info);
|
||||||
|
p->info.change_mask = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1816,7 +1844,7 @@ static void port_update_latency(struct port *p)
|
||||||
SPA_N_ELEMENTS(params),
|
SPA_N_ELEMENTS(params),
|
||||||
(const struct spa_pod **) params,
|
(const struct spa_pod **) params,
|
||||||
&p->info);
|
&p->info);
|
||||||
c->info.change_mask = 0;
|
p->info.change_mask = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called from thread-loop */
|
/* called from thread-loop */
|
||||||
|
|
@ -1916,9 +1944,6 @@ static int client_node_port_set_param(void *object,
|
||||||
{
|
{
|
||||||
struct client *c = (struct client *) object;
|
struct client *c = (struct client *) object;
|
||||||
struct port *p = GET_PORT(c, direction, port_id);
|
struct port *p = GET_PORT(c, direction, port_id);
|
||||||
struct spa_pod *params[6];
|
|
||||||
uint8_t buffer[4096];
|
|
||||||
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
|
|
||||||
|
|
||||||
if (p == NULL || !p->valid)
|
if (p == NULL || !p->valid)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
@ -1929,28 +1954,14 @@ static int client_node_port_set_param(void *object,
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case SPA_PARAM_Format:
|
case SPA_PARAM_Format:
|
||||||
port_set_format(c, p, flags, param);
|
return port_set_format(c, p, flags, param);
|
||||||
break;
|
break;
|
||||||
case SPA_PARAM_Latency:
|
case SPA_PARAM_Latency:
|
||||||
return port_set_latency(c, p, flags, param);
|
return port_set_latency(c, p, flags, param);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
param_enum_format(c, p, ¶ms[0], &b);
|
|
||||||
param_format(c, p, ¶ms[1], &b);
|
|
||||||
param_buffers(c, p, ¶ms[2], &b);
|
|
||||||
param_io(c, p, ¶ms[3], &b);
|
|
||||||
param_latency(c, p, ¶ms[4], &b);
|
|
||||||
param_latency_other(c, p, ¶ms[5], &b);
|
|
||||||
|
|
||||||
return pw_client_node_port_update(c->node,
|
|
||||||
direction,
|
|
||||||
port_id,
|
|
||||||
PW_CLIENT_NODE_PORT_UPDATE_PARAMS,
|
|
||||||
SPA_N_ELEMENTS(params),
|
|
||||||
(const struct spa_pod **) params,
|
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void *init_buffer(struct port *p)
|
static inline void *init_buffer(struct port *p)
|
||||||
|
|
@ -3075,6 +3086,7 @@ jack_client_t * jack_client_open (const char *client_name,
|
||||||
pw_client_node_update(client->node,
|
pw_client_node_update(client->node,
|
||||||
PW_CLIENT_NODE_UPDATE_INFO,
|
PW_CLIENT_NODE_UPDATE_INFO,
|
||||||
0, NULL, &client->info);
|
0, NULL, &client->info);
|
||||||
|
client->info.change_mask = 0;
|
||||||
|
|
||||||
if (status)
|
if (status)
|
||||||
*status = 0;
|
*status = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue