From 79ee46836578e78ef9539f0232cd1f589ee2e2dc Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 30 Jan 2010 21:27:17 +0000 Subject: [PATCH] Redesign packet queue full check to be more robust. Originally committed as revision 21555 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffplay.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ffplay.c b/ffplay.c index c1b9cfc43a..69588d6465 100644 --- a/ffplay.c +++ b/ffplay.c @@ -49,9 +49,9 @@ const int program_birth_year = 2003; //#define DEBUG_SYNC -#define MAX_VIDEOQ_SIZE (30 * 256 * 1024) -#define MAX_AUDIOQ_SIZE (20 * 16 * 1024) -#define MAX_SUBTITLEQ_SIZE (5 * 16 * 1024) +#define MAX_QUEUE_SIZE (15 * 1024 * 1024) +#define MIN_AUDIOQ_SIZE (20 * 16 * 1024) +#define MIN_FRAMES 5 /* SDL audio buffer size, in samples. Should be small to have precise A/V sync as SDL does not have hardware buffer fullness info. */ @@ -2026,9 +2026,10 @@ static int decode_thread(void *arg) } /* if the queue are full, no need to read more */ - if (is->audioq.size > MAX_AUDIOQ_SIZE || - is->videoq.size > MAX_VIDEOQ_SIZE || - is->subtitleq.size > MAX_SUBTITLEQ_SIZE) { + if ( is->audioq.size + is->videoq.size + is->subtitleq.size > MAX_QUEUE_SIZE + || ( (is->audioq .size > MIN_AUDIOQ_SIZE || is->audio_stream<0) + && (is->videoq .nb_packets > MIN_FRAMES || is->video_stream<0) + && (is->subtitleq.nb_packets > MIN_FRAMES || is->subtitle_stream<0))) { /* wait 10 ms */ SDL_Delay(10); continue;