diff options
author | tytan652 | 2021-11-05 08:24:17 +0100 |
---|---|---|
committer | tytan652 | 2021-11-05 08:24:17 +0100 |
commit | de40d5985c9e07b542296bac635fb9176e898074 (patch) | |
tree | d5ee67429723dc585120ac991af8771f75ea29db | |
parent | eefd9da17f8db4376ea705e5ebaa0116dc56b49f (diff) | |
download | aur-de40d5985c9e07b542296bac635fb9176e898074.tar.gz |
build: patch to cherry-pick for PA buffer fix
-rw-r--r-- | .SRCINFO | 2 | ||||
-rw-r--r-- | PKGBUILD | 8 | ||||
-rw-r--r-- | pa_buffer_aggressive.patch | 112 |
3 files changed, 3 insertions, 119 deletions
@@ -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 @@ -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; - } |