media-io: Fix repeating video timestamps

In video-io.c, video frames could skip, but what would happen is the
frame's timestamp would repeat for the next frame, giving the next frame
a non-monotonic timestamp, and then jump.  This could mess up syncing
slightly when the frame is finally given to an outputs.
master
jp9000 2014-10-22 15:11:08 -07:00
parent e4629978e8
commit a07ebf44e6
1 changed files with 9 additions and 1 deletions

View File

@ -61,6 +61,7 @@ struct video_output {
volatile uint64_t cur_video_time;
uint32_t skipped_frames;
uint32_t total_frames;
uint64_t last_ts;
bool initialized;
@ -120,8 +121,15 @@ static inline void video_output_cur_frame(struct video_output *video)
struct video_input *input = video->inputs.array+i;
struct video_data frame = video->cur_frame;
if (scale_video_output(input, &frame))
if (scale_video_output(input, &frame)) {
if (frame.timestamp <= video->last_ts)
video->last_ts += video->frame_time;
else
video->last_ts = frame.timestamp;
frame.timestamp = video->last_ts;
input->callback(input->param, &frame);
}
}
pthread_mutex_unlock(&video->input_mutex);