From b094057b0b3502e1c25d3e429968d3bb8d919286 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 13 Sep 2023 11:13:48 +0200 Subject: [PATCH] handle NULL latency param Fixes #3504 --- pipewire-jack/src/pipewire-jack.c | 1 - spa/plugins/alsa/alsa-seq-bridge.c | 4 +++- spa/plugins/avb/avb-pcm-sink.c | 4 +++- spa/plugins/avb/avb-pcm-source.c | 4 +++- spa/plugins/v4l2/v4l2-source.c | 4 +++- src/modules/module-combine-stream.c | 2 +- src/modules/module-echo-cancel.c | 4 ++-- src/modules/module-example-filter.c | 2 +- src/modules/module-ffado-driver.c | 2 +- src/modules/module-jack-tunnel.c | 2 +- src/modules/module-netjack2-driver.c | 2 +- src/modules/module-netjack2-manager.c | 2 +- 12 files changed, 20 insertions(+), 13 deletions(-) diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c index 5b421b54b..aefb5fba9 100644 --- a/pipewire-jack/src/pipewire-jack.c +++ b/pipewire-jack/src/pipewire-jack.c @@ -2442,7 +2442,6 @@ static int port_set_latency(struct client *c, struct port *p, if (param == NULL) return 0; - if ((res = spa_latency_parse(param, &info)) < 0) return res; diff --git a/spa/plugins/alsa/alsa-seq-bridge.c b/spa/plugins/alsa/alsa-seq-bridge.c index a3df05c47..2ece0c4b7 100644 --- a/spa/plugins/alsa/alsa-seq-bridge.c +++ b/spa/plugins/alsa/alsa-seq-bridge.c @@ -691,7 +691,9 @@ impl_node_port_set_param(void *object, case SPA_PARAM_Latency: { struct spa_latency_info info; - if ((res = spa_latency_parse(param, &info)) < 0) + if (param == NULL) + info = SPA_LATENCY_INFO(SPA_DIRECTION_REVERSE(direction)); + else if ((res = spa_latency_parse(param, &info)) < 0) return res; if (direction == info.direction) return -EINVAL; diff --git a/spa/plugins/avb/avb-pcm-sink.c b/spa/plugins/avb/avb-pcm-sink.c index 050f46d87..2c77483e3 100644 --- a/spa/plugins/avb/avb-pcm-sink.c +++ b/spa/plugins/avb/avb-pcm-sink.c @@ -572,7 +572,9 @@ impl_node_port_set_param(void *object, case SPA_PARAM_Latency: { struct spa_latency_info info; - if ((res = spa_latency_parse(param, &info)) < 0) + if (param == NULL) + info = SPA_LATENCY_INFO(SPA_DIRECTION_REVERSE(direction)); + else if ((res = spa_latency_parse(param, &info)) < 0) return res; if (direction == info.direction) return -EINVAL; diff --git a/spa/plugins/avb/avb-pcm-source.c b/spa/plugins/avb/avb-pcm-source.c index 077f00b82..1fa48dfdb 100644 --- a/spa/plugins/avb/avb-pcm-source.c +++ b/spa/plugins/avb/avb-pcm-source.c @@ -572,7 +572,9 @@ impl_node_port_set_param(void *object, case SPA_PARAM_Latency: { struct spa_latency_info info; - if ((res = spa_latency_parse(param, &info)) < 0) + if (param == NULL) + info = SPA_LATENCY_INFO(SPA_DIRECTION_REVERSE(direction)); + else if ((res = spa_latency_parse(param, &info)) < 0) return res; if (direction == info.direction) return -EINVAL; diff --git a/spa/plugins/v4l2/v4l2-source.c b/spa/plugins/v4l2/v4l2-source.c index b8d3def25..413670eac 100644 --- a/spa/plugins/v4l2/v4l2-source.c +++ b/spa/plugins/v4l2/v4l2-source.c @@ -729,7 +729,9 @@ static int impl_node_port_set_param(void *object, case SPA_PARAM_Latency: { struct spa_latency_info info; - if ((res = spa_latency_parse(param, &info)) < 0) + if (param == NULL) + info = SPA_LATENCY_INFO(SPA_DIRECTION_REVERSE(direction)); + else if ((res = spa_latency_parse(param, &info)) < 0) return res; if (direction == info.direction) return -EINVAL; diff --git a/src/modules/module-combine-stream.c b/src/modules/module-combine-stream.c index d06b2aa88..86fe3b303 100644 --- a/src/modules/module-combine-stream.c +++ b/src/modules/module-combine-stream.c @@ -697,7 +697,7 @@ static void stream_param_changed(void *d, uint32_t id, const struct spa_pod *par update_delay(s->impl); break; case SPA_PARAM_Latency: - if (!param) { + if (param == NULL) { s->have_latency = false; } else if (spa_latency_parse(param, &latency) == 0 && latency.direction == get_combine_direction(s->impl)) { diff --git a/src/modules/module-echo-cancel.c b/src/modules/module-echo-cancel.c index 018de3cfc..ae3934658 100644 --- a/src/modules/module-echo-cancel.c +++ b/src/modules/module-echo-cancel.c @@ -604,7 +604,7 @@ static void input_param_latency_changed(struct impl *impl, const struct spa_pod struct spa_pod_builder b; const struct spa_pod *params[1]; - if (spa_latency_parse(param, &latency) < 0) + if (param == NULL || spa_latency_parse(param, &latency) < 0) return; spa_pod_builder_init(&b, buffer, sizeof(buffer)); @@ -767,7 +767,7 @@ static void output_param_latency_changed(struct impl *impl, const struct spa_pod struct spa_pod_builder b; const struct spa_pod *params[1]; - if (spa_latency_parse(param, &latency) < 0) + if (param == NULL || spa_latency_parse(param, &latency) < 0) return; spa_pod_builder_init(&b, buffer, sizeof(buffer)); diff --git a/src/modules/module-example-filter.c b/src/modules/module-example-filter.c index 53861b0d3..fa8eb5444 100644 --- a/src/modules/module-example-filter.c +++ b/src/modules/module-example-filter.c @@ -227,7 +227,7 @@ static void param_latency_changed(struct impl *impl, const struct spa_pod *param struct spa_pod_builder b; const struct spa_pod *params[1]; - if (spa_latency_parse(param, &latency) < 0) + if (param == NULL || spa_latency_parse(param, &latency) < 0) return; *info = latency; diff --git a/src/modules/module-ffado-driver.c b/src/modules/module-ffado-driver.c index 56f2577c6..2cee46c36 100644 --- a/src/modules/module-ffado-driver.c +++ b/src/modules/module-ffado-driver.c @@ -417,7 +417,7 @@ static void param_latency_changed(struct stream *s, const struct spa_pod *param, bool update = false; enum spa_direction direction = port->direction; - if (spa_latency_parse(param, &latency) < 0) + if (param == NULL || spa_latency_parse(param, &latency) < 0) return; if (spa_latency_info_compare(&port->latency[direction], &latency)) { diff --git a/src/modules/module-jack-tunnel.c b/src/modules/module-jack-tunnel.c index 51a331330..7eff91448 100644 --- a/src/modules/module-jack-tunnel.c +++ b/src/modules/module-jack-tunnel.c @@ -410,7 +410,7 @@ static void param_latency_changed(struct stream *s, const struct spa_pod *param, bool update = false; enum spa_direction direction = port->direction; - if (spa_latency_parse(param, &latency) < 0) + if (param == NULL || spa_latency_parse(param, &latency) < 0) return; if (spa_latency_info_compare(&port->latency[direction], &latency)) { diff --git a/src/modules/module-netjack2-driver.c b/src/modules/module-netjack2-driver.c index 3547c9967..1a8cb79aa 100644 --- a/src/modules/module-netjack2-driver.c +++ b/src/modules/module-netjack2-driver.c @@ -371,7 +371,7 @@ static void param_latency_changed(struct stream *s, const struct spa_pod *param, bool update = false; enum spa_direction direction = port->direction; - if (spa_latency_parse(param, &latency) < 0) + if (param == NULL || spa_latency_parse(param, &latency) < 0) return; if (spa_latency_info_compare(&port->latency[direction], &latency)) { diff --git a/src/modules/module-netjack2-manager.c b/src/modules/module-netjack2-manager.c index 97b693e2d..233c13fc3 100644 --- a/src/modules/module-netjack2-manager.c +++ b/src/modules/module-netjack2-manager.c @@ -493,7 +493,7 @@ static void param_latency_changed(struct stream *s, const struct spa_pod *param, bool update = false; enum spa_direction direction = port->direction; - if (spa_latency_parse(param, &latency) < 0) + if (param == NULL || spa_latency_parse(param, &latency) < 0) return; if (spa_latency_info_compare(&port->latency[direction], &latency)) {