The next frame time could slip, causing the frame rate to drop until frames were dropped. Now will capture at the next correct moment instead.
--- Fixed the style to conform to the standard --- libavdevice/x11grab.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavdevice/x11grab.c b/libavdevice/x11grab.c index bdfaa66..9dc3472 100644 --- a/libavdevice/x11grab.c +++ b/libavdevice/x11grab.c @@ -526,16 +526,11 @@ static int x11grab_read_packet(AVFormatContext *s1, AVPacket *pkt) int64_t curtime, delay; struct timespec ts; - /* Calculate the time of the next frame */ - s->time_frame += INT64_C(1000000); - /* wait based on the frame rate */ for (;;) { curtime = av_gettime(); delay = s->time_frame * av_q2d(s->time_base) - curtime; if (delay <= 0) { - if (delay < INT64_C(-1000000) * av_q2d(s->time_base)) - s->time_frame += INT64_C(1000000); break; } ts.tv_sec = delay / 1000000; @@ -543,6 +538,11 @@ static int x11grab_read_packet(AVFormatContext *s1, AVPacket *pkt) nanosleep(&ts, NULL); } + /* Calculate the time of the next frame */ + do { + s->time_frame += INT64_C(1000000); + } while ((s->time_frame * av_q2d(s->time_base) - curtime) <= 0); + av_init_packet(pkt); pkt->data = image->data; pkt->size = s->frame_size; -- 2.5.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel