OSDN Git Service

Revert "fbdev: simplify logic in fbdev_read_packet()"
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 10 Apr 2011 22:37:00 +0000 (00:37 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 10 Apr 2011 22:37:52 +0000 (00:37 +0200)
This change is buggy.

This reverts commit d46c9f83cf495c901e6128ce1042190f620b89c4.

libavdevice/fbdev.c

index f7fb957..4f670e9 100644 (file)
@@ -189,20 +189,22 @@ static int fbdev_read_packet(AVFormatContext *avctx, AVPacket *pkt)
         fbdev->time_frame = av_gettime();
 
     /* wait based on the frame rate */
-    curtime = av_gettime();
-    delay = fbdev->time_frame - curtime;
-    av_dlog(avctx,
-            "time_frame:%"PRId64" curtime:%"PRId64" delay:%"PRId64"\n",
-            fbdev->time_frame, curtime, delay);
-    if (delay > 0) {
+    while (1) {
+        curtime = av_gettime();
+        delay = fbdev->time_frame - curtime;
+        av_dlog(avctx,
+                "time_frame:%"PRId64" curtime:%"PRId64" delay:%"PRId64"\n",
+                fbdev->time_frame, curtime, delay);
+        if (delay <= 0) {
+            fbdev->time_frame += INT64_C(1000000) * av_q2d(fbdev->time_base);
+            break;
+        }
         if (avctx->flags & AVFMT_FLAG_NONBLOCK)
             return AVERROR(EAGAIN);
         ts.tv_sec  =  delay / 1000000;
         ts.tv_nsec = (delay % 1000000) * 1000;
         while (nanosleep(&ts, &ts) < 0 && errno == EINTR);
     }
-    /* compute the time of the next frame */
-    fbdev->time_frame += INT64_C(1000000) * av_q2d(fbdev->time_base);
 
     if ((ret = av_new_packet(pkt, fbdev->frame_size)) < 0)
         return ret;