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:
Wim Taymans 2021-05-31 11:31:18 +02:00
parent 98353560da
commit c803444123
2 changed files with 9 additions and 3 deletions

View file

@ -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)

View file

@ -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 */