diff --git a/.gitignore b/.gitignore index 1cfeb16..63faef6 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ /pipewire-0.3.24.tar.gz /pipewire-0.3.25.tar.gz /pipewire-0.3.26.tar.gz +/pipewire-0.3.27.tar.gz diff --git a/0002-acp-sync-with-pulseaudio.patch b/0002-acp-sync-with-pulseaudio.patch deleted file mode 100644 index 02678cd..0000000 --- a/0002-acp-sync-with-pulseaudio.patch +++ /dev/null @@ -1,91 +0,0 @@ -From cd4a47666d537fce00e736dde5a0170f93260f10 Mon Sep 17 00:00:00 2001 -From: Wim Taymans -Date: Thu, 22 Apr 2021 12:25:48 +0200 -Subject: [PATCH 02/10] acp: sync with pulseaudio - -Remove our custom hack to work around missing duplex and use -upstream fix. ---- - spa/plugins/alsa/acp/alsa-mixer.c | 24 +++++++++++++++++------- - spa/plugins/alsa/acp/idxset.h | 8 ++++++++ - 2 files changed, 25 insertions(+), 7 deletions(-) - -diff --git a/spa/plugins/alsa/acp/alsa-mixer.c b/spa/plugins/alsa/acp/alsa-mixer.c -index 606d00b8..9d41b193 100644 ---- a/spa/plugins/alsa/acp/alsa-mixer.c -+++ b/spa/plugins/alsa/acp/alsa-mixer.c -@@ -5142,6 +5142,7 @@ void pa_alsa_profile_set_probe( - pa_alsa_profile **pp, **probe_order; - pa_alsa_mapping *m; - pa_hashmap *broken_inputs, *broken_outputs, *used_paths; -+ pa_alsa_mapping *selected_fallback_input = NULL, *selected_fallback_output = NULL; - - pa_assert(ps); - pa_assert(dev_id); -@@ -5164,13 +5165,16 @@ void pa_alsa_profile_set_probe( - uint32_t idx; - p = *pp; - -- pa_log_debug("Check Profile %s.", p->name); -- -- /* Skip if fallback and already found something */ -+ /* Skip if fallback and already found something, but still probe already selected fallbacks. -+ * If UCM is used then both fallback_input and fallback_output flags are false. -+ * If UCM is not used then there will be only a single entry in mappings. -+ */ - if (found_input && p->fallback_input) -- continue; -+ if (selected_fallback_input == NULL || pa_idxset_get_by_index(p->input_mappings, 0) != selected_fallback_input) -+ continue; - if (found_output && p->fallback_output) -- continue; -+ if (selected_fallback_output == NULL || pa_idxset_get_by_index(p->output_mappings, 0) != selected_fallback_output) -+ continue; - - /* Skip if this is already marked that it is supported (i.e. from the config file) */ - if (!p->supported) { -@@ -5261,14 +5265,20 @@ void pa_alsa_profile_set_probe( - if (p->output_mappings) - PA_IDXSET_FOREACH(m, p->output_mappings, idx) - if (m->output_pcm) { -- found_output |= !p->fallback_output; -+ found_output = true; -+ if (p->fallback_output && selected_fallback_output == NULL) { -+ selected_fallback_output = m; -+ } - mapping_paths_probe(m, p, PA_ALSA_DIRECTION_OUTPUT, used_paths, mixers); - } - - if (p->input_mappings) - PA_IDXSET_FOREACH(m, p->input_mappings, idx) - if (m->input_pcm) { -- found_input |= !p->fallback_input; -+ found_input = true; -+ if (p->fallback_input && selected_fallback_input == NULL) { -+ selected_fallback_input = m; -+ } - mapping_paths_probe(m, p, PA_ALSA_DIRECTION_INPUT, used_paths, mixers); - } - } -diff --git a/spa/plugins/alsa/acp/idxset.h b/spa/plugins/alsa/acp/idxset.h -index 4840f0fc..6e88a847 100644 ---- a/spa/plugins/alsa/acp/idxset.h -+++ b/spa/plugins/alsa/acp/idxset.h -@@ -181,6 +181,14 @@ static inline void* pa_idxset_get_by_data(pa_idxset*s, const void *p, uint32_t * - return item->ptr; - } - -+static inline void* pa_idxset_get_by_index(pa_idxset*s, uint32_t idx) -+{ -+ pa_idxset_item *item; -+ if (!pa_array_check_index(&s->array, idx, pa_idxset_item)) -+ return NULL; -+ item = pa_array_get_unchecked(&s->array, idx, pa_idxset_item); -+ return item->ptr; -+} - - #define PA_IDXSET_FOREACH(e, s, idx) \ - for ((e) = pa_idxset_first((s), &(idx)); (e); (e) = pa_idxset_next((s), &(idx))) --- -2.30.2 - diff --git a/0003-media-session-fix-match-rule.patch b/0003-media-session-fix-match-rule.patch deleted file mode 100644 index b0dad55..0000000 --- a/0003-media-session-fix-match-rule.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 87b30e280e1e36cecd57422d9c619293feef2307 Mon Sep 17 00:00:00 2001 -From: Wim Taymans -Date: Sun, 25 Apr 2021 13:47:23 +0200 -Subject: [PATCH 03/10] media-session: fix match rule - -When matching without regex, don't just to a startswith check but also -check that the sizes of the strings match. - -Fixes #1098 ---- - src/examples/media-session/match-rules.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/examples/media-session/match-rules.c b/src/examples/media-session/match-rules.c -index 84dca414..7e2ab701 100644 ---- a/src/examples/media-session/match-rules.c -+++ b/src/examples/media-session/match-rules.c -@@ -72,7 +72,8 @@ static bool find_match(struct spa_json *arr, struct pw_properties *props) - success = true; - regfree(&preg); - } -- } else if (strncmp(str, value, len) == 0) { -+ } else if (strncmp(str, value, len) == 0 && -+ strlen(str) == (size_t)len) { - success = true; - } - } --- -2.30.2 - diff --git a/0004-media-session-keep-track-of-seq-in-pw_-_enum_params.patch b/0004-media-session-keep-track-of-seq-in-pw_-_enum_params.patch deleted file mode 100644 index 2fc8e15..0000000 --- a/0004-media-session-keep-track-of-seq-in-pw_-_enum_params.patch +++ /dev/null @@ -1,151 +0,0 @@ -From a193bf7e1faa03d1907ebecac097f9ccc3420310 Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Sun, 25 Apr 2021 19:11:43 +0300 -Subject: [PATCH 04/10] media-session: keep track of seq in pw_*_enum_params - -If multiple async enum param are running at the same time, take results -only from the latest one. ---- - src/examples/media-session/media-session.c | 55 +++++++++++++++++----- - src/examples/media-session/media-session.h | 4 ++ - 2 files changed, 46 insertions(+), 13 deletions(-) - -diff --git a/src/examples/media-session/media-session.c b/src/examples/media-session/media-session.c -index 640c4caa..21fc8030 100644 ---- a/src/examples/media-session/media-session.c -+++ b/src/examples/media-session/media-session.c -@@ -361,7 +361,7 @@ int sm_object_destroy(struct sm_object *obj) - } - - static struct param *add_param(struct spa_list *param_list, -- uint32_t id, const struct spa_pod *param) -+ int seq, int *param_seq, uint32_t id, const struct spa_pod *param) - { - struct param *p; - -@@ -372,6 +372,19 @@ static struct param *add_param(struct spa_list *param_list, - if (id == SPA_ID_INVALID) - id = SPA_POD_OBJECT_ID(param); - -+ if (id >= SM_MAX_PARAMS) { -+ pw_log_error(NAME": too big param id %d", id); -+ errno = EINVAL; -+ return NULL; -+ } -+ -+ if (seq != param_seq[id]) { -+ pw_log_debug(NAME": ignoring param %d, seq:%d != current_seq:%d", -+ id, seq, param_seq[id]); -+ errno = EBUSY; -+ return NULL; -+ } -+ - p = malloc(sizeof(struct param) + SPA_POD_SIZE(param)); - if (p == NULL) - return NULL; -@@ -490,13 +503,21 @@ static void device_event_info(void *object, const struct pw_device_info *info) - if (info->params[i].user == 0) - continue; - -+ if (id >= SM_MAX_PARAMS) { -+ pw_log_error(NAME" %p: too big param id %d", impl, id); -+ continue; -+ } -+ - device->n_params -= clear_params(&device->param_list, id); - - if (info->params[i].flags & SPA_PARAM_INFO_READ) { -- pw_log_debug(NAME" %p: device %d enum params %d", impl, -- device->obj.id, id); -- pw_device_enum_params((struct pw_device*)device->obj.proxy, -- 1, id, 0, UINT32_MAX, NULL); -+ int res; -+ res = pw_device_enum_params((struct pw_device*)device->obj.proxy, -+ ++device->param_seq[id], id, 0, UINT32_MAX, NULL); -+ if (SPA_RESULT_IS_ASYNC(res)) -+ device->param_seq[id] = res; -+ pw_log_debug(NAME" %p: device %d enum params %d seq:%d", impl, -+ device->obj.id, id, device->param_seq[id]); - } - info->params[i].user = 0; - } -@@ -512,8 +533,8 @@ static void device_event_param(void *object, int seq, - struct sm_device *device = object; - struct impl *impl = SPA_CONTAINER_OF(device->obj.session, struct impl, this); - -- pw_log_debug(NAME" %p: device %p param %d index:%d", impl, device, id, index); -- if (add_param(&device->param_list, id, param) != NULL) -+ pw_log_debug(NAME" %p: device %p param %d index:%d seq:%d", impl, device, id, index, seq); -+ if (add_param(&device->param_list, seq, device->param_seq, id, param) != NULL) - device->n_params++; - - device->obj.avail |= SM_DEVICE_CHANGE_MASK_PARAMS; -@@ -591,13 +612,21 @@ static void node_event_info(void *object, const struct pw_node_info *info) - if (info->params[i].user == 0) - continue; - -+ if (id >= SM_MAX_PARAMS) { -+ pw_log_error(NAME" %p: too big param id %d", impl, id); -+ continue; -+ } -+ - node->n_params -= clear_params(&node->param_list, id); - - if (info->params[i].flags & SPA_PARAM_INFO_READ) { -- pw_log_debug(NAME" %p: node %d enum params %d", impl, -- node->obj.id, id); -- pw_node_enum_params((struct pw_node*)node->obj.proxy, -- 1, id, 0, UINT32_MAX, NULL); -+ int res; -+ res = pw_node_enum_params((struct pw_node*)node->obj.proxy, -+ ++node->param_seq[id], id, 0, UINT32_MAX, NULL); -+ if (SPA_RESULT_IS_ASYNC(res)) -+ node->param_seq[id] = res; -+ pw_log_debug(NAME" %p: node %d enum params %d seq:%d", impl, -+ node->obj.id, id, node->param_seq[id]); - } - info->params[i].user = 0; - } -@@ -613,8 +642,8 @@ static void node_event_param(void *object, int seq, - struct sm_node *node = object; - struct impl *impl = SPA_CONTAINER_OF(node->obj.session, struct impl, this); - -- pw_log_debug(NAME" %p: node %p param %d index:%d", impl, node, id, index); -- if (add_param(&node->param_list, id, param) != NULL) -+ pw_log_debug(NAME" %p: node %p param %d index:%d seq:%d", impl, node, id, index, seq); -+ if (add_param(&node->param_list, seq, node->param_seq, id, param) != NULL) - node->n_params++; - - node->obj.avail |= SM_NODE_CHANGE_MASK_PARAMS; -diff --git a/src/examples/media-session/media-session.h b/src/examples/media-session/media-session.h -index edfb1331..7d036288 100644 ---- a/src/examples/media-session/media-session.h -+++ b/src/examples/media-session/media-session.h -@@ -35,6 +35,8 @@ extern "C" { - - #define SM_TYPE_MEDIA_SESSION PW_TYPE_INFO_OBJECT_BASE "SessionManager" - -+#define SM_MAX_PARAMS 32 -+ - struct sm_media_session; - - struct sm_object_events { -@@ -133,6 +135,7 @@ struct sm_device { - #define SM_DEVICE_CHANGE_MASK_NODES (SM_OBJECT_CHANGE_MASK_LAST<<2) - uint32_t n_params; - struct spa_list param_list; /**< list of sm_param */ -+ int param_seq[SM_MAX_PARAMS]; - struct pw_device_info *info; - struct spa_list node_list; - }; -@@ -148,6 +151,7 @@ struct sm_node { - #define SM_NODE_CHANGE_MASK_PORTS (SM_OBJECT_CHANGE_MASK_LAST<<2) - uint32_t n_params; - struct spa_list param_list; /**< list of sm_param */ -+ int param_seq[SM_MAX_PARAMS]; - struct pw_node_info *info; - struct spa_list port_list; - --- -2.30.2 - diff --git a/0005-pulse-server-keep-track-of-seq-in-pw_-_enum_params.patch b/0005-pulse-server-keep-track-of-seq-in-pw_-_enum_params.patch deleted file mode 100644 index 2ccc291..0000000 --- a/0005-pulse-server-keep-track-of-seq-in-pw_-_enum_params.patch +++ /dev/null @@ -1,155 +0,0 @@ -From f6cbb05aa95f0580bded97c194d928296cc0e874 Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Sun, 25 Apr 2021 20:42:03 +0300 -Subject: [PATCH 05/10] pulse-server: keep track of seq in pw_*_enum_params - -If multiple async enum param are running at the same time, take results -only from the latest one. ---- - src/modules/module-protocol-pulse/manager.c | 55 +++++++++++++++++---- - 1 file changed, 46 insertions(+), 9 deletions(-) - -diff --git a/src/modules/module-protocol-pulse/manager.c b/src/modules/module-protocol-pulse/manager.c -index 8aff48a4..6d0e65f6 100644 ---- a/src/modules/module-protocol-pulse/manager.c -+++ b/src/modules/module-protocol-pulse/manager.c -@@ -26,8 +26,11 @@ - - #include - #include -+#include - #include - -+#define MAX_PARAMS 32 -+ - #define manager_emit_sync(m) spa_hook_list_call(&m->hooks, struct pw_manager_events, sync, 0) - #define manager_emit_added(m,o) spa_hook_list_call(&m->hooks, struct pw_manager_events, added, 0, o) - #define manager_emit_updated(m,o) spa_hook_list_call(&m->hooks, struct pw_manager_events, updated, 0, o) -@@ -72,6 +75,8 @@ struct object { - struct spa_hook proxy_listener; - struct spa_hook object_listener; - -+ int param_seq[MAX_PARAMS]; -+ - struct spa_list data_list; - }; - -@@ -97,7 +102,8 @@ static uint32_t clear_params(struct spa_list *param_list, uint32_t id) - return count; - } - --static struct pw_manager_param *add_param(struct spa_list *params, uint32_t id, const struct spa_pod *param) -+static struct pw_manager_param *add_param(struct spa_list *params, -+ int seq, int *param_seq, uint32_t id, const struct spa_pod *param) - { - struct pw_manager_param *p; - -@@ -109,6 +115,19 @@ static struct pw_manager_param *add_param(struct spa_list *params, uint32_t id, - id = SPA_POD_OBJECT_ID(param); - } - -+ if (id >= MAX_PARAMS) { -+ pw_log_error("too big param id %d", id); -+ errno = EINVAL; -+ return NULL; -+ } -+ -+ if (seq != param_seq[id]) { -+ pw_log_debug("ignoring param %d, seq:%d != current_seq:%d", -+ id, seq, param_seq[id]); -+ errno = EBUSY; -+ return NULL; -+ } -+ - p = malloc(sizeof(*p) + (param != NULL ? SPA_POD_SIZE(param) : 0)); - if (p == NULL) - return NULL; -@@ -287,11 +306,17 @@ static void device_event_info(void *object, const struct pw_device_info *info) - if (info->change_mask & PW_DEVICE_CHANGE_MASK_PARAMS) { - for (i = 0; i < info->n_params; i++) { - uint32_t id = info->params[i].id; -+ int res; - - if (info->params[i].user == 0) - continue; - info->params[i].user = 0; - -+ if (id >= MAX_PARAMS) { -+ pw_log_error("too big param id %d", id); -+ continue; -+ } -+ - switch (id) { - case SPA_PARAM_EnumProfile: - case SPA_PARAM_Profile: -@@ -301,12 +326,14 @@ static void device_event_info(void *object, const struct pw_device_info *info) - case SPA_PARAM_Route: - break; - } -- add_param(&o->pending_list, id, NULL); -+ add_param(&o->pending_list, o->param_seq[id], o->param_seq, id, NULL); - if (!(info->params[i].flags & SPA_PARAM_INFO_READ)) - continue; - -- pw_device_enum_params((struct pw_device*)o->this.proxy, -- 0, id, 0, -1, NULL); -+ res = pw_device_enum_params((struct pw_device*)o->this.proxy, -+ ++o->param_seq[id], id, 0, -1, NULL); -+ if (SPA_RESULT_IS_ASYNC(res)) -+ o->param_seq[id] = res; - } - } - if (changed) { -@@ -343,7 +370,9 @@ static void device_event_param(void *object, int seq, - struct manager *m = o->manager; - struct pw_manager_param *p; - -- p = add_param(&o->pending_list, id, param); -+ p = add_param(&o->pending_list, seq, o->param_seq, id, param); -+ if (p == NULL) -+ return; - - if (id == SPA_PARAM_Route && !has_param(&o->this.param_list, p)) { - uint32_t id, device; -@@ -400,18 +429,26 @@ static void node_event_info(void *object, const struct pw_node_info *info) - if (info->change_mask & PW_NODE_CHANGE_MASK_PARAMS) { - for (i = 0; i < info->n_params; i++) { - uint32_t id = info->params[i].id; -+ int res; - - if (info->params[i].user == 0) - continue; - info->params[i].user = 0; - -+ if (id >= MAX_PARAMS) { -+ pw_log_error("too big param id %d", id); -+ continue; -+ } -+ - changed++; -- add_param(&o->pending_list, id, NULL); -+ add_param(&o->pending_list, o->param_seq[id], o->param_seq, id, NULL); - if (!(info->params[i].flags & SPA_PARAM_INFO_READ)) - continue; - -- pw_node_enum_params((struct pw_node*)o->this.proxy, -- 0, id, 0, -1, NULL); -+ res = pw_node_enum_params((struct pw_node*)o->this.proxy, -+ ++o->param_seq[id], id, 0, -1, NULL); -+ if (SPA_RESULT_IS_ASYNC(res)) -+ o->param_seq[id] = res; - } - } - if (changed) { -@@ -425,7 +462,7 @@ static void node_event_param(void *object, int seq, - const struct spa_pod *param) - { - struct object *o = object; -- add_param(&o->pending_list, id, param); -+ add_param(&o->pending_list, seq, o->param_seq, id, param); - } - - static const struct pw_node_events node_events = { --- -2.30.2 - diff --git a/0006-bluez5-don-t-unregister-HFP-HSP-profiles-when-shutti.patch b/0006-bluez5-don-t-unregister-HFP-HSP-profiles-when-shutti.patch deleted file mode 100644 index 265423a..0000000 --- a/0006-bluez5-don-t-unregister-HFP-HSP-profiles-when-shutti.patch +++ /dev/null @@ -1,29 +0,0 @@ -From b6d6800fc39538db50753df35d117b7b6a8c3311 Mon Sep 17 00:00:00 2001 -From: Pauli Virtanen -Date: Sun, 25 Apr 2021 21:18:45 +0300 -Subject: [PATCH 06/10] bluez5: don't unregister HFP/HSP profiles when shutting - down - -This apparently causes delays in shutdown under some conditions, and -closing the DBus connection should be enought to tell BlueZ that we are -shutting down. ---- - spa/plugins/bluez5/backend-native.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/spa/plugins/bluez5/backend-native.c b/spa/plugins/bluez5/backend-native.c -index ceb00c52..c546c2af 100644 ---- a/spa/plugins/bluez5/backend-native.c -+++ b/spa/plugins/bluez5/backend-native.c -@@ -1870,8 +1870,6 @@ static int backend_native_free(void *data) - - sco_close(backend); - -- backend_native_unregister_profiles(backend); -- - #ifdef HAVE_BLUEZ_5_BACKEND_HSP_NATIVE - dbus_connection_unregister_object_path(backend->conn, PROFILE_HSP_AG); - dbus_connection_unregister_object_path(backend->conn, PROFILE_HSP_HS); --- -2.30.2 - diff --git a/0007-audioconvert-run-lr4-on-tagged-channels-in-generic-c.patch b/0007-audioconvert-run-lr4-on-tagged-channels-in-generic-c.patch deleted file mode 100644 index 8528747..0000000 --- a/0007-audioconvert-run-lr4-on-tagged-channels-in-generic-c.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 86654f2bc9f4b3de114107008bb98e5f526dfe8c Mon Sep 17 00:00:00 2001 -From: Wim Taymans -Date: Mon, 26 Apr 2021 17:34:14 +0200 -Subject: [PATCH 07/10] audioconvert: run lr4 on tagged channels in generic - case - -Mark the LFE channels and run the lowpass filter on them in -the generic case. Generates LFE correctly in 2.1 upmix case. - -See #1095 ---- - spa/plugins/audioconvert/channelmix-ops-c.c | 4 ++++ - spa/plugins/audioconvert/channelmix-ops.c | 9 +++++++-- - spa/plugins/audioconvert/channelmix-ops.h | 1 + - 3 files changed, 12 insertions(+), 2 deletions(-) - -diff --git a/spa/plugins/audioconvert/channelmix-ops-c.c b/spa/plugins/audioconvert/channelmix-ops-c.c -index 588cff19..e7359a93 100644 ---- a/spa/plugins/audioconvert/channelmix-ops-c.c -+++ b/spa/plugins/audioconvert/channelmix-ops-c.c -@@ -78,6 +78,10 @@ channelmix_f32_n_m_c(struct channelmix *mix, uint32_t n_dst, void * SPA_RESTRICT - d[i][n] = sum; - } - } -+ for (i = 0; i < n_dst; i++) { -+ if (mix->lr4_info[i] > 0) -+ lr4_process(&mix->lr4[i], d[i], n_samples); -+ } - } - } - -diff --git a/spa/plugins/audioconvert/channelmix-ops.c b/spa/plugins/audioconvert/channelmix-ops.c -index c669c58b..7c98e645 100644 ---- a/spa/plugins/audioconvert/channelmix-ops.c -+++ b/spa/plugins/audioconvert/channelmix-ops.c -@@ -422,10 +422,15 @@ done: - continue; - mix->matrix_orig[ic][jc++] = matrix[i][j]; - sum += fabs(matrix[i][j]); -- if (i == _CH(LFE)) -- lr4_set(&mix->lr4[ic], BQ_LOWPASS, mix->lfe_cutoff / mix->freq); - } - maxsum = SPA_MAX(maxsum, sum); -+ if (i == _CH(LFE)) { -+ spa_log_debug(mix->log, "channel %d is LFE", ic); -+ lr4_set(&mix->lr4[ic], BQ_LOWPASS, mix->lfe_cutoff / mix->freq); -+ mix->lr4_info[ic] = 1; -+ } else { -+ mix->lr4_info[ic] = 0; -+ } - ic++; - } - if (SPA_FLAG_IS_SET(mix->options, CHANNELMIX_OPTION_NORMALIZE) && -diff --git a/spa/plugins/audioconvert/channelmix-ops.h b/spa/plugins/audioconvert/channelmix-ops.h -index 3dd600e4..8fc15c4f 100644 ---- a/spa/plugins/audioconvert/channelmix-ops.h -+++ b/spa/plugins/audioconvert/channelmix-ops.h -@@ -65,6 +65,7 @@ struct channelmix { - - float freq; /* sample frequency */ - float lfe_cutoff; /* in Hz, 0 is disabled */ -+ uint32_t lr4_info[SPA_AUDIO_MAX_CHANNELS]; - struct lr4 lr4[SPA_AUDIO_MAX_CHANNELS]; - - void (*process) (struct channelmix *mix, uint32_t n_dst, void * SPA_RESTRICT dst[n_dst], --- -2.30.2 - diff --git a/0008-conf-remove-X-bit-from-config-files.patch b/0008-conf-remove-X-bit-from-config-files.patch deleted file mode 100644 index 284df62..0000000 --- a/0008-conf-remove-X-bit-from-config-files.patch +++ /dev/null @@ -1,26 +0,0 @@ -From ca5f08e701b9a8f271637c51040fdfb8e8daf0f5 Mon Sep 17 00:00:00 2001 -From: Wim Taymans -Date: Tue, 27 Apr 2021 15:38:31 +0200 -Subject: [PATCH 08/10] conf: remove X bit from config files - -Fixes #1107 ---- - src/pipewire/conf.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/pipewire/conf.c b/src/pipewire/conf.c -index 50e0b0f9..24b15ffb 100644 ---- a/src/pipewire/conf.c -+++ b/src/pipewire/conf.c -@@ -193,7 +193,7 @@ int pw_conf_save_state(const char *prefix, const char *name, struct pw_propertie - - tmp_name = alloca(strlen(name)+5); - sprintf(tmp_name, "%s.tmp", name); -- if ((fd = openat(sfd, tmp_name, O_CLOEXEC | O_CREAT | O_WRONLY | O_TRUNC, 0700)) < 0) { -+ if ((fd = openat(sfd, tmp_name, O_CLOEXEC | O_CREAT | O_WRONLY | O_TRUNC, 0600)) < 0) { - pw_log_error("can't open file '%s': %m", tmp_name); - res = -errno; - goto error; --- -2.30.2 - diff --git a/0009-Revert-acp-use-the-right-profile-name-and-descriptio.patch b/0009-Revert-acp-use-the-right-profile-name-and-descriptio.patch deleted file mode 100644 index f802f69..0000000 --- a/0009-Revert-acp-use-the-right-profile-name-and-descriptio.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 3a04f6d90ebda0f982ea7da59f28502d20c0bec1 Mon Sep 17 00:00:00 2001 -From: Wim Taymans -Date: Tue, 27 Apr 2021 16:42:52 +0200 -Subject: [PATCH 09/10] Revert "acp: use the right profile name and - description" - -This reverts commit 09106151d3a829ab6108260136b3a4f79f23797d. - -We need the actual name and description of the mapping, not the -profile or else we end up with the full profile description in the -node description instead of the part of the profile that applies to -the device. ---- - spa/plugins/alsa/acp/acp.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/spa/plugins/alsa/acp/acp.c b/spa/plugins/alsa/acp/acp.c -index 2dc1591f..bf84a2ed 100644 ---- a/spa/plugins/alsa/acp/acp.c -+++ b/spa/plugins/alsa/acp/acp.c -@@ -199,8 +199,8 @@ static void device_free(void *data) - pa_hashmap_free(dev->ports); - } - --static void init_device(pa_card *impl, pa_alsa_profile *ap, pa_alsa_device *dev, -- pa_alsa_direction_t direction, pa_alsa_mapping *m, uint32_t index) -+static void init_device(pa_card *impl, pa_alsa_device *dev, pa_alsa_direction_t direction, -+ pa_alsa_mapping *m, uint32_t index) - { - uint32_t i; - -@@ -231,8 +231,8 @@ static void init_device(pa_card *impl, pa_alsa_profile *ap, pa_alsa_device *dev, - dev->device.direction = ACP_DIRECTION_CAPTURE; - pa_proplist_update(dev->proplist, PA_UPDATE_REPLACE, m->input_proplist); - } -- pa_proplist_sets(dev->proplist, PA_PROP_DEVICE_PROFILE_NAME, ap->name); -- pa_proplist_sets(dev->proplist, PA_PROP_DEVICE_PROFILE_DESCRIPTION, ap->description); -+ pa_proplist_sets(dev->proplist, PA_PROP_DEVICE_PROFILE_NAME, m->name); -+ pa_proplist_sets(dev->proplist, PA_PROP_DEVICE_PROFILE_DESCRIPTION, m->description); - pa_proplist_setf(dev->proplist, "card.profile.device", "%u", index); - pa_proplist_as_dict(dev->proplist, &dev->device.props); - -@@ -430,7 +430,7 @@ static void add_profiles(pa_card *impl) - PA_IDXSET_FOREACH(m, ap->output_mappings, idx) { - dev = &m->output; - if (dev->mapping == NULL) { -- init_device(impl, ap, dev, PA_ALSA_DIRECTION_OUTPUT, m, n_devices++); -+ init_device(impl, dev, PA_ALSA_DIRECTION_OUTPUT, m, n_devices++); - pa_dynarray_append(&impl->out.devices, dev); - } - if (impl->use_ucm) { -@@ -451,7 +451,7 @@ static void add_profiles(pa_card *impl) - PA_IDXSET_FOREACH(m, ap->input_mappings, idx) { - dev = &m->input; - if (dev->mapping == NULL) { -- init_device(impl, ap, dev, PA_ALSA_DIRECTION_INPUT, m, n_devices++); -+ init_device(impl, dev, PA_ALSA_DIRECTION_INPUT, m, n_devices++); - pa_dynarray_append(&impl->out.devices, dev); - } - --- -2.30.2 - diff --git a/0010-client-node-use-the-right-port-for-io.patch b/0010-client-node-use-the-right-port-for-io.patch deleted file mode 100644 index 4d3da1e..0000000 --- a/0010-client-node-use-the-right-port-for-io.patch +++ /dev/null @@ -1,30 +0,0 @@ -From b136b3e2e34f9efb410a4041fa1c6f780217e0bf Mon Sep 17 00:00:00 2001 -From: Wim Taymans -Date: Wed, 28 Apr 2021 17:04:36 +0200 -Subject: [PATCH 10/10] client-node: use the right port for io - -To set the io on the mixer ports, we need to use the same id that -was used to add the port, not the id we use to identify the mixer -structure. - -Fixes #759 ---- - src/modules/module-client-node/remote-node.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/modules/module-client-node/remote-node.c b/src/modules/module-client-node/remote-node.c -index ac9fae12..61919aab 100644 ---- a/src/modules/module-client-node/remote-node.c -+++ b/src/modules/module-client-node/remote-node.c -@@ -793,7 +793,7 @@ client_node_port_set_io(void *object, - } - - if ((res = spa_node_port_set_io(mix->port->mix, -- direction, mix_id, id, ptr, size)) < 0) { -+ direction, mix->mix.port.port_id, id, ptr, size)) < 0) { - if (res == -ENOTSUP) - res = 0; - else --- -2.30.2 - diff --git a/pipewire.spec b/pipewire.spec index 3e04776..73d105f 100644 --- a/pipewire.spec +++ b/pipewire.spec @@ -1,6 +1,6 @@ %global majorversion 0 %global minorversion 3 -%global microversion 26 +%global microversion 27 %global apiversion 0.3 %global spaversion 0.2 @@ -8,7 +8,7 @@ %global libversion %{soversion}.%(bash -c '((intversion = (%{minorversion} * 100) + %{microversion})); echo ${intversion}').0 # For rpmdev-bumpspec and releng automation -%global baserelease 4 +%global baserelease 1 #global snapdate 20210107 #global gitcommit b17db2cebc1a5ab2c01851d29c05f79cd2f262bb @@ -53,15 +53,6 @@ Source0: https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/%{ver %endif ## upstream patches -Patch0001: 0002-acp-sync-with-pulseaudio.patch -Patch0002: 0003-media-session-fix-match-rule.patch -Patch0003: 0004-media-session-keep-track-of-seq-in-pw_-_enum_params.patch -Patch0004: 0005-pulse-server-keep-track-of-seq-in-pw_-_enum_params.patch -Patch0005: 0006-bluez5-don-t-unregister-HFP-HSP-profiles-when-shutti.patch -Patch0006: 0007-audioconvert-run-lr4-on-tagged-channels-in-generic-c.patch -Patch0007: 0008-conf-remove-X-bit-from-config-files.patch -Patch0008: 0009-Revert-acp-use-the-right-profile-name-and-descriptio.patch -Patch0009: 0010-client-node-use-the-right-port-for-io.patch ## upstreamable patches @@ -71,6 +62,7 @@ Patch1001: 0001-conf-start-media-session-through-pipewire.patch BuildRequires: gettext BuildRequires: meson >= 0.49.0 BuildRequires: gcc +BuildRequires: g++ BuildRequires: pkgconfig BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(dbus-1) @@ -481,6 +473,9 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %endif %changelog +* Thu May 06 2021 Wim Taymans - 0.3.27-1 +- Update to 0.3.27 + * Thu Apr 29 2021 Wim Taymans - 0.3.26-4 - Add some more important upstream patches. diff --git a/sources b/sources index e5dd979..f7cf7a7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (pipewire-0.3.26.tar.gz) = d771956a42801a6e07fac48a175363eb4107a9fba13d649ff5c2cdc40044c84a61bf56050783507f6dd8efae8c59a2be07ec67433827335ae60f8116c4a4e178 +SHA512 (pipewire-0.3.27.tar.gz) = a2df1df8e43846b91fbeedeb1cda9c73b970ac9de58d8b4e97ada54ee74a8f26a168504289c7392c94cc7ea54aa01ada4791c66a5d3159a2bc980df633f6bcfe