[FFmpeg-devel] [PATCH v2] x11grab: fixed next frame capture time calculation

Trevor \\ Higgins doublebackslash at gmail.com
Wed Feb 3 15:10:01 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.

---

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



More information about the ffmpeg-devel mailing list