/* called to display each frame */
if (redisplay)
delay = 0.0;
else
delay = compute_target_delay(last_duration, is);
/*time为程序已运行的时间*/
time= av_gettime_relative()/1000000.0;
static void video_refresh(void *opaque, double *remaining_time)
{
。。。。。。
/* compute nominal last_duration */
/*通过pts计算duration,duration是一个videoframe的持续时间,当前帧的pts 减去上一帧的pts*/
last_duration = vp_duration(is, lastvp, vp);if (redisplay)
delay = 0.0;
else
delay = compute_target_delay(last_duration, is);
/*time为程序已运行的时间*/
time= av_gettime_relative()/1000000.0;
/*时间没到,就先等等*/
if (time < is->frame_timer + delay && !redisplay) {
*remaining_time = FFMIN(is->frame_timer + delay - time, *remaining_time);
return;
}
/*时间已到*/
is->frame_timer += delay;
if (delay > 0 && time - is->frame_timer > AV_SYNC_THRESHOLD_MAX)
is->frame_timer = time;
。。。。。。
}