diff --git a/src/pipewire/impl-port.c b/src/pipewire/impl-port.c index f1de2c25f..e0d6fc7f5 100644 --- a/src/pipewire/impl-port.c +++ b/src/pipewire/impl-port.c @@ -365,6 +365,8 @@ static int process_latency_param(void *data, int seq, return 0; if (latency.direction != this->direction) return 0; + if (spa_latency_info_compare(&this->latency[this->direction], &latency) == 0) + return 0; pw_log_info("port %p: got %s latency %f-%f %d-%d %"PRIu64"-%"PRIu64, this, pw_direction_as_string(this->direction), @@ -373,6 +375,7 @@ static int process_latency_param(void *data, int seq, latency.min_ns, latency.max_ns); this->latency[this->direction] = latency; + pw_impl_port_emit_latency_changed(this); return 0; } @@ -380,8 +383,8 @@ static void update_info(struct pw_impl_port *port, const struct spa_port_info *i { uint32_t changed_ids[MAX_PARAMS], n_changed_ids = 0; - pw_log_debug(NAME" %p: flags:%08"PRIx64" change_mask:%08"PRIx64, - port, info->flags, info->change_mask); + pw_log_debug(NAME" %p: %p flags:%08"PRIx64" change_mask:%08"PRIx64, + port, info, info->flags, info->change_mask); if (info->change_mask & SPA_PORT_CHANGE_MASK_FLAGS) { port->spa_flags = info->flags; @@ -426,7 +429,6 @@ static void update_info(struct pw_impl_port *port, const struct spa_port_info *i default: break; } - } } diff --git a/src/pipewire/impl-port.h b/src/pipewire/impl-port.h index d82b83c94..2ff16cb53 100644 --- a/src/pipewire/impl-port.h +++ b/src/pipewire/impl-port.h @@ -56,7 +56,7 @@ enum pw_impl_port_state { /** Port events, use \ref pw_impl_port_add_listener */ struct pw_impl_port_events { -#define PW_VERSION_IMPL_PORT_EVENTS 1 +#define PW_VERSION_IMPL_PORT_EVENTS 2 uint32_t version; /** The port is destroyed */ @@ -89,6 +89,9 @@ struct pw_impl_port_events { /** a parameter changed, since version 1 */ void (*param_changed) (void *data, uint32_t id); + + /** latency changed. Since version 2 */ + void (*latency_changed) (void *data); }; /** Create a new port diff --git a/src/pipewire/private.h b/src/pipewire/private.h index 9513c4c9a..a5fde1168 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -731,6 +731,7 @@ struct pw_impl_port_implementation { #define pw_impl_port_emit_control_added(p,c) pw_impl_port_emit(p, control_added, 0, c) #define pw_impl_port_emit_control_removed(p,c) pw_impl_port_emit(p, control_removed, 0, c) #define pw_impl_port_emit_param_changed(p,i) pw_impl_port_emit(p, param_changed, 1, i) +#define pw_impl_port_emit_latency_changed(p) pw_impl_port_emit(p, latency_changed, 2) #define PW_IMPL_PORT_IS_CONTROL(port) SPA_FLAG_MASK(port->flags, \ PW_IMPL_PORT_FLAG_BUFFERS|PW_IMPL_PORT_FLAG_CONTROL,\