ffplay: only display frames if there are no pending events
authorMarton Balint <cus@passwd.hu>
Fri, 15 Feb 2013 11:43:27 +0000 (12:43 +0100)
committerMarton Balint <cus@passwd.hu>
Fri, 15 Feb 2013 12:12:10 +0000 (13:12 +0100)
Otherwise events could just pile up if displaying a frame takes more time than
the duration of the frame.

Signed-off-by: Marton Balint <cus@passwd.hu>
ffplay.c

index 3ca1a96..83cf4ac 100644 (file)
--- a/ffplay.c
+++ b/ffplay.c
@@ -2929,21 +2929,20 @@ static void toggle_audio_display(VideoState *is)
 }
 
 static void refresh_loop_wait_event(VideoState *is, SDL_Event *event) {
-    int got_event;
-    double remaining_time;
-    do {
+    double remaining_time = 0.0;
+    SDL_PumpEvents();
+    while (!SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_ALLEVENTS)) {
         if (!cursor_hidden && av_gettime() - cursor_last_shown > CURSOR_HIDE_DELAY) {
             SDL_ShowCursor(0);
             cursor_hidden = 1;
         }
+        if (remaining_time > 0.0)
+            av_usleep((int64_t)(remaining_time * 1000000.0));
         remaining_time = REFRESH_RATE;
         if (is->show_mode != SHOW_MODE_NONE && (!is->paused || is->force_refresh))
             video_refresh(is, &remaining_time);
         SDL_PumpEvents();
-        got_event = SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_ALLEVENTS);
-        if (!got_event)
-            av_usleep((int64_t)(remaining_time * 1000000.0));
-    } while (!got_event);
+    }
 }
 
 /* handle an event sent by the GUI */