Index: libs/libmythtv/vsync.cpp
===================================================================
--- libs/libmythtv/vsync.cpp	(revision 22974)
+++ libs/libmythtv/vsync.cpp	(working copy)
@@ -218,6 +218,16 @@
         OffsetTimeval(m_nexttrigger, ret_val);
     }
 
+    if (ret_val < -m_frame_interval)
+    {
+        ret_val = -m_frame_interval;
+
+        // set nexttrigger to our new target time
+        m_nexttrigger.tv_sec = now.tv_sec;
+        m_nexttrigger.tv_usec = now.tv_usec;
+        OffsetTimeval(m_nexttrigger, ret_val);
+    }
+
     return ret_val;
 }
 
@@ -681,6 +691,7 @@
         // If late, draw the frame ASAP.  If early, hold the CPU until
         // half as late as the previous frame (fudge).
         m_delay = CalcDelay();
+        m_fudge = min(m_fudge, m_frame_interval);
         while (m_delay + m_fudge > 0)
         {
             m_delay = CalcDelay();

