From b1f78632c681f32c4901a85aa7ee72bf9ca6fece Mon Sep 17 00:00:00 2001 From: Marton Balint Date: Sun, 8 Feb 2015 19:30:46 +0100 Subject: [PATCH] ffplay: do not block audio thread on WIN32 The windows SDL audio driver plays the old data in the buffer in a loop if it is not updated in time. So instead of waiting for data and blocking the the audio thread, return silence if no data is available. Should fix ticket #2289. Reviewed-by: Michael Niedermayer Signed-off-by: Marton Balint --- ffplay.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ffplay.c b/ffplay.c index cc61dde0b2..67cf9ea6cc 100644 --- a/ffplay.c +++ b/ffplay.c @@ -2303,6 +2303,13 @@ static int audio_decode_frame(VideoState *is) return -1; do { +#if defined(_WIN32) + while (frame_queue_nb_remaining(&is->sampq) == 0) { + if ((av_gettime_relative() - audio_callback_time) > 1000000LL * is->audio_hw_buf_size / is->audio_tgt.bytes_per_sec / 2) + return -1; + av_usleep (1000); + } +#endif if (!(af = frame_queue_peek_readable(&is->sampq))) return -1; frame_queue_next(&is->sampq);