summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authortytan6522021-11-05 08:24:17 +0100
committertytan6522021-11-05 08:24:17 +0100
commitde40d5985c9e07b542296bac635fb9176e898074 (patch)
treed5ee67429723dc585120ac991af8771f75ea29db
parenteefd9da17f8db4376ea705e5ebaa0116dc56b49f (diff)
downloadaur-de40d5985c9e07b542296bac635fb9176e898074.tar.gz
build: patch to cherry-pick for PA buffer fix
-rw-r--r--.SRCINFO2
-rw-r--r--PKGBUILD8
-rw-r--r--pa_buffer_aggressive.patch112
3 files changed, 3 insertions, 119 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 056658707c8b..fefa24c038f7 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -50,7 +50,6 @@ pkgbase = obs-studio-tytan652
source = v4l2_by-path.patch
source = FindLibpci.cmake
source = vaapi_set_dri_devices.patch
- source = pa_buffer_aggressive.patch
source = obs-browser::git+https://github.com/obsproject/obs-browser.git
source = obs-vst::git+https://github.com/obsproject/obs-vst.git#commit=cca219fa3613dbc65de676ab7ba29e76865fa6f8
sha256sums = SKIP
@@ -59,7 +58,6 @@ pkgbase = obs-studio-tytan652
sha256sums = fb55dffcb177fd89c2cbffeb14aaf920dae2ae60dcfa934cff252315f268470e
sha256sums = 916f9fb3819c9d952140d65434e9dffc77b688dc1dc027b39226c33ee97be63f
sha256sums = 5c18a85f95090f01a9eb24aeea13220f8698f8d433970e4dc6391432d033f065
- sha256sums = 4b90a29e75eb7281cbe754408327d44192c0892557f03bd3c612f3658af739fc
sha256sums = SKIP
sha256sums = SKIP
diff --git a/PKGBUILD b/PKGBUILD
index 8b4d15bb1bfc..07e80fef1a82 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -57,7 +57,6 @@ source=(
"v4l2_by-path.patch" # https://patch-diff.githubusercontent.com/raw/obsproject/obs-studio/pull/3437.patch
"FindLibpci.cmake" # https://github.com/carlocastoldi/obs-studio/blob/2936-fix/cmake/Modules/FindLibpci.cmake
"vaapi_set_dri_devices.patch" # Based on https://patch-diff.githubusercontent.com/raw/obsproject/obs-studio/pull/5336.patch
- "pa_buffer_aggressive.patch" # https://patch-diff.githubusercontent.com/raw/obsproject/obs-studio/pull/4908.patch
"obs-browser::git+https://github.com/obsproject/obs-browser.git"
"obs-vst::git+https://github.com/obsproject/obs-vst.git#commit=cca219fa3613dbc65de676ab7ba29e76865fa6f8"
)
@@ -68,7 +67,6 @@ sha256sums=(
"fb55dffcb177fd89c2cbffeb14aaf920dae2ae60dcfa934cff252315f268470e"
"916f9fb3819c9d952140d65434e9dffc77b688dc1dc027b39226c33ee97be63f"
"5c18a85f95090f01a9eb24aeea13220f8698f8d433970e4dc6391432d033f065"
- "4b90a29e75eb7281cbe754408327d44192c0892557f03bd3c612f3658af739fc"
"SKIP"
"SKIP"
)
@@ -88,6 +86,9 @@ prepare() {
## obs-ffmpeg: Fix unwritten audio-only output (https://github.com/obsproject/obs-studio/commit/499af309b51234b0e5dda81753fb655f893ce217)
git cherry-pick --no-commit 499af309b51234b0e5dda81753fb655f893ce217
+ ## pulse: fill audio monitor buffer more aggressively (https://github.com/obsproject/obs-studio/commit/5142a7685d6bbf38ed369137a6dce43e7b57852e)
+ git cherry-pick --no-commit 5142a7685d6bbf38ed369137a6dce43e7b57852e
+
## libobs/util: Fix loading Python binary modules on *nix (https://github.com/obsproject/obs-studio/pull/3335)
patch -Np1 < "$srcdir/python_fix.patch"
@@ -104,9 +105,6 @@ prepare() {
patch -Np1 < "$srcdir/vaapi_set_dri_devices.patch"
# Add CMake finder for libpci (pciutils)
cp "$srcdir/FindLibpci.cmake" cmake/Modules/
-
- ## pulse: fill audio monitor buffer more aggressively (https://github.com/obsproject/obs-studio/pull/4908)
- patch -Np1 < "$srcdir/pa_buffer_aggressive.patch"
}
build() {
diff --git a/pa_buffer_aggressive.patch b/pa_buffer_aggressive.patch
deleted file mode 100644
index 5630ab09d076..000000000000
--- a/pa_buffer_aggressive.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 85e75085030664ff1bba2e87a79e8ff4294f28c4 Mon Sep 17 00:00:00 2001
-From: Kurt Kartaltepe <kkartaltepe@gmail.com>
-Date: Wed, 16 Jun 2021 09:42:46 -0700
-Subject: [PATCH] pulse: fill audio monitor buffer more aggressively
-
-Previously we would wait for pulse to attempt to read from the monitor
-source and obs buffered at least 5ms of audio data before we tried to
-fill the buffer. In some cases this resulted in consistently triggering
-underruns in pulse.
-
-Instead we try to fill the buffer immediately as obs outputs audio data
-and while the pa buffer is not full. We also stop trying to grow the
-buffer to prevent underruns after we reach 1s of latency.
----
- .../pulse/pulseaudio-output.c | 46 ++++++++++++-------
- 1 file changed, 30 insertions(+), 16 deletions(-)
-
-diff --git a/libobs/audio-monitoring/pulse/pulseaudio-output.c b/libobs/audio-monitoring/pulse/pulseaudio-output.c
-index 9abfcd78b4e..d4ec239de71 100644
---- a/libobs/audio-monitoring/pulse/pulseaudio-output.c
-+++ b/libobs/audio-monitoring/pulse/pulseaudio-output.c
-@@ -20,7 +20,6 @@ struct audio_monitor {
-
- struct circlebuf new_data;
- audio_resampler_t *resampler;
-- size_t buffer_size;
- size_t bytesRemaining;
- size_t bytes_per_channel;
-
-@@ -176,21 +175,20 @@ static void do_stream_write(void *param)
- PULSE_DATA(param);
- uint8_t *buffer = NULL;
-
-- while (data->new_data.size >= data->buffer_size &&
-- data->bytesRemaining > 0) {
-- size_t bytesToFill = data->buffer_size;
--
-- if (bytesToFill > data->bytesRemaining)
-+ while (data->new_data.size > 0 && data->bytesRemaining > 0) {
-+ size_t bytesToFill = data->new_data.size;
-+ if (data->bytesRemaining < bytesToFill)
- bytesToFill = data->bytesRemaining;
-
- pulseaudio_lock();
-- pa_stream_begin_write(data->stream, (void **)&buffer,
-- &bytesToFill);
-- pulseaudio_unlock();
-+ if (pa_stream_begin_write(data->stream, (void **)&buffer,
-+ &bytesToFill)) {
-+ pulseaudio_unlock();
-+ return;
-+ }
-
- circlebuf_pop_front(&data->new_data, buffer, bytesToFill);
-
-- pulseaudio_lock();
- pa_stream_write(data->stream, buffer, bytesToFill, NULL, 0LL,
- PA_SEEK_RELATIVE);
- pulseaudio_unlock();
-@@ -262,13 +260,30 @@ static void pulseaudio_underflow(pa_stream *p, void *userdata)
- UNUSED_PARAMETER(p);
- PULSE_DATA(userdata);
-
-+ pa_sample_spec spec = {0};
-+ spec.format = data->format;
-+ spec.rate = (uint32_t)data->samples_per_sec;
-+ spec.channels = data->channels;
-+ uint64_t latency = pa_bytes_to_usec(data->attr.tlength, &spec);
-+
- pthread_mutex_lock(&data->playback_mutex);
-- if (obs_source_active(data->source))
-+ if (obs_source_active(data->source) && latency < 1000000) {
-+ data->attr.fragsize = (uint32_t)-1;
-+ data->attr.maxlength = (uint32_t)-1;
-+ data->attr.prebuf = (uint32_t)-1;
-+ data->attr.minreq = (uint32_t)-1;
- data->attr.tlength = (data->attr.tlength * 3) / 2;
--
-- pa_stream_set_buffer_attr(data->stream, &data->attr, NULL, NULL);
-+ pa_stream_set_buffer_attr(data->stream, &data->attr, NULL,
-+ NULL);
-+ data->bytesRemaining = data->attr.maxlength;
-+ }
- pthread_mutex_unlock(&data->playback_mutex);
-
-+ if (latency >= 1000000) {
-+ blog(LOG_WARNING, "source monitor reached max latency %ldms",
-+ latency / 1000);
-+ }
-+
- pulseaudio_signal(0);
- }
-
-@@ -460,9 +475,6 @@ static bool audio_monitor_init(struct audio_monitor *monitor,
- monitor->attr.prebuf = (uint32_t)-1;
- monitor->attr.tlength = pa_usec_to_bytes(25000, &spec);
-
-- monitor->buffer_size =
-- monitor->bytes_per_frame * pa_usec_to_bytes(5000, &spec);
--
- pa_stream_flags_t flags = PA_STREAM_INTERPOLATE_TIMING |
- PA_STREAM_AUTO_TIMING_UPDATE;
-
-@@ -480,6 +492,8 @@ static bool audio_monitor_init(struct audio_monitor *monitor,
- return false;
- }
-
-+ monitor->bytesRemaining = monitor->attr.maxlength;
-+
- blog(LOG_INFO, "Started Monitoring in '%s'", monitor->device);
- return true;
- }