summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-08-31 14:38:47 +0200
committerAlessandro Ghedini <alessandro@ghedini.me>2014-09-01 14:48:17 +0200
commit6a355959d95a3393c58054476687017bd20ab266 (patch)
treea6e0c4763ce104010dc29507dfc0a1ce75317790
parent36bdbbe716a93c2fa213ee16e86b267cd6a207f8 (diff)
downloadmpv-6a355959d95a3393c58054476687017bd20ab266.tar.bz2
mpv-6a355959d95a3393c58054476687017bd20ab266.tar.xz
audio/out: prevent burning CPU when seeking while paused
The audio/video sync code in player/audio.c calls ao_reset() each time audio decoding is entered, but the player is paused, and there would be more than 1 sample to skip to make audio start match with video start. This caused a wakeup feedback loop with push.c. CC: @mpv-player/stable
-rw-r--r--audio/out/push.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/audio/out/push.c b/audio/out/push.c
index c825310e01..3f0d453153 100644
--- a/audio/out/push.c
+++ b/audio/out/push.c
@@ -319,7 +319,8 @@ static void *playthread(void *arg)
// The most important part is that the decoder is woken up, so
// that the decoder will wake up us in turn.
MP_TRACE(ao, "buffer inactive.\n");
- mp_input_wakeup(ao->input_ctx);
+ if (!p->requested_data)
+ mp_input_wakeup(ao->input_ctx);
pthread_cond_wait(&p->wakeup, &p->lock);
} else {
if (!ao->driver->wait || ao->driver->wait(ao, &p->lock) < 0) {