Accepting request 1058207 from home:alarrosa:branches:multimedia:libs
OBS-URL: https://build.opensuse.org/request/show/1058207 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/pipewire?expand=0&rev=104
This commit is contained in:
parent
95609343fc
commit
38407cb16a
@ -1,29 +0,0 @@
|
||||
From 89ac6b353521fb9a6d6eb6bb74724c4fa968f75c Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Sat, 17 Dec 2022 18:17:33 +0100
|
||||
Subject: [PATCH] =?UTF-8?q?alsa:=20don=C2=B4t=20set=20-1=20as=20node.targe?=
|
||||
=?UTF-8?q?t?=
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Leave the target unset when -1, just like what pw-stream does.
|
||||
|
||||
See #2893
|
||||
---
|
||||
pipewire-alsa/alsa-plugins/pcm_pipewire.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pipewire-alsa/alsa-plugins/pcm_pipewire.c b/pipewire-alsa/alsa-plugins/pcm_pipewire.c
|
||||
index 37a907b24..96b57da78 100644
|
||||
--- a/pipewire-alsa/alsa-plugins/pcm_pipewire.c
|
||||
+++ b/pipewire-alsa/alsa-plugins/pcm_pipewire.c
|
||||
@@ -579,7 +579,7 @@ static int snd_pcm_pipewire_prepare(snd_pcm_ioplug_t *io)
|
||||
pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%lu/%u", pw->min_avail, io->rate);
|
||||
if (pw_properties_get(props, PW_KEY_NODE_RATE) == NULL)
|
||||
pw_properties_setf(props, PW_KEY_NODE_RATE, "1/%u", io->rate);
|
||||
- if (pw->target != NULL &&
|
||||
+ if (pw->target != NULL && !spa_streq(pw->target, "-1") &&
|
||||
pw_properties_get(props, PW_KEY_NODE_TARGET) == NULL)
|
||||
pw_properties_setf(props, PW_KEY_NODE_TARGET, "%s", pw->target);
|
||||
|
@ -1,24 +0,0 @@
|
||||
From ed463248721cc03c826f80dac9667b238c844e03 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= <thomas@t-8ch.de>
|
||||
Date: Sun, 1 Jan 2023 02:00:36 +0000
|
||||
Subject: [PATCH] alsa: fix memory leak of properties
|
||||
|
||||
---
|
||||
pipewire-alsa/alsa-plugins/ctl_pipewire.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/pipewire-alsa/alsa-plugins/ctl_pipewire.c b/pipewire-alsa/alsa-plugins/ctl_pipewire.c
|
||||
index 71f02f90e..67bd2f432 100644
|
||||
--- a/pipewire-alsa/alsa-plugins/ctl_pipewire.c
|
||||
+++ b/pipewire-alsa/alsa-plugins/ctl_pipewire.c
|
||||
@@ -1083,6 +1083,7 @@ static void proxy_destroy(void *data)
|
||||
struct global *g = data;
|
||||
spa_list_remove(&g->link);
|
||||
g->proxy = NULL;
|
||||
+ pw_properties_free(g->props);
|
||||
}
|
||||
|
||||
static const struct pw_proxy_events proxy_events = {
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,156 +0,0 @@
|
||||
From 9f3237b74edc3df467cca50af7c09f1e3c89abea Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Mon, 9 Jan 2023 17:54:23 +0100
|
||||
Subject: [PATCH] context: keep per node quantum and rate settings
|
||||
|
||||
Copy the global quantum and rate limits before applying node specific
|
||||
settings. Otherwise one node settings will propagate to the defaults
|
||||
of the next nodes, which can result in impossible or wrong settings.
|
||||
|
||||
See #2925
|
||||
---
|
||||
src/pipewire/context.c | 57 ++++++++++++++++++++++++++----------------
|
||||
1 file changed, 36 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/src/pipewire/context.c b/src/pipewire/context.c
|
||||
index ab798c20e..384682701 100644
|
||||
--- a/src/pipewire/context.c
|
||||
+++ b/src/pipewire/context.c
|
||||
@@ -917,7 +917,7 @@ static inline void get_quantums(struct pw_context *context, uint32_t *def,
|
||||
*limit = s->clock_quantum_limit;
|
||||
}
|
||||
|
||||
-static inline uint32_t *get_rates(struct pw_context *context, uint32_t *def, uint32_t *n_rates,
|
||||
+static inline const uint32_t *get_rates(struct pw_context *context, uint32_t *def, uint32_t *n_rates,
|
||||
bool *force)
|
||||
{
|
||||
struct settings *s = &context->settings;
|
||||
@@ -971,7 +971,7 @@ static int fraction_compare(const struct spa_fraction *a, const struct spa_fract
|
||||
return fa < fb ? -1 : (fa > fb ? 1 : 0);
|
||||
}
|
||||
|
||||
-static uint32_t find_best_rate(uint32_t *rates, uint32_t n_rates, uint32_t rate, uint32_t best)
|
||||
+static uint32_t find_best_rate(const uint32_t *rates, uint32_t n_rates, uint32_t rate, uint32_t best)
|
||||
{
|
||||
uint32_t i;
|
||||
for (i = 0; i < n_rates; i++) {
|
||||
@@ -1005,9 +1005,10 @@ int pw_context_recalc_graph(struct pw_context *context, const char *reason)
|
||||
struct impl *impl = SPA_CONTAINER_OF(context, struct impl, this);
|
||||
struct settings *settings = &context->settings;
|
||||
struct pw_impl_node *n, *s, *target, *fallback;
|
||||
+ const uint32_t *rates;
|
||||
uint32_t max_quantum, min_quantum, def_quantum, lim_quantum, rate_quantum;
|
||||
- uint32_t *rates, n_rates, def_rate;
|
||||
- bool freewheel = false, global_force_rate, force_rate, force_quantum, global_force_quantum;
|
||||
+ uint32_t n_rates, def_rate;
|
||||
+ bool freewheel = false, global_force_rate, global_force_quantum;
|
||||
struct spa_list collect;
|
||||
|
||||
pw_log_info("%p: busy:%d reason:%s", context, impl->recalc, reason);
|
||||
@@ -1023,8 +1024,7 @@ again:
|
||||
get_quantums(context, &def_quantum, &min_quantum, &max_quantum, &lim_quantum, &rate_quantum);
|
||||
rates = get_rates(context, &def_rate, &n_rates, &global_force_rate);
|
||||
|
||||
- force_quantum = global_force_quantum = rate_quantum == 0;
|
||||
- force_rate = global_force_rate;
|
||||
+ global_force_quantum = rate_quantum == 0;
|
||||
|
||||
/* start from all drivers and group all nodes that are linked
|
||||
* to it. Some nodes are not (yet) linked to anything and they
|
||||
@@ -1121,10 +1121,25 @@ again:
|
||||
struct spa_fraction rate = SPA_FRACTION(0, 0);
|
||||
uint32_t quantum, target_rate, current_rate;
|
||||
uint64_t quantum_stamp = 0, rate_stamp = 0;
|
||||
+ bool force_rate, force_quantum;
|
||||
+ const uint32_t *node_rates;
|
||||
+ uint32_t node_n_rates, node_def_rate;
|
||||
+ uint32_t node_max_quantum, node_min_quantum, node_def_quantum, node_rate_quantum;
|
||||
|
||||
if (!n->driving || n->exported)
|
||||
continue;
|
||||
|
||||
+ node_def_quantum = def_quantum;
|
||||
+ node_min_quantum = min_quantum;
|
||||
+ node_max_quantum = max_quantum;
|
||||
+ node_rate_quantum = rate_quantum;
|
||||
+ force_quantum = global_force_quantum;
|
||||
+
|
||||
+ node_def_rate = def_rate;
|
||||
+ node_n_rates = n_rates;
|
||||
+ node_rates = rates;
|
||||
+ force_rate = global_force_rate;
|
||||
+
|
||||
/* collect quantum and rate */
|
||||
spa_list_for_each(s, &n->follower_list, follower_link) {
|
||||
|
||||
@@ -1138,17 +1153,17 @@ again:
|
||||
}
|
||||
if (!global_force_quantum && s->force_quantum > 0 &&
|
||||
s->stamp > quantum_stamp) {
|
||||
- def_quantum = min_quantum = max_quantum = s->force_quantum;
|
||||
- rate_quantum = 0;
|
||||
+ node_def_quantum = node_min_quantum = node_max_quantum = s->force_quantum;
|
||||
+ node_rate_quantum = 0;
|
||||
quantum_stamp = s->stamp;
|
||||
force_quantum = true;
|
||||
}
|
||||
if (!global_force_rate && s->force_rate > 0 &&
|
||||
s->stamp > rate_stamp) {
|
||||
- def_rate = s->force_rate;
|
||||
+ node_def_rate = s->force_rate;
|
||||
+ node_n_rates = 1;
|
||||
+ node_rates = &s->force_rate;
|
||||
force_rate = true;
|
||||
- n_rates = 1;
|
||||
- rates = &s->force_rate;
|
||||
rate_stamp = s->stamp;
|
||||
}
|
||||
|
||||
@@ -1198,9 +1213,9 @@ again:
|
||||
/* Here we are allowed to change the rate of the driver.
|
||||
* Start with the default rate. If the desired rate is
|
||||
* allowed, switch to it */
|
||||
- target_rate = def_rate;
|
||||
+ target_rate = node_def_rate;
|
||||
if (rate.denom != 0 && rate.num == 1)
|
||||
- target_rate = find_best_rate(rates, n_rates,
|
||||
+ target_rate = find_best_rate(node_rates, node_n_rates,
|
||||
rate.denom, target_rate);
|
||||
}
|
||||
|
||||
@@ -1233,24 +1248,24 @@ again:
|
||||
goto again;
|
||||
}
|
||||
|
||||
- if (rate_quantum != 0 && current_rate != rate_quantum) {
|
||||
+ if (node_rate_quantum != 0 && current_rate != node_rate_quantum) {
|
||||
/* the quantum values are scaled with the current rate */
|
||||
- def_quantum = def_quantum * current_rate / rate_quantum;
|
||||
- min_quantum = min_quantum * current_rate / rate_quantum;
|
||||
- max_quantum = max_quantum * current_rate / rate_quantum;
|
||||
+ node_def_quantum = node_def_quantum * current_rate / node_rate_quantum;
|
||||
+ node_min_quantum = node_min_quantum * current_rate / node_rate_quantum;
|
||||
+ node_max_quantum = node_max_quantum * current_rate / node_rate_quantum;
|
||||
}
|
||||
|
||||
/* calculate desired quantum */
|
||||
if (max_latency.denom != 0) {
|
||||
uint32_t tmp = (max_latency.num * current_rate / max_latency.denom);
|
||||
- if (tmp < max_quantum)
|
||||
- max_quantum = tmp;
|
||||
+ if (tmp < node_max_quantum)
|
||||
+ node_max_quantum = tmp;
|
||||
}
|
||||
|
||||
- quantum = def_quantum;
|
||||
+ quantum = node_def_quantum;
|
||||
if (latency.denom != 0)
|
||||
quantum = (latency.num * current_rate / latency.denom);
|
||||
- quantum = SPA_CLAMP(quantum, min_quantum, max_quantum);
|
||||
+ quantum = SPA_CLAMP(quantum, node_min_quantum, node_max_quantum);
|
||||
quantum = SPA_MIN(quantum, lim_quantum);
|
||||
|
||||
if (settings->clock_power_of_two_quantum)
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,64 +0,0 @@
|
||||
From 07633f2146e2aa66fad8edb2b3e8495d813a0834 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Mon, 9 Jan 2023 11:06:37 +0100
|
||||
Subject: [PATCH] context: rename a method
|
||||
|
||||
Rename suspend_driver -> reconfigure_driver because that is more like
|
||||
what it does.
|
||||
---
|
||||
src/pipewire/context.c | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/pipewire/context.c b/src/pipewire/context.c
|
||||
index 39f224a60..2301d34ad 100644
|
||||
--- a/src/pipewire/context.c
|
||||
+++ b/src/pipewire/context.c
|
||||
@@ -933,7 +933,7 @@ static inline uint32_t *get_rates(struct pw_context *context, uint32_t *def, uin
|
||||
return s->clock_rates;
|
||||
}
|
||||
}
|
||||
-static void suspend_driver(struct pw_context *context, struct pw_impl_node *n)
|
||||
+static void reconfigure_driver(struct pw_context *context, struct pw_impl_node *n)
|
||||
{
|
||||
struct pw_impl_node *s;
|
||||
|
||||
@@ -1199,7 +1199,7 @@ again:
|
||||
}
|
||||
|
||||
if (target_rate != current_rate) {
|
||||
- bool do_suspend = false;
|
||||
+ bool do_reconfigure = false;
|
||||
/* we doing a rate switch */
|
||||
pw_log_info("(%s-%u) state:%s new rate:%u->%u",
|
||||
n->name, n->info.id,
|
||||
@@ -1209,13 +1209,13 @@ again:
|
||||
|
||||
if (force_rate) {
|
||||
if (settings->clock_rate_update_mode == CLOCK_RATE_UPDATE_MODE_HARD)
|
||||
- do_suspend = true;
|
||||
+ do_reconfigure = true;
|
||||
} else {
|
||||
if (n->info.state >= PW_NODE_STATE_SUSPENDED)
|
||||
- do_suspend = true;
|
||||
+ do_reconfigure = true;
|
||||
}
|
||||
- if (do_suspend)
|
||||
- suspend_driver(context, n);
|
||||
+ if (do_reconfigure)
|
||||
+ reconfigure_driver(context, n);
|
||||
#
|
||||
/* we're setting the pending rate. This will become the new
|
||||
* current rate in the next iteration of the graph. */
|
||||
n->current_rate = SPA_FRACTION(1, target_rate);
|
||||
@@ -1223,7 +1223,7 @@ again:
|
||||
n->current_pending = true;
|
||||
current_rate = target_rate;
|
||||
/* we might be suspended now and the links need to be prepared again */
|
||||
- if (do_suspend)
|
||||
+ if (do_reconfigure)
|
||||
goto again;
|
||||
}
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,731 +0,0 @@
|
||||
From 97aafe223493dc001161de44ed26dcf1533eb89d Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Tue, 10 Jan 2023 12:30:25 +0100
|
||||
Subject: [PATCH] fix use_buffers checks
|
||||
|
||||
We can set 0 buffers even if there is no format.
|
||||
Return -ENOSPC when too many buffers are set.
|
||||
---
|
||||
pipewire-jack/src/pipewire-jack.c | 2 +-
|
||||
spa/plugins/alsa/alsa-pcm-sink.c | 14 ++++++++------
|
||||
spa/plugins/alsa/alsa-pcm-source.c | 8 +++++---
|
||||
spa/plugins/alsa/alsa-seq-bridge.c | 8 +++++---
|
||||
spa/plugins/audioconvert/audioconvert.c | 7 +++++--
|
||||
spa/plugins/audiomixer/audiomixer.c | 7 +++++--
|
||||
spa/plugins/audiomixer/mixer-dsp.c | 7 +++++--
|
||||
spa/plugins/audiotestsrc/audiotestsrc.c | 8 +++++---
|
||||
spa/plugins/avb/avb-pcm-sink.c | 10 +++++-----
|
||||
spa/plugins/avb/avb-pcm-source.c | 10 +++++-----
|
||||
spa/plugins/bluez5/media-sink.c | 8 +++++---
|
||||
spa/plugins/bluez5/media-source.c | 8 +++++---
|
||||
spa/plugins/bluez5/sco-sink.c | 8 +++++---
|
||||
spa/plugins/bluez5/sco-source.c | 8 +++++---
|
||||
spa/plugins/control/mixer.c | 7 +++++--
|
||||
spa/plugins/jack/jack-sink.c | 8 +++++---
|
||||
spa/plugins/jack/jack-source.c | 8 +++++---
|
||||
spa/plugins/libcamera/libcamera-source.cpp | 7 ++++---
|
||||
spa/plugins/support/null-audio-sink.c | 8 +++++---
|
||||
spa/plugins/test/fakesink.c | 8 +++++---
|
||||
spa/plugins/test/fakesrc.c | 8 +++++---
|
||||
spa/plugins/v4l2/v4l2-source.c | 7 ++++---
|
||||
spa/plugins/videotestsrc/videotestsrc.c | 8 +++++---
|
||||
spa/plugins/volume/volume.c | 8 +++++---
|
||||
spa/plugins/vulkan/vulkan-compute-filter.c | 8 +++++---
|
||||
spa/plugins/vulkan/vulkan-compute-source.c | 8 +++++---
|
||||
src/examples/export-source.c | 6 +++++-
|
||||
src/examples/local-v4l2.c | 6 +++++-
|
||||
src/modules/module-client-node/client-node.c | 1 -
|
||||
src/pipewire/filter.c | 9 ++++++---
|
||||
src/pipewire/stream.c | 6 +++---
|
||||
31 files changed, 146 insertions(+), 88 deletions(-)
|
||||
|
||||
diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c
|
||||
index ab837f603..b8e84915d 100644
|
||||
--- a/pipewire-jack/src/pipewire-jack.c
|
||||
+++ b/pipewire-jack/src/pipewire-jack.c
|
||||
@@ -2219,7 +2219,7 @@ static int client_node_port_use_buffers(void *data,
|
||||
|
||||
if (n_buffers > MAX_BUFFERS) {
|
||||
pw_log_error("%p: too many buffers %u > %u", c, n_buffers, MAX_BUFFERS);
|
||||
- return -EINVAL;
|
||||
+ return -ENOSPC;
|
||||
}
|
||||
|
||||
if (p->object->port.type_id == TYPE_ID_VIDEO && direction == SPA_DIRECTION_INPUT) {
|
||||
diff --git a/spa/plugins/alsa/alsa-pcm-sink.c b/spa/plugins/alsa/alsa-pcm-sink.c
|
||||
index 73c421eec..260550305 100644
|
||||
--- a/spa/plugins/alsa/alsa-pcm-sink.c
|
||||
+++ b/spa/plugins/alsa/alsa-pcm-sink.c
|
||||
@@ -731,6 +731,7 @@ impl_node_port_use_buffers(void *object,
|
||||
{
|
||||
struct state *this = object;
|
||||
uint32_t i;
|
||||
+ int res;
|
||||
|
||||
spa_return_val_if_fail(this != NULL, -EINVAL);
|
||||
|
||||
@@ -738,14 +739,15 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
spa_log_debug(this->log, "%p: use %d buffers", this, n_buffers);
|
||||
|
||||
- if (!this->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
- if (n_buffers == 0) {
|
||||
+ if (this->n_buffers > 0) {
|
||||
spa_alsa_pause(this);
|
||||
- clear_buffers(this);
|
||||
- return 0;
|
||||
+ if ((res = clear_buffers(this)) < 0)
|
||||
+ return res;
|
||||
}
|
||||
+ if (n_buffers > 0 && !this->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &this->buffers[i];
|
||||
diff --git a/spa/plugins/alsa/alsa-pcm-source.c b/spa/plugins/alsa/alsa-pcm-source.c
|
||||
index 7f72d53ab..f079bf6f4 100644
|
||||
--- a/spa/plugins/alsa/alsa-pcm-source.c
|
||||
+++ b/spa/plugins/alsa/alsa-pcm-source.c
|
||||
@@ -673,9 +673,6 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||
|
||||
- if (!this->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
spa_log_debug(this->log, "%p: use %d buffers", this, n_buffers);
|
||||
|
||||
if (this->n_buffers > 0) {
|
||||
@@ -683,6 +680,11 @@ impl_node_port_use_buffers(void *object,
|
||||
if ((res = clear_buffers(this)) < 0)
|
||||
return res;
|
||||
}
|
||||
+ if (n_buffers > 0 && !this->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &this->buffers[i];
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/alsa/alsa-seq-bridge.c b/spa/plugins/alsa/alsa-seq-bridge.c
|
||||
index 4ec8e3c6e..ee50163c4 100644
|
||||
--- a/spa/plugins/alsa/alsa-seq-bridge.c
|
||||
+++ b/spa/plugins/alsa/alsa-seq-bridge.c
|
||||
@@ -748,11 +748,13 @@ impl_node_port_use_buffers(void *object,
|
||||
spa_log_debug(this->log, "%p: port %d.%d buffers:%d format:%d", this,
|
||||
direction, port_id, n_buffers, port->have_format);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &port->buffers[i];
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/audioconvert/audioconvert.c b/spa/plugins/audioconvert/audioconvert.c
|
||||
index ccf4e30c5..578f70ff9 100644
|
||||
--- a/spa/plugins/audioconvert/audioconvert.c
|
||||
+++ b/spa/plugins/audioconvert/audioconvert.c
|
||||
@@ -2049,13 +2049,16 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = GET_PORT(this, direction, port_id);
|
||||
|
||||
- spa_return_val_if_fail(port->have_format, -EIO);
|
||||
-
|
||||
spa_log_debug(this->log, "%p: use buffers %d on port %d:%d",
|
||||
this, n_buffers, direction, port_id);
|
||||
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
maxsize = this->quantum_limit * sizeof(float);
|
||||
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
diff --git a/spa/plugins/audiomixer/audiomixer.c b/spa/plugins/audiomixer/audiomixer.c
|
||||
index 41e7e3f7e..25da9780a 100644
|
||||
--- a/spa/plugins/audiomixer/audiomixer.c
|
||||
+++ b/spa/plugins/audiomixer/audiomixer.c
|
||||
@@ -649,10 +649,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = GET_PORT(this, direction, port_id);
|
||||
|
||||
- spa_return_val_if_fail(port->have_format, -EIO);
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/audiomixer/mixer-dsp.c b/spa/plugins/audiomixer/mixer-dsp.c
|
||||
index f93796b97..534cfabaf 100644
|
||||
--- a/spa/plugins/audiomixer/mixer-dsp.c
|
||||
+++ b/spa/plugins/audiomixer/mixer-dsp.c
|
||||
@@ -586,10 +586,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = GET_PORT(this, direction, port_id);
|
||||
|
||||
- spa_return_val_if_fail(port->have_format, -EIO);
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/audiotestsrc/audiotestsrc.c b/spa/plugins/audiotestsrc/audiotestsrc.c
|
||||
index c0c9c7a68..1501e1d55 100644
|
||||
--- a/spa/plugins/audiotestsrc/audiotestsrc.c
|
||||
+++ b/spa/plugins/audiotestsrc/audiotestsrc.c
|
||||
@@ -829,11 +829,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = &this->port;
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/avb/avb-pcm-sink.c b/spa/plugins/avb/avb-pcm-sink.c
|
||||
index 00f4e9593..0a102480c 100644
|
||||
--- a/spa/plugins/avb/avb-pcm-sink.c
|
||||
+++ b/spa/plugins/avb/avb-pcm-sink.c
|
||||
@@ -629,14 +629,14 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
spa_log_debug(this->log, "%p: use %d buffers", this, n_buffers);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
- if (n_buffers == 0) {
|
||||
+ if (port->n_buffers > 0) {
|
||||
spa_avb_pause(this);
|
||||
clear_buffers(this, port);
|
||||
- return 0;
|
||||
}
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &port->buffers[i];
|
||||
diff --git a/spa/plugins/avb/avb-pcm-source.c b/spa/plugins/avb/avb-pcm-source.c
|
||||
index 5bf0a6e51..e7891a1a8 100644
|
||||
--- a/spa/plugins/avb/avb-pcm-source.c
|
||||
+++ b/spa/plugins/avb/avb-pcm-source.c
|
||||
@@ -629,14 +629,14 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
spa_log_debug(this->log, "%p: use %d buffers", this, n_buffers);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
- if (n_buffers == 0) {
|
||||
+ if (port->n_buffers > 0) {
|
||||
spa_avb_pause(this);
|
||||
clear_buffers(this, port);
|
||||
- return 0;
|
||||
}
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &port->buffers[i];
|
||||
diff --git a/spa/plugins/bluez5/media-sink.c b/spa/plugins/bluez5/media-sink.c
|
||||
index 4bf7310cf..cab508ffc 100644
|
||||
--- a/spa/plugins/bluez5/media-sink.c
|
||||
+++ b/spa/plugins/bluez5/media-sink.c
|
||||
@@ -1453,11 +1453,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
spa_log_debug(this->log, "use buffers %d", n_buffers);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &port->buffers[i];
|
||||
|
||||
diff --git a/spa/plugins/bluez5/media-source.c b/spa/plugins/bluez5/media-source.c
|
||||
index d260335ce..360f812bd 100644
|
||||
--- a/spa/plugins/bluez5/media-source.c
|
||||
+++ b/spa/plugins/bluez5/media-source.c
|
||||
@@ -1202,11 +1202,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
spa_log_debug(this->log, "use buffers %d", n_buffers);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &port->buffers[i];
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/bluez5/sco-sink.c b/spa/plugins/bluez5/sco-sink.c
|
||||
index 7025c78a9..18a34f64b 100644
|
||||
--- a/spa/plugins/bluez5/sco-sink.c
|
||||
+++ b/spa/plugins/bluez5/sco-sink.c
|
||||
@@ -1186,11 +1186,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
spa_log_debug(this->log, "use buffers %d", n_buffers);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &port->buffers[i];
|
||||
|
||||
diff --git a/spa/plugins/bluez5/sco-source.c b/spa/plugins/bluez5/sco-source.c
|
||||
index b4c40983a..6f5fe08fd 100644
|
||||
--- a/spa/plugins/bluez5/sco-source.c
|
||||
+++ b/spa/plugins/bluez5/sco-source.c
|
||||
@@ -1155,11 +1155,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
spa_log_debug(this->log, "use buffers %d", n_buffers);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &port->buffers[i];
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/control/mixer.c b/spa/plugins/control/mixer.c
|
||||
index 1ef212b46..9d28bef3d 100644
|
||||
--- a/spa/plugins/control/mixer.c
|
||||
+++ b/spa/plugins/control/mixer.c
|
||||
@@ -506,10 +506,13 @@ impl_node_port_use_buffers(void *object,
|
||||
spa_log_debug(this->log, NAME " %p: use buffers %d on port %d:%d",
|
||||
this, n_buffers, direction, port_id);
|
||||
|
||||
- spa_return_val_if_fail(port->have_format, -EIO);
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/jack/jack-sink.c b/spa/plugins/jack/jack-sink.c
|
||||
index 50dec321b..e9ca5a8bc 100644
|
||||
--- a/spa/plugins/jack/jack-sink.c
|
||||
+++ b/spa/plugins/jack/jack-sink.c
|
||||
@@ -693,11 +693,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = GET_PORT(this, direction, port_id);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
|
||||
diff --git a/spa/plugins/jack/jack-source.c b/spa/plugins/jack/jack-source.c
|
||||
index 7a82f0768..7004eed12 100644
|
||||
--- a/spa/plugins/jack/jack-source.c
|
||||
+++ b/spa/plugins/jack/jack-source.c
|
||||
@@ -693,11 +693,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = GET_PORT(this, direction, port_id);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
|
||||
diff --git a/spa/plugins/libcamera/libcamera-source.cpp b/spa/plugins/libcamera/libcamera-source.cpp
|
||||
index 50954e5e3..26ef14874 100644
|
||||
--- a/spa/plugins/libcamera/libcamera-source.cpp
|
||||
+++ b/spa/plugins/libcamera/libcamera-source.cpp
|
||||
@@ -774,14 +774,15 @@ static int impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = GET_PORT(impl, direction, port_id);
|
||||
|
||||
- if (!port->current_format)
|
||||
- return -EIO;
|
||||
-
|
||||
if (port->n_buffers) {
|
||||
spa_libcamera_stream_off(impl);
|
||||
if ((res = spa_libcamera_clear_buffers(impl, port)) < 0)
|
||||
return res;
|
||||
}
|
||||
+ if (n_buffers > 0 && !port->current_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
if (buffers == NULL)
|
||||
return 0;
|
||||
|
||||
diff --git a/spa/plugins/support/null-audio-sink.c b/spa/plugins/support/null-audio-sink.c
|
||||
index c39c15afb..e5b9f04a7 100644
|
||||
--- a/spa/plugins/support/null-audio-sink.c
|
||||
+++ b/spa/plugins/support/null-audio-sink.c
|
||||
@@ -685,11 +685,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = &this->port;
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/test/fakesink.c b/spa/plugins/test/fakesink.c
|
||||
index 3c42b2239..16bb012d0 100644
|
||||
--- a/spa/plugins/test/fakesink.c
|
||||
+++ b/spa/plugins/test/fakesink.c
|
||||
@@ -585,11 +585,13 @@ impl_node_port_use_buffers(void *object,
|
||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||
port = &this->port;
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/test/fakesrc.c b/spa/plugins/test/fakesrc.c
|
||||
index d4965a98b..f41454323 100644
|
||||
--- a/spa/plugins/test/fakesrc.c
|
||||
+++ b/spa/plugins/test/fakesrc.c
|
||||
@@ -597,11 +597,13 @@ impl_node_port_use_buffers(void *object,
|
||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||
port = &this->port;
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/v4l2/v4l2-source.c b/spa/plugins/v4l2/v4l2-source.c
|
||||
index 3d967f255..cd859463c 100644
|
||||
--- a/spa/plugins/v4l2/v4l2-source.c
|
||||
+++ b/spa/plugins/v4l2/v4l2-source.c
|
||||
@@ -756,14 +756,15 @@ static int impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = GET_PORT(this, direction, port_id);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
if (port->n_buffers) {
|
||||
spa_v4l2_stream_off(this);
|
||||
if ((res = spa_v4l2_clear_buffers(this)) < 0)
|
||||
return res;
|
||||
}
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
if (buffers == NULL)
|
||||
return 0;
|
||||
|
||||
diff --git a/spa/plugins/videotestsrc/videotestsrc.c b/spa/plugins/videotestsrc/videotestsrc.c
|
||||
index af3bc9688..8d96b1b38 100644
|
||||
--- a/spa/plugins/videotestsrc/videotestsrc.c
|
||||
+++ b/spa/plugins/videotestsrc/videotestsrc.c
|
||||
@@ -712,11 +712,13 @@ impl_node_port_use_buffers(void *object,
|
||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||
port = &this->port;
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/volume/volume.c b/spa/plugins/volume/volume.c
|
||||
index 08102a428..63237661e 100644
|
||||
--- a/spa/plugins/volume/volume.c
|
||||
+++ b/spa/plugins/volume/volume.c
|
||||
@@ -528,11 +528,13 @@ impl_node_port_use_buffers(void *object,
|
||||
|
||||
port = GET_PORT(this, direction, port_id);
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
struct spa_data *d = buffers[i]->datas;
|
||||
diff --git a/spa/plugins/vulkan/vulkan-compute-filter.c b/spa/plugins/vulkan/vulkan-compute-filter.c
|
||||
index 66157075a..94efec3aa 100644
|
||||
--- a/spa/plugins/vulkan/vulkan-compute-filter.c
|
||||
+++ b/spa/plugins/vulkan/vulkan-compute-filter.c
|
||||
@@ -505,11 +505,13 @@ impl_node_port_use_buffers(void *object,
|
||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||
port = &this->port[direction];
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
|
||||
diff --git a/spa/plugins/vulkan/vulkan-compute-source.c b/spa/plugins/vulkan/vulkan-compute-source.c
|
||||
index dade5a5d3..4602e5d52 100644
|
||||
--- a/spa/plugins/vulkan/vulkan-compute-source.c
|
||||
+++ b/spa/plugins/vulkan/vulkan-compute-source.c
|
||||
@@ -740,11 +740,13 @@ impl_node_port_use_buffers(void *object,
|
||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||
port = &this->port;
|
||||
|
||||
- if (!port->have_format)
|
||||
- return -EIO;
|
||||
-
|
||||
clear_buffers(this, port);
|
||||
|
||||
+ if (n_buffers > 0 && !port->have_format)
|
||||
+ return -EIO;
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b;
|
||||
|
||||
diff --git a/src/examples/export-source.c b/src/examples/export-source.c
|
||||
index 22dfa1426..eb8fdb5ac 100644
|
||||
--- a/src/examples/export-source.c
|
||||
+++ b/src/examples/export-source.c
|
||||
@@ -46,6 +46,7 @@
|
||||
#define M_PI_M2 ( M_PI + M_PI )
|
||||
|
||||
#define BUFFER_SAMPLES 128
|
||||
+#define MAX_BUFFERS 32
|
||||
|
||||
struct buffer {
|
||||
uint32_t id;
|
||||
@@ -79,7 +80,7 @@ struct data {
|
||||
|
||||
struct spa_audio_info_raw format;
|
||||
|
||||
- struct buffer buffers[32];
|
||||
+ struct buffer buffers[MAX_BUFFERS];
|
||||
uint32_t n_buffers;
|
||||
struct spa_list empty;
|
||||
|
||||
@@ -325,6 +326,9 @@ static int impl_port_use_buffers(void *object,
|
||||
struct data *d = object;
|
||||
uint32_t i;
|
||||
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct buffer *b = &d->buffers[i];
|
||||
struct spa_data *datas = buffers[i]->datas;
|
||||
diff --git a/src/examples/local-v4l2.c b/src/examples/local-v4l2.c
|
||||
index 5f7476727..1d70e9ec1 100644
|
||||
--- a/src/examples/local-v4l2.c
|
||||
+++ b/src/examples/local-v4l2.c
|
||||
@@ -34,6 +34,7 @@
|
||||
#define WIDTH 640
|
||||
#define HEIGHT 480
|
||||
#define BPP 3
|
||||
+#define MAX_BUFFERS 32
|
||||
|
||||
#include "sdl.h"
|
||||
|
||||
@@ -68,7 +69,7 @@ struct data {
|
||||
struct spa_video_info_raw format;
|
||||
int32_t stride;
|
||||
|
||||
- struct spa_buffer *buffers[32];
|
||||
+ struct spa_buffer *buffers[MAX_BUFFERS];
|
||||
int n_buffers;
|
||||
|
||||
struct pw_proxy *out, *in, *link;
|
||||
@@ -264,6 +265,9 @@ static int impl_port_use_buffers(void *object,
|
||||
struct data *d = object;
|
||||
uint32_t i;
|
||||
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++)
|
||||
d->buffers[i] = buffers[i];
|
||||
d->n_buffers = n_buffers;
|
||||
diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c
|
||||
index 563585553..b1f58289f 100644
|
||||
--- a/src/modules/module-client-node/client-node.c
|
||||
+++ b/src/modules/module-client-node/client-node.c
|
||||
@@ -754,7 +754,6 @@ do_port_use_buffers(struct impl *impl,
|
||||
if (n_buffers > MAX_BUFFERS)
|
||||
return -ENOSPC;
|
||||
|
||||
-
|
||||
spa_log_debug(this->log, "%p: %s port %d.%d use buffers %p %u flags:%08x", this,
|
||||
direction == SPA_DIRECTION_INPUT ? "input" : "output",
|
||||
port_id, mix_id, buffers, n_buffers, flags);
|
||||
diff --git a/src/pipewire/filter.c b/src/pipewire/filter.c
|
||||
index 4af39fbbe..cc18606b9 100644
|
||||
--- a/src/pipewire/filter.c
|
||||
+++ b/src/pipewire/filter.c
|
||||
@@ -885,16 +885,19 @@ static int impl_port_use_buffers(void *object,
|
||||
pw_log_debug("%p: port:%d.%d buffers:%u disconnecting:%d", impl,
|
||||
direction, port_id, n_buffers, impl->disconnecting);
|
||||
|
||||
+ if ((port = get_port(impl, direction, port_id)) == NULL)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
if (impl->disconnecting && n_buffers > 0)
|
||||
return -EIO;
|
||||
|
||||
- if ((port = get_port(impl, direction, port_id)) == NULL)
|
||||
- return -EINVAL;
|
||||
+ clear_buffers(port);
|
||||
|
||||
impl_flags = port->flags;
|
||||
prot = PROT_READ | (direction == SPA_DIRECTION_OUTPUT ? PROT_WRITE : 0);
|
||||
|
||||
- clear_buffers(port);
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
int buf_size = 0;
|
||||
diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c
|
||||
index a7c1da187..3b0d8adb4 100644
|
||||
--- a/src/pipewire/stream.c
|
||||
+++ b/src/pipewire/stream.c
|
||||
@@ -922,13 +922,13 @@ static int impl_port_use_buffers(void *object,
|
||||
if (impl->disconnecting && n_buffers > 0)
|
||||
return -EIO;
|
||||
|
||||
- if (n_buffers > MAX_BUFFERS)
|
||||
- return -EINVAL;
|
||||
-
|
||||
prot = PROT_READ | (direction == SPA_DIRECTION_OUTPUT ? PROT_WRITE : 0);
|
||||
|
||||
clear_buffers(stream);
|
||||
|
||||
+ if (n_buffers > MAX_BUFFERS)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
int buf_size = 0;
|
||||
struct buffer *b = &impl->buffers[i];
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,99 +0,0 @@
|
||||
From 26496724c656b466414f6f40fd52269dc19077d8 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Thu, 5 Jan 2023 13:54:38 +0100
|
||||
Subject: [PATCH] impl-node: move 2 state variables to private
|
||||
|
||||
So that they can be used when making scheduler decisions.
|
||||
---
|
||||
src/pipewire/impl-node.c | 21 ++++++++++-----------
|
||||
src/pipewire/private.h | 2 ++
|
||||
2 files changed, 12 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c
|
||||
index dd20620a9..015a3096c 100644
|
||||
--- a/src/pipewire/impl-node.c
|
||||
+++ b/src/pipewire/impl-node.c
|
||||
@@ -59,8 +59,6 @@ struct impl {
|
||||
struct spa_list param_list;
|
||||
struct spa_list pending_list;
|
||||
|
||||
- unsigned int pause_on_idle:1;
|
||||
- unsigned int suspend_on_idle:1;
|
||||
unsigned int cache_params:1;
|
||||
unsigned int pending_play:1;
|
||||
};
|
||||
@@ -221,12 +219,12 @@ static int idle_node(struct pw_impl_node *this)
|
||||
pw_log_debug("%p: idle node state:%s pending:%s pause-on-idle:%d", this,
|
||||
pw_node_state_as_string(this->info.state),
|
||||
pw_node_state_as_string(impl->pending_state),
|
||||
- impl->pause_on_idle);
|
||||
+ this->pause_on_idle);
|
||||
|
||||
if (impl->pending_state <= PW_NODE_STATE_IDLE)
|
||||
return 0;
|
||||
|
||||
- if (!impl->pause_on_idle)
|
||||
+ if (!this->pause_on_idle)
|
||||
return 0;
|
||||
|
||||
node_deactivate(this);
|
||||
@@ -385,7 +383,7 @@ static void node_update_state(struct pw_impl_node *node, enum pw_node_state stat
|
||||
case PW_NODE_STATE_IDLE:
|
||||
case PW_NODE_STATE_SUSPENDED:
|
||||
case PW_NODE_STATE_ERROR:
|
||||
- if (state != PW_NODE_STATE_IDLE || impl->pause_on_idle)
|
||||
+ if (state != PW_NODE_STATE_IDLE || node->pause_on_idle)
|
||||
pw_loop_invoke(node->data_loop, do_node_remove, 1, NULL, 0, true, node);
|
||||
break;
|
||||
default:
|
||||
@@ -422,8 +420,9 @@ static void node_update_state(struct pw_impl_node *node, enum pw_node_state stat
|
||||
}
|
||||
if (old == PW_NODE_STATE_RUNNING &&
|
||||
state == PW_NODE_STATE_IDLE &&
|
||||
- impl->suspend_on_idle)
|
||||
- pw_impl_node_set_state(node, PW_NODE_STATE_SUSPENDED);
|
||||
+ node->suspend_on_idle) {
|
||||
+ pw_impl_node_set_state(node, PW_NODE_STATE_SUSPENDED);
|
||||
+ }
|
||||
}
|
||||
|
||||
static int suspend_node(struct pw_impl_node *this)
|
||||
@@ -917,10 +916,10 @@ static void check_properties(struct pw_impl_node *node)
|
||||
pw_log_debug("%p: name '%s'", node, node->name);
|
||||
}
|
||||
|
||||
- impl->pause_on_idle = pw_properties_get_bool(node->properties, PW_KEY_NODE_PAUSE_ON_IDLE, true);
|
||||
- impl->suspend_on_idle = pw_properties_get_bool(node->properties, PW_KEY_NODE_SUSPEND_ON_IDLE, false);
|
||||
- impl->cache_params = pw_properties_get_bool(node->properties, PW_KEY_NODE_CACHE_PARAMS, true);
|
||||
+ node->pause_on_idle = pw_properties_get_bool(node->properties, PW_KEY_NODE_PAUSE_ON_IDLE, true);
|
||||
+ node->suspend_on_idle = pw_properties_get_bool(node->properties, PW_KEY_NODE_SUSPEND_ON_IDLE, false);
|
||||
node->transport_sync = pw_properties_get_bool(node->properties, PW_KEY_NODE_TRANSPORT_SYNC, false);
|
||||
+ impl->cache_params = pw_properties_get_bool(node->properties, PW_KEY_NODE_CACHE_PARAMS, true);
|
||||
driver = pw_properties_get_bool(node->properties, PW_KEY_NODE_DRIVER, false);
|
||||
|
||||
if (node->driver != driver) {
|
||||
@@ -2215,7 +2214,7 @@ int pw_impl_node_set_state(struct pw_impl_node *node, enum pw_node_state state)
|
||||
pw_node_state_as_string(old),
|
||||
pw_node_state_as_string(state),
|
||||
node->active,
|
||||
- impl->pause_on_idle);
|
||||
+ node->pause_on_idle);
|
||||
|
||||
if (old != state)
|
||||
pw_impl_node_emit_state_request(node, state);
|
||||
diff --git a/src/pipewire/private.h b/src/pipewire/private.h
|
||||
index 659f4ab8f..8abd68502 100644
|
||||
--- a/src/pipewire/private.h
|
||||
+++ b/src/pipewire/private.h
|
||||
@@ -719,6 +719,8 @@ struct pw_impl_node {
|
||||
unsigned int current_pending:1; /**< a quantum/rate update is pending */
|
||||
unsigned int moved:1; /**< the node was moved drivers */
|
||||
unsigned int added:1; /**< the node was add to graph */
|
||||
+ unsigned int pause_on_idle:1; /**< Pause processing when IDLE */
|
||||
+ unsigned int suspend_on_idle:1;
|
||||
|
||||
uint32_t port_user_data_size; /**< extra size for port user data */
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 0ddf80d470449a3aea04111cd7d1b4a2b9b2f8df Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Thu, 5 Jan 2023 13:49:52 +0100
|
||||
Subject: [PATCH] midifile: error won invalid track size
|
||||
|
||||
When the track data would exceed the file size, return an error.
|
||||
---
|
||||
src/tools/midifile.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/src/tools/midifile.c b/src/tools/midifile.c
|
||||
index fbd19ce4a..5276ade73 100644
|
||||
--- a/src/tools/midifile.c
|
||||
+++ b/src/tools/midifile.c
|
||||
@@ -118,6 +118,9 @@ static int read_mtrk(struct midi_file *mf, struct midi_track *track)
|
||||
track->size = parse_be32(mf->p + 4);
|
||||
|
||||
mf->p = track->data + track->size;
|
||||
+ if (mf->p > mf->data + mf->size)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,45 +0,0 @@
|
||||
From 6d58c739371ab6d699871b9864db5f23d987d27e Mon Sep 17 00:00:00 2001
|
||||
From: Jan Beich <jbeich@FreeBSD.org>
|
||||
Date: Sun, 8 Jan 2023 02:06:35 +0000
|
||||
Subject: [PATCH] module-rt: fix warning when xdg-desktop-portal isn't running
|
||||
|
||||
$ pipewire
|
||||
...
|
||||
[W][1234.001] mod.rt | [ module-rt.c: 278 pw_rtkit_check_xdg_portal()] Can't find xdg-portal: (null)
|
||||
...
|
||||
---
|
||||
src/modules/module-rt.c | 16 ++++------------
|
||||
1 file changed, 4 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/modules/module-rt.c b/src/modules/module-rt.c
|
||||
index 5cfd766e4..6f3dbecd5 100644
|
||||
--- a/src/modules/module-rt.c
|
||||
+++ b/src/modules/module-rt.c
|
||||
@@ -269,20 +269,12 @@ struct pw_rtkit_bus *pw_rtkit_bus_get_session(void)
|
||||
|
||||
bool pw_rtkit_check_xdg_portal(struct pw_rtkit_bus *system_bus)
|
||||
{
|
||||
- DBusError error;
|
||||
- bool ret = true;
|
||||
-
|
||||
- dbus_error_init(&error);
|
||||
-
|
||||
- if (!dbus_bus_name_has_owner(system_bus->bus, XDG_PORTAL_SERVICE_NAME, &error)) {
|
||||
- pw_log_warn("Can't find xdg-portal: %s", error.name);
|
||||
- ret = false;
|
||||
- goto finish;
|
||||
+ if (!dbus_bus_name_has_owner(system_bus->bus, XDG_PORTAL_SERVICE_NAME, NULL)) {
|
||||
+ pw_log_warn("Can't find %s. Is xdg-desktop-portal running?", XDG_PORTAL_SERVICE_NAME);
|
||||
+ return false;
|
||||
}
|
||||
-finish:
|
||||
- dbus_error_free(&error);
|
||||
|
||||
- return ret;
|
||||
+ return true;
|
||||
}
|
||||
|
||||
void pw_rtkit_bus_free(struct pw_rtkit_bus *system_bus)
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,43 +0,0 @@
|
||||
From 860b8fc27ffbfd0a095e3fa4b0cd125d536283d3 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Thu, 29 Dec 2022 12:22:56 +0100
|
||||
Subject: [PATCH] modules: fix rate update
|
||||
|
||||
Setting the rate with the PROP_rate would actually result in a rate
|
||||
adjustment of 1.0f / rate, so do the same here.
|
||||
|
||||
See #2891
|
||||
---
|
||||
src/modules/module-pulse-tunnel.c | 2 +-
|
||||
src/modules/module-rtp-source.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/modules/module-pulse-tunnel.c b/src/modules/module-pulse-tunnel.c
|
||||
index 916400d22..be89a51b3 100644
|
||||
--- a/src/modules/module-pulse-tunnel.c
|
||||
+++ b/src/modules/module-pulse-tunnel.c
|
||||
@@ -270,7 +270,7 @@ static void update_rate(struct impl *impl, bool playback)
|
||||
impl->current_latency, impl->target_latency);
|
||||
|
||||
SPA_FLAG_SET(impl->rate_match->flags, SPA_IO_RATE_MATCH_FLAG_ACTIVE);
|
||||
- impl->rate_match->rate = corr;
|
||||
+ impl->rate_match->rate = 1.0f / corr;
|
||||
}
|
||||
|
||||
static void playback_stream_process(void *d)
|
||||
diff --git a/src/modules/module-rtp-source.c b/src/modules/module-rtp-source.c
|
||||
index bc25cdc3d..6d1443e6c 100644
|
||||
--- a/src/modules/module-rtp-source.c
|
||||
+++ b/src/modules/module-rtp-source.c
|
||||
@@ -272,7 +272,7 @@ static void stream_process(void *data)
|
||||
|
||||
if (sess->rate_match) {
|
||||
SPA_FLAG_SET(sess->rate_match->flags, SPA_IO_RATE_MATCH_FLAG_ACTIVE);
|
||||
- sess->rate_match->rate = corr;
|
||||
+ sess->rate_match->rate = 1.0f / corr;
|
||||
}
|
||||
}
|
||||
spa_ringbuffer_read_data(&sess->ring,
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,39 +0,0 @@
|
||||
From f7c49bbdde5f9f09270ac391990264a501761420 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Thu, 15 Dec 2022 13:12:47 +0100
|
||||
Subject: [PATCH] pulse-server: add channel-map in echo-cancel module
|
||||
|
||||
---
|
||||
.../module-protocol-pulse/modules/module-echo-cancel.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/modules/module-protocol-pulse/modules/module-echo-cancel.c b/src/modules/module-protocol-pulse/modules/module-echo-cancel.c
|
||||
index 47dfa75bb..72e0095b5 100644
|
||||
--- a/src/modules/module-protocol-pulse/modules/module-echo-cancel.c
|
||||
+++ b/src/modules/module-protocol-pulse/modules/module-echo-cancel.c
|
||||
@@ -70,6 +70,7 @@ static int module_echo_cancel_load(struct module *module)
|
||||
const char *str;
|
||||
char *args;
|
||||
size_t size;
|
||||
+ uint32_t i;
|
||||
|
||||
if ((f = open_memstream(&args, &size)) == NULL)
|
||||
return -errno;
|
||||
@@ -85,7 +86,13 @@ static int module_echo_cancel_load(struct module *module)
|
||||
fprintf(f, " audio.rate = %u", data->info.rate);
|
||||
if (data->info.channels != 0) {
|
||||
fprintf(f, " audio.channels = %u", data->info.channels);
|
||||
- /* TODO: convert channel positions to string */
|
||||
+ if (!(data->info.flags & SPA_AUDIO_FLAG_UNPOSITIONED)) {
|
||||
+ fprintf(f, " audio.position = [ ");
|
||||
+ for (i = 0; i < data->info.channels; i++)
|
||||
+ fprintf(f, "%s%s", i == 0 ? "" : ",",
|
||||
+ channel_id2name(data->info.position[i]));
|
||||
+ fprintf(f, " ]");
|
||||
+ }
|
||||
}
|
||||
fprintf(f, " source.props = {");
|
||||
pw_properties_serialize_dict(f, &data->source_props->dict, 0);
|
||||
--
|
||||
2.39.0
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 624e265fd6e5027e11027822eb943c533feab85f Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Tue, 10 Jan 2023 12:49:22 +0100
|
||||
Subject: [PATCH] pulse-server: clear the drained state correctly
|
||||
|
||||
When we start the drain, we unpause the stream. When we conplete the
|
||||
drain, we unpause again, which does nothing when the stream was already
|
||||
unpaused. However, this leaves the drained state on the stream and so
|
||||
the stream will never be able to play new data.
|
||||
|
||||
Trigger a new pw_stream_set_active() with the current stream state to
|
||||
clear the drained state.
|
||||
|
||||
Fixes #2928
|
||||
---
|
||||
src/modules/module-protocol-pulse/pulse-server.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c
|
||||
index 97405e039..97d247d26 100644
|
||||
--- a/src/modules/module-protocol-pulse/pulse-server.c
|
||||
+++ b/src/modules/module-protocol-pulse/pulse-server.c
|
||||
@@ -1541,7 +1541,7 @@ static void stream_drained(void *data)
|
||||
reply_simple_ack(stream->client, stream->drain_tag);
|
||||
stream->drain_tag = 0;
|
||||
|
||||
- stream_set_paused(stream, false, "complete drain");
|
||||
+ pw_stream_set_active(stream->stream, !stream->is_paused);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,89 +0,0 @@
|
||||
From ba374a7b47b690d819e9fc60d2e3b5a2533e52f8 Mon Sep 17 00:00:00 2001
|
||||
From: Wim Taymans <wtaymans@redhat.com>
|
||||
Date: Mon, 9 Jan 2023 11:42:49 +0100
|
||||
Subject: [PATCH] impl-node: restore running state after reconfigure
|
||||
|
||||
Add a reconfigure state on the node that is set when the node was IDLE
|
||||
or RUNNING when reconfigured.
|
||||
|
||||
The node state will be set to the running state as long as the
|
||||
reconfigure state is active. When the node is running, the reconfigure
|
||||
state is unset again and the node is allowed to IDLE as usual.
|
||||
|
||||
This fixes the case where an IDLE (but not paused node) will be
|
||||
suspended when a rate change happens but will then not resume
|
||||
afterwards.
|
||||
|
||||
This causes problems with rate changes and nodes that have the suspend
|
||||
disabled by the session manager. They will be suspened anyway and this
|
||||
can cause problems for devices that need to keep running to keep the
|
||||
amplifiers active.
|
||||
|
||||
Fixes #2929
|
||||
---
|
||||
src/pipewire/context.c | 8 +++++++-
|
||||
src/pipewire/impl-node.c | 8 ++++++++
|
||||
src/pipewire/private.h | 1 +
|
||||
3 files changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/pipewire/context.c b/src/pipewire/context.c
|
||||
index 2301d34ad..ab798c20e 100644
|
||||
--- a/src/pipewire/context.c
|
||||
+++ b/src/pipewire/context.c
|
||||
@@ -946,6 +946,9 @@ static void reconfigure_driver(struct pw_context *context, struct pw_impl_node *
|
||||
}
|
||||
pw_log_debug("%p: driver %p: '%s' suspend",
|
||||
context, n, n->name);
|
||||
+
|
||||
+ if (n->info.state >= PW_NODE_STATE_IDLE)
|
||||
+ n->reconfigure = true;
|
||||
pw_impl_node_set_state(n, PW_NODE_STATE_SUSPENDED);
|
||||
}
|
||||
|
||||
@@ -1180,8 +1183,11 @@ again:
|
||||
if (force_rate)
|
||||
lock_rate = false;
|
||||
|
||||
+ if (n->reconfigure)
|
||||
+ running = true;
|
||||
+
|
||||
current_rate = n->current_rate.denom;
|
||||
- if (lock_rate ||
|
||||
+ if (lock_rate || n->reconfigure ||
|
||||
(!force_rate &&
|
||||
(n->info.state > PW_NODE_STATE_IDLE)))
|
||||
/* when someone wants us to lock the rate of this driver or
|
||||
diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c
|
||||
index 015a3096c..6200e8002 100644
|
||||
--- a/src/pipewire/impl-node.c
|
||||
+++ b/src/pipewire/impl-node.c
|
||||
@@ -418,6 +418,14 @@ static void node_update_state(struct pw_impl_node *node, enum pw_node_state stat
|
||||
spa_list_for_each(resource, &node->global->resource_list, link)
|
||||
pw_resource_error(resource, res, error);
|
||||
}
|
||||
+ if (node->reconfigure) {
|
||||
+ if (state == PW_NODE_STATE_SUSPENDED &&
|
||||
+ node->pause_on_idle) {
|
||||
+ node->reconfigure = false;
|
||||
+ }
|
||||
+ if (state == PW_NODE_STATE_RUNNING)
|
||||
+ node->reconfigure = false;
|
||||
+ }
|
||||
if (old == PW_NODE_STATE_RUNNING &&
|
||||
state == PW_NODE_STATE_IDLE &&
|
||||
node->suspend_on_idle) {
|
||||
diff --git a/src/pipewire/private.h b/src/pipewire/private.h
|
||||
index 8abd68502..92d004508 100644
|
||||
--- a/src/pipewire/private.h
|
||||
+++ b/src/pipewire/private.h
|
||||
@@ -721,6 +721,7 @@ struct pw_impl_node {
|
||||
unsigned int added:1; /**< the node was add to graph */
|
||||
unsigned int pause_on_idle:1; /**< Pause processing when IDLE */
|
||||
unsigned int suspend_on_idle:1;
|
||||
+ unsigned int reconfigure:1;
|
||||
|
||||
uint32_t port_user_data_size; /**< extra size for port user data */
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
@ -1,26 +0,0 @@
|
||||
From c7b3ef0d9ff16a1e69a299870860bebcb628e298 Mon Sep 17 00:00:00 2001
|
||||
From: Pauli Virtanen <pav@iki.fi>
|
||||
Date: Wed, 21 Dec 2022 12:54:52 +0200
|
||||
Subject: [PATCH] bluez5: backend-native: fix missing brace in CIND reply
|
||||
|
||||
It should look like ...,("battchg,(0-5)) not ...,"battchg",(0-5))
|
||||
---
|
||||
spa/plugins/bluez5/backend-native.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/spa/plugins/bluez5/backend-native.c b/spa/plugins/bluez5/backend-native.c
|
||||
index eed23f66e..ab543a621 100644
|
||||
--- a/spa/plugins/bluez5/backend-native.c
|
||||
+++ b/spa/plugins/bluez5/backend-native.c
|
||||
@@ -74,7 +74,7 @@ enum {
|
||||
HFP_AG_INITIAL_CODEC_SETUP_WAIT
|
||||
};
|
||||
|
||||
-#define CIND_INDICATORS "(\"service\",(0-1)),(\"call\",(0-1)),(\"callsetup\",(0-3)),(\"callheld\",(0-2)),(\"signal\",(0-5)),(\"roam\",(0-1)),\"battchg\",(0-5))"
|
||||
+#define CIND_INDICATORS "(\"service\",(0-1)),(\"call\",(0-1)),(\"callsetup\",(0-3)),(\"callheld\",(0-2)),(\"signal\",(0-5)),(\"roam\",(0-1)),(\"battchg\",(0-5))"
|
||||
enum {
|
||||
CIND_SERVICE = 1,
|
||||
CIND_CALL,
|
||||
--
|
||||
2.39.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user