Signed-off-by: Marton Balint <c...@passwd.hu> --- ffplay.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/ffplay.c b/ffplay.c index c59065f..54f4584 100644 --- a/ffplay.c +++ b/ffplay.c @@ -263,7 +263,6 @@ typedef struct VideoState { int video_stream; AVStream *video_st; PacketQueue videoq; - int64_t video_current_pos; // current displayed file pos double max_frame_duration; // maximum duration of a frame - above this, we consider the jump a timestamp discontinuity #if !CONFIG_AVFILTER struct SwsContext *img_convert_ctx; @@ -637,6 +636,16 @@ static int frame_queue_nb_remaining(FrameQueue *f) return f->size - f->rindex_shown; } +/* return last shown position */ +static int64_t frame_queue_last_pos(FrameQueue *f) +{ + Frame *fp = &f->queue[f->rindex]; + if (f->rindex_shown && fp->serial == f->pktq->serial) + return fp->pos; + else + return -1; +} + static inline void fill_rectangle(SDL_Surface *screen, int x, int y, int w, int h, int color, int update) { @@ -1432,7 +1441,6 @@ static void update_video_pts(VideoState *is, double pts, int64_t pos, int serial /* update current video pts */ set_clock(&is->vidclk, pts, serial); sync_clock_to_slave(&is->extclk, &is->vidclk); - is->video_current_pos = pos; } /* called to display each frame */ @@ -1472,7 +1480,6 @@ retry: if (vp->serial != is->videoq.serial) { frame_queue_next(&is->pictq); - is->video_current_pos = -1; redisplay = 0; goto retry; } @@ -3385,11 +3392,12 @@ static void event_loop(VideoState *cur_stream) incr = -60.0; do_seek: if (seek_by_bytes) { - if (cur_stream->video_stream >= 0 && cur_stream->video_current_pos >= 0) { - pos = cur_stream->video_current_pos; - } else if (cur_stream->audio_stream >= 0 && cur_stream->audio_pkt.pos >= 0) { + pos = -1; + if (pos < 0 && cur_stream->video_stream >= 0) + pos = frame_queue_last_pos(&cur_stream->pictq); + if (pos < 0 && cur_stream->audio_stream >= 0) pos = cur_stream->audio_pkt.pos; - } else + if (pos < 0) pos = avio_tell(cur_stream->ic->pb); if (cur_stream->ic->bit_rate) incr *= cur_stream->ic->bit_rate / 8.0; -- 1.8.4.5 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel