summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-08-31 14:38:47 +0200
committerwm4 <wm4@nowhere>2014-08-31 14:48:58 +0200
commit8432eaefa07f3696f5d9825bf7d4e32d9b1c5308 (patch)
tree064382817edd78ae7a0007226c9dcad513776dd6
parent64b7811c28c3caadf42c394d54cfce222ad5503d (diff)
downloadmpv-8432eaefa07f3696f5d9825bf7d4e32d9b1c5308.tar.bz2
mpv-8432eaefa07f3696f5d9825bf7d4e32d9b1c5308.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 91b4a67571..95df7dfb56 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) {