[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