diff options
author | wm4 <wm4@nowhere> | 2014-08-31 14:38:47 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-08-31 14:48:58 +0200 |
commit | 8432eaefa07f3696f5d9825bf7d4e32d9b1c5308 (patch) | |
tree | 064382817edd78ae7a0007226c9dcad513776dd6 /audio | |
parent | 64b7811c28c3caadf42c394d54cfce222ad5503d (diff) | |
download | mpv-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
Diffstat (limited to 'audio')
-rw-r--r-- | audio/out/push.c | 3 |
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) { |