ffplay: do not wait for flushing the picture queue on flush packet

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@passwd.hu>
pull/48/merge
Marton Balint 12 years ago
parent 90539cea33
commit 318bf57c3f
  1. 13
      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;
}

Loading…
Cancel
Save