pipewire/0001-alsa-dont-check-early-wakeup-when-PCM-stopped.patch
Antonio Larrosa f335eeabd9 Accepting request 1117659 from home:alarrosa:branches:multimedia:libs
- Add patch from upstream that fixes issues when PCM is stopped,
  which includes fixing sound in qemu:
  * 0001-alsa-dont-check-early-wakeup-when-PCM-stopped.patch

OBS-URL: https://build.opensuse.org/request/show/1117659
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/pipewire?expand=0&rev=162
2023-10-13 11:54:00 +00:00

44 lines
1.6 KiB
Diff

From e940361c947cf8519b11c7e6792441c86fc59042 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Thu, 12 Oct 2023 15:28:53 +0200
Subject: [PATCH] alsa: don't check early wakeup when PCM stopped
When the PCM is stopped, don't check for early wakeup because if we
are early, we will never be on time in the next iteration either because the
PCM is stopped and doesn't advance.
Also don't try to align when stopped.
See #3565
---
spa/plugins/alsa/alsa-pcm.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/spa/plugins/alsa/alsa-pcm.c b/spa/plugins/alsa/alsa-pcm.c
index 57e7911e7..ddf79f05a 100644
--- a/spa/plugins/alsa/alsa-pcm.c
+++ b/spa/plugins/alsa/alsa-pcm.c
@@ -2408,7 +2408,7 @@ static int alsa_write_sync(struct state *state, uint64_t current_time)
# return res;
# }
if (SPA_UNLIKELY((res = get_status(state, current_time, &avail, &delay, &target)) < 0))
return res;
- if (SPA_UNLIKELY(!following && delay > target + state->max_error)) {
+ if (SPA_UNLIKELY(!following && state->alsa_started && delay > target + state->max_error)) {
spa_log_trace(state->log, "%p: early wakeup %ld %lu %lu", state,
avail, delay, target);
if (delay > target * 3)
@@ -2419,7 +2419,7 @@ static int alsa_write_sync(struct state *state, uint64_t current_time)
if (SPA_UNLIKELY((res = update_time(state, current_time, delay, target, following)) < 0))
return res;
- if (following && !state->linked) {
+ if (following && state->alsa_started && !state->linked) {
if (SPA_UNLIKELY(state->alsa_sync)) {
enum spa_log_level lev;
--
GitLab