From f265f17242b04ae036b4dc174fa95401d895dbc5 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Sat, 16 Mar 2024 18:48:52 +0000 Subject: gentoo auto-resync : 16:03:2024 - 18:48:51 --- media-sound/pulseaudio-daemon/Manifest | 4 - ...eaudio-16.1-add-more-standard-samplerates.patch | 35 -- .../pulseaudio-16.1-fix-memblock-alignment.patch | 122 ------- ...dio-16.1-fix-resampler-oversized-memblock.patch | 55 --- ...dio-16.1-fix-uac2-broken-avoid-resampling.patch | 382 --------------------- 5 files changed, 598 deletions(-) delete mode 100644 media-sound/pulseaudio-daemon/files/pulseaudio-16.1-add-more-standard-samplerates.patch delete mode 100644 media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-memblock-alignment.patch delete mode 100644 media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-resampler-oversized-memblock.patch delete mode 100644 media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-uac2-broken-avoid-resampling.patch (limited to 'media-sound/pulseaudio-daemon') diff --git a/media-sound/pulseaudio-daemon/Manifest b/media-sound/pulseaudio-daemon/Manifest index fdf34542b613..743a6e669878 100644 --- a/media-sound/pulseaudio-daemon/Manifest +++ b/media-sound/pulseaudio-daemon/Manifest @@ -1,9 +1,5 @@ AUX enable-autospawn.conf 65 BLAKE2B 47e57076b19000ca3c57f0368e453198131c41a5a9c2d0cc8632f0a7ed4e5c992cf93e3c7651c4f3b59ceaf177d4d811bd6774676a2b005ec12259e56d99b4d2 SHA512 61f90b0d19e807a672bd39d190c1102db0b8c46284cf09d4a19b4b96d566633e56a60d21a3a1374e447e8e06496a3aef56bf5ae574337c081e7cf18842458e59 AUX pulseaudio-16.0-optional-module-console-kit.patch 3077 BLAKE2B 3b8abc67478f6c8848a24788bdceeb5bce868bf5214a092c3abbd39a3102679e4b390e56231de0559c8389730a2a75ba21bf4d9f9d942792589c6db66d6eb04d SHA512 bec1a747593d9130bb8cfb05b0894e467c953264879f2a856a420b07ee688640ec2279c136daa825b21e0e7e3bfc3aa1e333487a776d1c7ffb9a6d0293a0502b -AUX pulseaudio-16.1-add-more-standard-samplerates.patch 1422 BLAKE2B 2e7ec0ee8560d80414550b0fe1eb8bfa0e1c9d90668dbb6366f0b23e651f6723fcd65a87ba16caba33b632919b39742cbc6b630f2a5a86952333606858b75a29 SHA512 534862debdac1aa091cedcd8058f7b0ef1cafc5c5f9bc72a96fc065b04b4809a6aed2f119fa71bfcd9ac9011d6809901972006efb908353f8baa16621024a657 -AUX pulseaudio-16.1-fix-memblock-alignment.patch 5531 BLAKE2B 419fdd5fde012455421e5020bc00105685e65b87c972eb50676f4f5e6a58a8d0fa574c0e3d946c15ce4a6ec42e9465913e3a60742784939d85d298bc1bbdf610 SHA512 e7b948a0eee82162fb2fbb8a679e1fcedd91a8525c3528e98c990aa33370a33345dfe7fa02a529a2d4e484ce011c882e0458edd9113e20c2a652a8bb8815d175 -AUX pulseaudio-16.1-fix-resampler-oversized-memblock.patch 2698 BLAKE2B 1543bed3fd24a7d574ff2415f63c5e8495c0af0e95085a4c4b598d9fbcda25f6338b8a9bbbda6c9d29e42e1ffe77b2456d05b16b55386c557978427a9e0b5a8a SHA512 72ba1c128f5b5c5b665569fddd31995bdf099b152ce928f3177d2267735968b26b6a2e3cfa90e01f377f910eaa8eaf2d7dbded9ad443ca863fcfa0929cd548af -AUX pulseaudio-16.1-fix-uac2-broken-avoid-resampling.patch 16883 BLAKE2B 013b3124b7c37ef63c823a2069f799047be2d07e4d2b78f78e1b5bb0041d26dccf9fc09269e9cf8b51da0802a9a33e6aad10cd1bb8c8c1580bf12579582ae446 SHA512 a615c02aa2c4c9bcdd186b9b340e3f4f49d00925cb702df8b698cfb00e7ef6bacc97165ae0e21d67befdc47f770eed2acaa39598deb9eccbf89355fa60e12d0f AUX pulseaudio-16.1-module-combine-sink-load-crash.patch 1052 BLAKE2B 09fa471cb40a83bd1969795ed8f7f3b1418efb99e1d79e6135785d4e54f0ebcb44813cf584067f4462b800e18661a508a120521e606687e2a49836020eb0ccf3 SHA512 3817f5267fd8287a7be4004189432601128c10c592fe54e4bdbdbb1a6ddd2fadede82dab047ea6693ef81cb04280e1fa4968d883ce7e03c2646145488f36d52a AUX pulseaudio-16.1-module-combine-sink-unload-crash.patch 802 BLAKE2B 4c82bf606bb6b7123d53dac093044e9d74328f7eef616ad2da4a2c37e7dca3223e2ecc1bafd7dfc4b363c5bff20dd915a5f328236389b6dae37a74688fe886e0 SHA512 4cb64be8a41e16cf854d992416bdc25b327ab8adc706e091e20fc6bf35c7161ed798b611db2060a14af5974a987f10931f9086b45bb0b95cd82010ce952e0c80 AUX pulseaudio-16.1-move-qpaeq-to-daemon.patch 1029 BLAKE2B f7695aff795d0b0828d95eaba7b059492f33315a3086fb6cfd63e7de011c0416a5ca56e26932ac7c6ee3784dc63ad0b5918bedcf23bc1d8d3fbdfb8df72c78d1 SHA512 0ba164221dca646728ea7ecbb26fa8d00b65cb45e4dc71a0298e80349548dd1adca2142b26dba138618b27f71c955186d255a45b1be790d8b9da43d60817daa4 diff --git a/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-add-more-standard-samplerates.patch b/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-add-more-standard-samplerates.patch deleted file mode 100644 index e1ea200c4c4c..000000000000 --- a/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-add-more-standard-samplerates.patch +++ /dev/null @@ -1,35 +0,0 @@ -commit 86c5fbab5778685e19b5a4a9b8eb04ca90dff780 -Author: Igor V. Kovalenko -Date: Sun Feb 5 19:49:10 2023 +0300 - - alsa-util: Add more standard sample rates. - - Part-of: - -diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c -index 9f35cb20f..fd30f18bd 100644 ---- a/src/modules/alsa/alsa-util.c -+++ b/src/modules/alsa/alsa-util.c -@@ -1430,7 +1430,8 @@ unsigned int *pa_alsa_get_supported_rates(snd_pcm_t *pcm, unsigned int fallback_ - 32000, 44100, 48000, - 64000, 88200, 96000, - 128000, 176400, 192000, -- 384000 }; -+ 352800, 384000, -+ 705600, 768000 }; - bool supported[PA_ELEMENTSOF(all_rates)] = { false, }; - snd_pcm_hw_params_t *hwparams; - unsigned int i, j, n, *rates = NULL; -diff --git a/src/pulse/sample.h b/src/pulse/sample.h -index 35346a865..65c0c5d6b 100644 ---- a/src/pulse/sample.h -+++ b/src/pulse/sample.h -@@ -128,7 +128,7 @@ PA_C_DECL_BEGIN - #define PA_CHANNELS_MAX 32U - - /** Maximum allowed sample rate */ --#define PA_RATE_MAX (48000U*8U) -+#define PA_RATE_MAX (48000U*16U) - - /** Sample format */ - typedef enum pa_sample_format { diff --git a/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-memblock-alignment.patch b/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-memblock-alignment.patch deleted file mode 100644 index b05e530ac89d..000000000000 --- a/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-memblock-alignment.patch +++ /dev/null @@ -1,122 +0,0 @@ -commit 300db779224625144d6279d230c2daa857c967d8 -Author: Igor V. Kovalenko -Date: Thu Feb 9 13:28:29 2023 +0300 - - pstream: Pass frame size to keep split memblock parts aligned - - `pa_pstream_send_memblock()` would split incoming memblock into parts not - exceeding maximum pool block size. - - To make sure split parts of memblock are still frame-aligned add new `align` arg - to `pa_pstream_send_memblock`, find out required alignment from stream sample - format and pass it there. Bump default alignment to 256 which is good up to - 32bit 64ch frames. - - Part-of: - -diff --git a/src/modules/module-tunnel.c b/src/modules/module-tunnel.c -index 61f427bd3..ab094ba4e 100644 ---- a/src/modules/module-tunnel.c -+++ b/src/modules/module-tunnel.c -@@ -676,7 +676,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse - * IO thread context where the rest of the messages are - * dispatched. Yeah, ugly, but I am a lazy bastard. */ - -- pa_pstream_send_memblock(u->pstream, u->channel, 0, PA_SEEK_RELATIVE, chunk); -+ pa_pstream_send_memblock(u->pstream, u->channel, 0, PA_SEEK_RELATIVE, chunk, pa_frame_size(&u->sink->sample_spec)); - - u->receive_counter += chunk->length; - -diff --git a/src/pulse/stream.c b/src/pulse/stream.c -index 0aa627396..3585b27e8 100644 ---- a/src/pulse/stream.c -+++ b/src/pulse/stream.c -@@ -1535,7 +1535,7 @@ int pa_stream_write_ext_free( - s->write_memblock = NULL; - s->write_data = NULL; - -- pa_pstream_send_memblock(s->context->pstream, s->channel, offset, seek, &chunk); -+ pa_pstream_send_memblock(s->context->pstream, s->channel, offset, seek, &chunk, pa_frame_size(&s->sample_spec)); - pa_memblock_unref(chunk.memblock); - - } else { -@@ -1569,7 +1569,7 @@ int pa_stream_write_ext_free( - pa_memblock_release(chunk.memblock); - } - -- pa_pstream_send_memblock(s->context->pstream, s->channel, t_offset, t_seek, &chunk); -+ pa_pstream_send_memblock(s->context->pstream, s->channel, t_offset, t_seek, &chunk, pa_frame_size(&s->sample_spec)); - - t_offset = 0; - t_seek = PA_SEEK_RELATIVE; -diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c -index 672182fbc..1342dee10 100644 ---- a/src/pulsecore/protocol-native.c -+++ b/src/pulsecore/protocol-native.c -@@ -1260,7 +1260,7 @@ static void native_connection_send_memblock(pa_native_connection *c) { - if (schunk.length > r->buffer_attr.fragsize) - schunk.length = r->buffer_attr.fragsize; - -- pa_pstream_send_memblock(c->pstream, r->index, 0, PA_SEEK_RELATIVE, &schunk); -+ pa_pstream_send_memblock(c->pstream, r->index, 0, PA_SEEK_RELATIVE, &schunk, pa_memblockq_get_base(r->memblockq)); - - pa_memblockq_drop(r->memblockq, schunk.length); - pa_memblock_unref(schunk.memblock); -@@ -2535,7 +2535,7 @@ static void setup_srbchannel(pa_native_connection *c, pa_mem_type_t shm_type) { - mc.memblock = srbt.memblock; - mc.index = 0; - mc.length = pa_memblock_get_length(srbt.memblock); -- pa_pstream_send_memblock(c->pstream, 0, 0, 0, &mc); -+ pa_pstream_send_memblock(c->pstream, 0, 0, 0, &mc, 0); - - c->srbpending = srb; - return; -diff --git a/src/pulsecore/pstream.c b/src/pulsecore/pstream.c -index 7147b776a..ff62f464b 100644 ---- a/src/pulsecore/pstream.c -+++ b/src/pulsecore/pstream.c -@@ -82,6 +82,10 @@ typedef uint32_t pa_pstream_descriptor[PA_PSTREAM_DESCRIPTOR_MAX]; - */ - #define FRAME_SIZE_MAX_ALLOW (1024*1024*16) - -+/* Default memblock alignment used with pa_pstream_send_memblock() -+ */ -+#define DEFAULT_PSTREAM_MEMBLOCK_ALIGN (256) -+ - PA_STATIC_FLIST_DECLARE(items, 0, pa_xfree); - - struct item_info { -@@ -475,7 +479,7 @@ void pa_pstream_send_packet(pa_pstream*p, pa_packet *packet, pa_cmsg_ancil_data - p->mainloop->defer_enable(p->defer_event, 1); - } - --void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek_mode, const pa_memchunk *chunk) { -+void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek_mode, const pa_memchunk *chunk, size_t align) { - size_t length, idx; - size_t bsm; - -@@ -492,6 +496,11 @@ void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa - - bsm = pa_mempool_block_size_max(p->mempool); - -+ if (align == 0) -+ align = DEFAULT_PSTREAM_MEMBLOCK_ALIGN; -+ -+ bsm = (bsm / align) * align; -+ - while (length > 0) { - struct item_info *i; - size_t n; -diff --git a/src/pulsecore/pstream.h b/src/pulsecore/pstream.h -index 2bff270ad..88bdca4cc 100644 ---- a/src/pulsecore/pstream.h -+++ b/src/pulsecore/pstream.h -@@ -51,7 +51,7 @@ void pa_pstream_unlink(pa_pstream *p); - int pa_pstream_attach_memfd_shmid(pa_pstream *p, unsigned shm_id, int memfd_fd); - - void pa_pstream_send_packet(pa_pstream*p, pa_packet *packet, pa_cmsg_ancil_data *ancil_data); --void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek, const pa_memchunk *chunk); -+void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek, const pa_memchunk *chunk, size_t align); - void pa_pstream_send_release(pa_pstream *p, uint32_t block_id); - void pa_pstream_send_revoke(pa_pstream *p, uint32_t block_id); - diff --git a/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-resampler-oversized-memblock.patch b/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-resampler-oversized-memblock.patch deleted file mode 100644 index bd3d39d0af82..000000000000 --- a/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-resampler-oversized-memblock.patch +++ /dev/null @@ -1,55 +0,0 @@ -commit 1cfa7378236b3cf9daf3be09d3227b92df69cc53 -Author: Igor V. Kovalenko -Date: Wed Feb 8 03:24:59 2023 +0300 - - resampler: Fix oversized memblock pushed from resampler - - The assumption that the format enum is ordered by size is not valid for quite - some time, since 24bit formats were appended to format enum later than 32bit - formats. This causes resampler to produce properly aligned memblock of size - larger than maximum mempool block size if input format is 24bit and output - format is 32bit. - - Oversized block is getting split by `pa_pstream_send_memblock()` into parts of - size not exceeding maximum mempool block size. This usually works well but for - 32ch 32bit 48000Hz stream the frame alignment is 128 bytes and maximum mempool - block size value is multiple of 64 but not 128 bytes, therefore resulting parts - are misaligned. - - On receiving side this causes extra allocation of 128 byte chunk while `mcalign` - helper reassembles properly aligned frame out of second block of misaligned - size. While first and second properly aligned frames are retrieved successfully - from `mcalign` helper, third retrieved frame would end up with properly aligned - size but misaligned memblock index (in this example, that would be 64 bytes.) - Attempt to push a chunk with misaligned memblock index causes assertion failure - - Assertion 'uchunk->index % bq->base == 0' failed at memblockq.c:289, - function pa_memblockq_push(). Aborting. - - Fix oversized block issue by checking proper size of format instead of enum - value. - - Fixes: a67c21f09 ("merge 'lennart' branch back into trunk.") - Part-of: - -diff --git a/src/pulsecore/resampler.c b/src/pulsecore/resampler.c -index b035f67ed..ba18c92c4 100644 ---- a/src/pulsecore/resampler.c -+++ b/src/pulsecore/resampler.c -@@ -613,9 +613,13 @@ size_t pa_resampler_max_block_size(pa_resampler *r) { - * conversion */ - max_ss.channels = (uint8_t) (PA_MAX(r->i_ss.channels, r->o_ss.channels)); - -- /* We silently assume that the format enum is ordered by size */ -- max_ss.format = PA_MAX(r->i_ss.format, r->o_ss.format); -- max_ss.format = PA_MAX(max_ss.format, r->work_format); -+ max_ss.format = r->i_ss.format; -+ -+ if (pa_sample_size_of_format(max_ss.format) < pa_sample_size_of_format(r->o_ss.format)) -+ max_ss.format = r->o_ss.format; -+ -+ if (pa_sample_size_of_format(max_ss.format) < pa_sample_size_of_format(r->work_format)) -+ max_ss.format = r->work_format; - - max_ss.rate = PA_MAX(r->i_ss.rate, r->o_ss.rate); - diff --git a/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-uac2-broken-avoid-resampling.patch b/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-uac2-broken-avoid-resampling.patch deleted file mode 100644 index a260ced351a5..000000000000 --- a/media-sound/pulseaudio-daemon/files/pulseaudio-16.1-fix-uac2-broken-avoid-resampling.patch +++ /dev/null @@ -1,382 +0,0 @@ -commit aed52c507f345d0b5c4cd2b1d2c58dae2d904b53 -Author: Igor V. Kovalenko -Date: Wed Feb 22 01:19:24 2023 +0300 - - alsa-util: Perform format and rate detection before setting HW params - - Perform detection of supported sample format and rates just after device is - opened, before `snd_pcm_hw_params()` is called for the first time. This fixes a - problem where device restricts available sample rates after HW params are set - preventing sample rate detection (seen with UAC2 devices and kernel 6.1.9) - - Bug: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1414 - Bug: https://github.com/alsa-project/alsa-lib/issues/119 - Part-of: - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index 49c39687c..c272e392b 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -5074,7 +5074,7 @@ static snd_pcm_t* mapping_open_pcm(pa_alsa_mapping *m, - handle = pa_alsa_open_by_template( - m->device_strings, dev_id, NULL, &try_ss, - &try_map, mode, &try_period_size, -- &try_buffer_size, 0, NULL, NULL, exact_channels); -+ &try_buffer_size, 0, NULL, NULL, NULL, NULL, exact_channels); - if (handle && !exact_channels && m->channel_map.channels != try_map.channels) { - char buf[PA_CHANNEL_MAP_SNPRINT_MAX]; - pa_log_debug("Channel map for mapping '%s' permanently changed to '%s'", m->name, -diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c -index b249df680..ca22f195f 100644 ---- a/src/modules/alsa/alsa-sink.c -+++ b/src/modules/alsa/alsa-sink.c -@@ -2527,7 +2527,9 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca - &ss, &map, - SND_PCM_STREAM_PLAYBACK, - &period_frames, &buffer_frames, tsched_frames, -- &b, &d, mapping))) -+ &b, &d, -+ &u->supported_formats, &u->supported_rates, -+ mapping))) - goto fail; - - } else if ((dev_id = pa_modargs_get_value(ma, "device_id", NULL))) { -@@ -2541,7 +2543,9 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca - &ss, &map, - SND_PCM_STREAM_PLAYBACK, - &period_frames, &buffer_frames, tsched_frames, -- &b, &d, profile_set, &mapping))) -+ &b, &d, -+ &u->supported_formats, &u->supported_rates, -+ profile_set, &mapping))) - goto fail; - - } else { -@@ -2552,7 +2556,9 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca - &ss, &map, - SND_PCM_STREAM_PLAYBACK, - &period_frames, &buffer_frames, tsched_frames, -- &b, &d, false))) -+ &b, &d, -+ &u->supported_formats, &u->supported_rates, -+ false))) - goto fail; - } - -@@ -2598,13 +2604,11 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca - - u->verified_sample_spec = ss; - -- u->supported_formats = pa_alsa_get_supported_formats(u->pcm_handle, ss.format); - if (!u->supported_formats) { - pa_log_error("Failed to find any supported sample formats."); - goto fail; - } - -- u->supported_rates = pa_alsa_get_supported_rates(u->pcm_handle, ss.rate); - if (!u->supported_rates) { - pa_log_error("Failed to find any supported sample rates."); - goto fail; -diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c -index ef8b12c32..d88c47f1f 100644 ---- a/src/modules/alsa/alsa-source.c -+++ b/src/modules/alsa/alsa-source.c -@@ -2218,7 +2218,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p - &ss, &map, - SND_PCM_STREAM_CAPTURE, - &period_frames, &buffer_frames, tsched_frames, -- &b, &d, mapping))) -+ &b, &d, &u->supported_formats, &u->supported_rates, mapping))) - goto fail; - - } else if ((dev_id = pa_modargs_get_value(ma, "device_id", NULL))) { -@@ -2232,7 +2232,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p - &ss, &map, - SND_PCM_STREAM_CAPTURE, - &period_frames, &buffer_frames, tsched_frames, -- &b, &d, profile_set, &mapping))) -+ &b, &d, &u->supported_formats, &u->supported_rates, profile_set, &mapping))) - goto fail; - - } else { -@@ -2243,7 +2243,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p - &ss, &map, - SND_PCM_STREAM_CAPTURE, - &period_frames, &buffer_frames, tsched_frames, -- &b, &d, false))) -+ &b, &d, &u->supported_formats, &u->supported_rates, false))) - goto fail; - } - -@@ -2279,13 +2279,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p - - u->verified_sample_spec = ss; - -- u->supported_formats = pa_alsa_get_supported_formats(u->pcm_handle, ss.format); - if (!u->supported_formats) { - pa_log_error("Failed to find any supported sample formats."); - goto fail; - } - -- u->supported_rates = pa_alsa_get_supported_rates(u->pcm_handle, ss.rate); - if (!u->supported_rates) { - pa_log_error("Failed to find any supported sample rates."); - goto fail; -diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c -index e75756f53..744e7aae1 100644 ---- a/src/modules/alsa/alsa-ucm.c -+++ b/src/modules/alsa/alsa-ucm.c -@@ -2026,7 +2026,7 @@ static snd_pcm_t* mapping_open_pcm(pa_alsa_ucm_config *ucm, pa_alsa_mapping *m, - try_buffer_size = ucm->core->default_n_fragments * try_period_size; - - pcm = pa_alsa_open_by_device_string(m->device_strings[0], NULL, &try_ss, -- &try_map, mode, &try_period_size, &try_buffer_size, 0, NULL, NULL, exact_channels); -+ &try_map, mode, &try_period_size, &try_buffer_size, 0, NULL, NULL, NULL, NULL, exact_channels); - - if (pcm) { - if (!exact_channels) -diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c -index fd30f18bd..b631c870c 100644 ---- a/src/modules/alsa/alsa-util.c -+++ b/src/modules/alsa/alsa-util.c -@@ -523,6 +523,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto( - snd_pcm_uframes_t tsched_size, - bool *use_mmap, - bool *use_tsched, -+ pa_sample_format_t **query_supported_formats, -+ unsigned int **query_supported_rates, - pa_alsa_profile_set *ps, - pa_alsa_mapping **mapping) { - -@@ -561,6 +563,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto( - tsched_size, - use_mmap, - use_tsched, -+ query_supported_formats, -+ query_supported_rates, - m); - - if (pcm_handle) { -@@ -588,6 +592,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto( - tsched_size, - use_mmap, - use_tsched, -+ query_supported_formats, -+ query_supported_rates, - m); - - if (pcm_handle) { -@@ -612,6 +618,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto( - tsched_size, - use_mmap, - use_tsched, -+ query_supported_formats, -+ query_supported_rates, - false); - pa_xfree(d); - -@@ -632,6 +640,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_mapping( - snd_pcm_uframes_t tsched_size, - bool *use_mmap, - bool *use_tsched, -+ pa_sample_format_t **query_supported_formats, -+ unsigned int **query_supported_rates, - pa_alsa_mapping *m) { - - snd_pcm_t *pcm_handle; -@@ -661,6 +671,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_mapping( - tsched_size, - use_mmap, - use_tsched, -+ query_supported_formats, -+ query_supported_rates, - pa_channel_map_valid(&m->channel_map) /* Query the channel count if we don't know what we want */); - - if (!pcm_handle) -@@ -684,6 +696,8 @@ snd_pcm_t *pa_alsa_open_by_device_string( - snd_pcm_uframes_t tsched_size, - bool *use_mmap, - bool *use_tsched, -+ pa_sample_format_t **query_supported_formats, -+ unsigned int **query_supported_rates, - bool require_exact_channel_number) { - - int err; -@@ -711,6 +725,12 @@ snd_pcm_t *pa_alsa_open_by_device_string( - - pa_log_debug("Managed to open %s", d); - -+ if (query_supported_formats) -+ *query_supported_formats = pa_alsa_get_supported_formats(pcm_handle, ss->format); -+ -+ if (query_supported_rates) -+ *query_supported_rates = pa_alsa_get_supported_rates(pcm_handle, ss->rate); -+ - if ((err = pa_alsa_set_hw_params( - pcm_handle, - ss, -@@ -784,6 +804,8 @@ snd_pcm_t *pa_alsa_open_by_template( - snd_pcm_uframes_t tsched_size, - bool *use_mmap, - bool *use_tsched, -+ pa_sample_format_t **query_supported_formats, -+ unsigned int **query_supported_rates, - bool require_exact_channel_number) { - - snd_pcm_t *pcm_handle; -@@ -805,6 +827,8 @@ snd_pcm_t *pa_alsa_open_by_template( - tsched_size, - use_mmap, - use_tsched, -+ query_supported_formats, -+ query_supported_rates, - require_exact_channel_number); - - pa_xfree(d); -diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h -index 2eed3eac3..c65801104 100644 ---- a/src/modules/alsa/alsa-util.h -+++ b/src/modules/alsa/alsa-util.h -@@ -67,6 +67,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto( - snd_pcm_uframes_t tsched_size, - bool *use_mmap, /* modified at return */ - bool *use_tsched, /* modified at return */ -+ pa_sample_format_t **query_supported_formats, /* modified at return */ -+ unsigned int **query_supported_rates, /* modified at return */ - pa_alsa_profile_set *ps, - pa_alsa_mapping **mapping); /* modified at return */ - -@@ -82,6 +84,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_mapping( - snd_pcm_uframes_t tsched_size, - bool *use_mmap, /* modified at return */ - bool *use_tsched, /* modified at return */ -+ pa_sample_format_t **query_supported_formats, /* modified at return */ -+ unsigned int **query_supported_rates, /* modified at return */ - pa_alsa_mapping *mapping); - - /* Opens the explicit ALSA device */ -@@ -96,6 +100,8 @@ snd_pcm_t *pa_alsa_open_by_device_string( - snd_pcm_uframes_t tsched_size, - bool *use_mmap, /* modified at return */ - bool *use_tsched, /* modified at return */ -+ pa_sample_format_t **query_supported_formats, /* modified at return */ -+ unsigned int **query_supported_rates, /* modified at return */ - bool require_exact_channel_number); - - /* Opens the explicit ALSA device with a fallback list */ -@@ -111,6 +117,8 @@ snd_pcm_t *pa_alsa_open_by_template( - snd_pcm_uframes_t tsched_size, - bool *use_mmap, /* modified at return */ - bool *use_tsched, /* modified at return */ -+ pa_sample_format_t **query_supported_formats, /* modified at return */ -+ unsigned int **query_supported_rates, /* modified at return */ - bool require_exact_channel_number); - - void pa_alsa_dump(pa_log_level_t level, snd_pcm_t *pcm); -commit 5ab2b9cb0e32190c3ea12b0f4cb7533d7340bbf1 -Author: Igor V. Kovalenko -Date: Wed Feb 22 01:50:22 2023 +0300 - - alsa-util: Fix pa_alsa_get_supported_formats fallback. - - Looks like original intention was to scan over sample formats supported by PA, - but code does the scan by list of alsa formats. Reverse the map and adjust - fallback case which now can use the same map. - - Part-of: - -diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c -index b631c870c..d3c092f52 100644 ---- a/src/modules/alsa/alsa-util.c -+++ b/src/modules/alsa/alsa-util.c -@@ -1502,35 +1502,35 @@ unsigned int *pa_alsa_get_supported_rates(snd_pcm_t *pcm, unsigned int fallback_ - } - - pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_format_t fallback_format) { -- static const snd_pcm_format_t format_trans_to_pa[] = { -- [SND_PCM_FORMAT_U8] = PA_SAMPLE_U8, -- [SND_PCM_FORMAT_A_LAW] = PA_SAMPLE_ALAW, -- [SND_PCM_FORMAT_MU_LAW] = PA_SAMPLE_ULAW, -- [SND_PCM_FORMAT_S16_LE] = PA_SAMPLE_S16LE, -- [SND_PCM_FORMAT_S16_BE] = PA_SAMPLE_S16BE, -- [SND_PCM_FORMAT_FLOAT_LE] = PA_SAMPLE_FLOAT32LE, -- [SND_PCM_FORMAT_FLOAT_BE] = PA_SAMPLE_FLOAT32BE, -- [SND_PCM_FORMAT_S32_LE] = PA_SAMPLE_S32LE, -- [SND_PCM_FORMAT_S32_BE] = PA_SAMPLE_S32BE, -- [SND_PCM_FORMAT_S24_3LE] = PA_SAMPLE_S24LE, -- [SND_PCM_FORMAT_S24_3BE] = PA_SAMPLE_S24BE, -- [SND_PCM_FORMAT_S24_LE] = PA_SAMPLE_S24_32LE, -- [SND_PCM_FORMAT_S24_BE] = PA_SAMPLE_S24_32BE, -+ static const snd_pcm_format_t format_trans_to_pcm[] = { -+ [PA_SAMPLE_U8] = SND_PCM_FORMAT_U8, -+ [PA_SAMPLE_ALAW] = SND_PCM_FORMAT_A_LAW, -+ [PA_SAMPLE_ULAW] = SND_PCM_FORMAT_MU_LAW, -+ [PA_SAMPLE_S16LE] = SND_PCM_FORMAT_S16_LE, -+ [PA_SAMPLE_S16BE] = SND_PCM_FORMAT_S16_BE, -+ [PA_SAMPLE_FLOAT32LE] = SND_PCM_FORMAT_FLOAT_LE, -+ [PA_SAMPLE_FLOAT32BE] = SND_PCM_FORMAT_FLOAT_BE, -+ [PA_SAMPLE_S32LE] = SND_PCM_FORMAT_S32_LE, -+ [PA_SAMPLE_S32BE] = SND_PCM_FORMAT_S32_BE, -+ [PA_SAMPLE_S24LE] = SND_PCM_FORMAT_S24_3LE, -+ [PA_SAMPLE_S24BE] = SND_PCM_FORMAT_S24_3BE, -+ [PA_SAMPLE_S24_32LE] = SND_PCM_FORMAT_S24_LE, -+ [PA_SAMPLE_S24_32BE] = SND_PCM_FORMAT_S24_BE, - }; -- static const snd_pcm_format_t all_formats[] = { -- SND_PCM_FORMAT_U8, -- SND_PCM_FORMAT_A_LAW, -- SND_PCM_FORMAT_MU_LAW, -- SND_PCM_FORMAT_S16_LE, -- SND_PCM_FORMAT_S16_BE, -- SND_PCM_FORMAT_FLOAT_LE, -- SND_PCM_FORMAT_FLOAT_BE, -- SND_PCM_FORMAT_S32_LE, -- SND_PCM_FORMAT_S32_BE, -- SND_PCM_FORMAT_S24_3LE, -- SND_PCM_FORMAT_S24_3BE, -- SND_PCM_FORMAT_S24_LE, -- SND_PCM_FORMAT_S24_BE, -+ static const pa_sample_format_t all_formats[] = { -+ PA_SAMPLE_U8, -+ PA_SAMPLE_ALAW, -+ PA_SAMPLE_ULAW, -+ PA_SAMPLE_S16LE, -+ PA_SAMPLE_S16BE, -+ PA_SAMPLE_FLOAT32LE, -+ PA_SAMPLE_FLOAT32BE, -+ PA_SAMPLE_S32LE, -+ PA_SAMPLE_S32BE, -+ PA_SAMPLE_S24LE, -+ PA_SAMPLE_S24BE, -+ PA_SAMPLE_S24_32LE, -+ PA_SAMPLE_S24_32BE, - }; - bool supported[PA_ELEMENTSOF(all_formats)] = { - false, -@@ -1548,7 +1548,7 @@ pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_form - } - - for (i = 0, n = 0; i < PA_ELEMENTSOF(all_formats); i++) { -- if (snd_pcm_hw_params_test_format(pcm, hwparams, all_formats[i]) == 0) { -+ if (snd_pcm_hw_params_test_format(pcm, hwparams, format_trans_to_pcm[all_formats[i]]) == 0) { - supported[i] = true; - n++; - } -@@ -1559,7 +1559,7 @@ pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_form - - for (i = 0, j = 0; i < PA_ELEMENTSOF(all_formats); i++) { - if (supported[i]) -- formats[j++] = format_trans_to_pa[all_formats[i]]; -+ formats[j++] = all_formats[i]; - } - - formats[j] = PA_SAMPLE_MAX; -@@ -1567,7 +1567,7 @@ pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_form - formats = pa_xnew(pa_sample_format_t, 2); - - formats[0] = fallback_format; -- if ((ret = snd_pcm_hw_params_set_format(pcm, hwparams, format_trans_to_pa[formats[0]])) < 0) { -+ if ((ret = snd_pcm_hw_params_set_format(pcm, hwparams, format_trans_to_pcm[formats[0]])) < 0) { - pa_log_debug("snd_pcm_hw_params_set_format() failed: %s", pa_alsa_strerror(ret)); - pa_xfree(formats); - return NULL; -- cgit v1.2.3