[FFmpeg-devel] [PATCH] x11grab: fixed next frame capture time calculation
Trevor \\ Higgins
doublebackslash at gmail.com
Wed Feb 3 09:12:20 CET 2016
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.
---
libavdevice/x11grab.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/libavdevice/x11grab.c b/libavdevice/x11grab.c
index bdfaa66..029d490 100644
--- a/libavdevice/x11grab.c
+++ b/libavdevice/x11grab.c
@@ -526,23 +526,22 @@ 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);
+ if (delay <= 0)
break;
- }
ts.tv_sec = delay / 1000000;
ts.tv_nsec = (delay % 1000000) * 1000;
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
More information about the ffmpeg-devel
mailing list