[FFmpeg-devel] [PATCH 1/4] ffplay: do not wait for flushing the picture queue on flush packet

Marton Balint cus at passwd.hu
Tue Dec 3 21:01:23 CET 2013


It is no longer necessary. Also do frame timer and video current pos reset in
the main thread because with the wait removed, the timing would not be optimal
in the read thread.

Signed-off-by: Marton Balint <cus at passwd.hu>
---
 ffplay.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/ffplay.c b/ffplay.c
index bcbc30d..104598b 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -1376,10 +1376,14 @@ retry:
 
             if (vp->serial != is->videoq.serial) {
                 pictq_next_picture(is);
+                is->video_current_pos = -1;
                 redisplay = 0;
                 goto retry;
             }
 
+            if (lastvp->serial != vp->serial && !redisplay)
+                is->frame_timer = av_gettime() / 1000000.0;
+
             if (is->paused)
                 goto display;
 
@@ -1670,15 +1674,6 @@ static int get_video_frame(VideoState *is, AVFrame *frame, AVPacket *pkt, int *s
 
     if (pkt->data == flush_pkt.data) {
         avcodec_flush_buffers(is->video_st->codec);
-
-        SDL_LockMutex(is->pictq_mutex);
-        // Make sure there are no long delay timers (ideally we should just flush the queue but that's harder)
-        while (is->pictq_size && !is->videoq.abort_request) {
-            SDL_CondWait(is->pictq_cond, is->pictq_mutex);
-        }
-        is->video_current_pos = -1;
-        is->frame_timer = (double)av_gettime() / 1000000.0;
-        SDL_UnlockMutex(is->pictq_mutex);
         return 0;
     }
 
-- 
1.8.4



More information about the ffmpeg-devel mailing list