mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-06 13:30:01 -05:00
impl-port: only send latency param when supported
Check if the port has latency param and only try to set the latency param when it appears available. This avoids sending unknown latency params to an old client and erroring out.
This commit is contained in:
parent
98353560da
commit
c803444123
2 changed files with 9 additions and 3 deletions
|
|
@ -375,6 +375,8 @@ static int process_latency_param(void *data, int seq,
|
||||||
this->latency[latency.direction] = latency;
|
this->latency[latency.direction] = latency;
|
||||||
if (latency.direction == this->direction)
|
if (latency.direction == this->direction)
|
||||||
pw_impl_port_emit_latency_changed(this);
|
pw_impl_port_emit_latency_changed(this);
|
||||||
|
|
||||||
|
this->have_latency_param = true;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1292,7 +1294,7 @@ int pw_impl_port_for_each_link(struct pw_impl_port *port,
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void port_set_latency(struct pw_impl_port *port, struct spa_latency_info *latency)
|
static int port_set_latency(struct pw_impl_port *port, struct spa_latency_info *latency)
|
||||||
{
|
{
|
||||||
struct spa_latency_info *current;
|
struct spa_latency_info *current;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
|
|
@ -1302,7 +1304,7 @@ static void port_set_latency(struct pw_impl_port *port, struct spa_latency_info
|
||||||
current = &port->latency[latency->direction];
|
current = &port->latency[latency->direction];
|
||||||
|
|
||||||
if (spa_latency_info_compare(current, latency) == 0)
|
if (spa_latency_info_compare(current, latency) == 0)
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
*current = *latency;
|
*current = *latency;
|
||||||
|
|
||||||
|
|
@ -1312,9 +1314,12 @@ static void port_set_latency(struct pw_impl_port *port, struct spa_latency_info
|
||||||
latency->min_rate, latency->max_rate,
|
latency->min_rate, latency->max_rate,
|
||||||
latency->min_ns, latency->max_ns);
|
latency->min_ns, latency->max_ns);
|
||||||
|
|
||||||
|
if (!port->have_latency_param)
|
||||||
|
return 0;
|
||||||
|
|
||||||
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
spa_pod_builder_init(&b, buffer, sizeof(buffer));
|
||||||
param = spa_latency_build(&b, SPA_PARAM_Latency, latency);
|
param = spa_latency_build(&b, SPA_PARAM_Latency, latency);
|
||||||
pw_impl_port_set_param(port, SPA_PARAM_Latency, 0, param);
|
return pw_impl_port_set_param(port, SPA_PARAM_Latency, 0, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
int pw_impl_port_recalc_latency(struct pw_impl_port *port)
|
int pw_impl_port_recalc_latency(struct pw_impl_port *port)
|
||||||
|
|
|
||||||
|
|
@ -793,6 +793,7 @@ struct pw_impl_port {
|
||||||
unsigned int added:1;
|
unsigned int added:1;
|
||||||
|
|
||||||
struct spa_latency_info latency[2]; /**< latencies */
|
struct spa_latency_info latency[2]; /**< latencies */
|
||||||
|
unsigned int have_latency_param:1;
|
||||||
|
|
||||||
void *owner_data; /**< extra owner data */
|
void *owner_data; /**< extra owner data */
|
||||||
void *user_data; /**< extra user data */
|
void *user_data; /**< extra user data */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue