summaryrefslogtreecommitdiff
path: root/ffplay.c
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2011-08-04 00:59:45 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-08-09 21:53:15 +0200
commitc369ddb720bfb7b8f1780b875067b900285ebfc2 (patch)
tree288910b4cadd78665d26d2b439323933983b1bf3 /ffplay.c
parent3a1df52e3ce70f41c4f8b9900be2c2907b7e21ef (diff)
ffplay: pass frame durations clearly to video video_refresh
Previously the target clock of the next frame was calculated by using video_clock which is modified from another thread... Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'ffplay.c')
-rw-r--r--ffplay.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ffplay.c b/ffplay.c
index ed1bdf434d..33724a8e07 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -98,6 +98,7 @@ typedef struct PacketQueue {
typedef struct VideoPicture {
double pts; ///<presentation time stamp for this picture
double target_clock; ///<av_gettime() time at which this should be displayed ideally
+ double duration; ///<expected duration of the frame
int64_t pos; ///<byte position in file
SDL_Overlay *bmp;
int width, height; /* source height & width */
@@ -1136,7 +1137,7 @@ retry:
assert(nextvp->target_clock >= vp->target_clock);
next_target= nextvp->target_clock;
}else{
- next_target= vp->target_clock + is->video_clock - vp->pts; //FIXME pass durations cleanly
+ next_target= vp->target_clock + vp->duration;
}
if((framedrop>0 || (framedrop && is->audio_st)) && time > next_target){
is->skip_frames *= 1.0 + FRAME_SKIP_FACTOR;
@@ -1341,6 +1342,8 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts1, int64_
vp = &is->pictq[is->pictq_windex];
+ vp->duration = frame_delay;
+
/* alloc or resize hardware picture buffer */
if (!vp->bmp ||
#if CONFIG_AVFILTER