summaryrefslogtreecommitdiff
path: root/media-libs/libpulse/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-10-06 17:57:58 +0100
committerV3n3RiX <venerix@koprulu.sector>2023-10-06 17:57:58 +0100
commit8368c614e6a1232f34a14cd6495cf2f68933030d (patch)
treefb445ed1110e0361c9c25136c00c4fb948bb46c4 /media-libs/libpulse/files
parent2b03b0d9c5ca3890c219ebd24721133e766e9bb9 (diff)
gentoo auto-resync : 06:10:2023 - 17:57:58
Diffstat (limited to 'media-libs/libpulse/files')
-rw-r--r--media-libs/libpulse/files/pulseaudio-16.1-add-more-standard-samplerates.patch35
-rw-r--r--media-libs/libpulse/files/pulseaudio-16.1-fix-memblock-alignment.patch122
-rw-r--r--media-libs/libpulse/files/pulseaudio-16.1-smoother-start-paused.patch26
-rw-r--r--media-libs/libpulse/files/pulseaudio-16.1-smoother-time-calculation.patch27
4 files changed, 210 insertions, 0 deletions
diff --git a/media-libs/libpulse/files/pulseaudio-16.1-add-more-standard-samplerates.patch b/media-libs/libpulse/files/pulseaudio-16.1-add-more-standard-samplerates.patch
new file mode 100644
index 000000000000..e1ea200c4c4c
--- /dev/null
+++ b/media-libs/libpulse/files/pulseaudio-16.1-add-more-standard-samplerates.patch
@@ -0,0 +1,35 @@
+commit 86c5fbab5778685e19b5a4a9b8eb04ca90dff780
+Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
+Date: Sun Feb 5 19:49:10 2023 +0300
+
+ alsa-util: Add more standard sample rates.
+
+ Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/776>
+
+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-libs/libpulse/files/pulseaudio-16.1-fix-memblock-alignment.patch b/media-libs/libpulse/files/pulseaudio-16.1-fix-memblock-alignment.patch
new file mode 100644
index 000000000000..b05e530ac89d
--- /dev/null
+++ b/media-libs/libpulse/files/pulseaudio-16.1-fix-memblock-alignment.patch
@@ -0,0 +1,122 @@
+commit 300db779224625144d6279d230c2daa857c967d8
+Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
+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: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/780>
+
+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-libs/libpulse/files/pulseaudio-16.1-smoother-start-paused.patch b/media-libs/libpulse/files/pulseaudio-16.1-smoother-start-paused.patch
new file mode 100644
index 000000000000..3f0acbc8f95e
--- /dev/null
+++ b/media-libs/libpulse/files/pulseaudio-16.1-smoother-start-paused.patch
@@ -0,0 +1,26 @@
+commit 8fe50bbc31e11abf2f30864f1e2dbdaa16d0e1c3
+Author: Georg Chini <georg@chini.tk>
+Date: Thu Aug 25 08:11:04 2022 +0200
+
+ time-smoother-2: Fix stream time when stream starts paused
+
+ When a stream is started but has not yet called smoother_2_put(), pa_smoother_2_get()
+ returns the time since the start of the stream even if the stream was started paused.
+ When the stream is started paused, pa_smoother_2_get() should return 0 instead. This
+ patch fixes the problem.
+
+ Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/745>
+
+diff --git a/src/pulsecore/time-smoother_2.c b/src/pulsecore/time-smoother_2.c
+index e14b52f72..ea7ec1b36 100644
+--- a/src/pulsecore/time-smoother_2.c
++++ b/src/pulsecore/time-smoother_2.c
+@@ -295,7 +295,7 @@ pa_usec_t pa_smoother_2_get(pa_smoother_2 *s, pa_usec_t time_stamp) {
+
+ /* If the smoother has not started, just return system time since resume */
+ if (!s->start_time) {
+- if (time_stamp >= s->resume_time)
++ if (time_stamp >= s->resume_time && !s->paused)
+ current_time = time_stamp - s->resume_time;
+ else
+ current_time = 0;
diff --git a/media-libs/libpulse/files/pulseaudio-16.1-smoother-time-calculation.patch b/media-libs/libpulse/files/pulseaudio-16.1-smoother-time-calculation.patch
new file mode 100644
index 000000000000..9d976e5be984
--- /dev/null
+++ b/media-libs/libpulse/files/pulseaudio-16.1-smoother-time-calculation.patch
@@ -0,0 +1,27 @@
+commit c3eae5d00cb79bd897049483126e75bb48a69cd1
+Author: flyingOwl <ofenfisch@googlemail.com>
+Date: Fri Dec 30 00:16:03 2022 +0100
+
+ time-smoother-2: Fix time calculation by comparing timestamps
+
+ This fixes the rare case of resume_time being bigger than time_stamp. Which
+ happens sometimes when a gstreamer client is quickly seeking through a
+ media file. The resulting integer underflow then causes a huge value in
+ current_time which will break the playback.
+
+ Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/764>
+
+diff --git a/src/pulsecore/time-smoother_2.c b/src/pulsecore/time-smoother_2.c
+index ea7ec1b36..46cc5e9cc 100644
+--- a/src/pulsecore/time-smoother_2.c
++++ b/src/pulsecore/time-smoother_2.c
+@@ -307,7 +307,8 @@ pa_usec_t pa_smoother_2_get(pa_smoother_2 *s, pa_usec_t time_stamp) {
+ /* If we are initializing, add the time since resume to the card time at pause_time */
+ else if (s->init) {
+ current_time += (s->pause_time - s->start_time - s->time_offset - s->fixup_time) * s->time_factor;
+- current_time += (time_stamp - s->resume_time) * s->time_factor;
++ if (time_stamp > s->resume_time)
++ current_time += (time_stamp - s->resume_time) * s->time_factor;
+
+ /* Smoother is running, calculate current sound card time */
+ } else