Index: libs/libmythtv/vsync.cpp =================================================================== --- libs/libmythtv/vsync.cpp (revision 20661) +++ libs/libmythtv/vsync.cpp (working copy) @@ -51,6 +51,8 @@ using namespace std; #include "vsync.h" +#define MAX_FRAME_INTERVALS 4 // the original code uses a maximum of 2 frame intervals for frame delay + bool tryingVideoSync = false; int VideoSync::m_forceskip = 0; @@ -174,10 +176,13 @@ { // Offset by frame interval -- if interlaced, only delay by half // frame interval + cout << "UpdateNexttrigger :: before m_nexttrigger : " << m_nexttrigger.tv_sec << "." << m_nexttrigger.tv_usec << endl; if (m_interlaced) OffsetTimeval(m_nexttrigger, m_frame_interval/2); else OffsetTimeval(m_nexttrigger, m_frame_interval); + cout << "UpdateNexttrigger :: m_frame_interval : " << m_frame_interval << endl; + cout << "UpdateNexttrigger :: after m_nexttrigger : " << m_nexttrigger.tv_sec << "." << m_nexttrigger.tv_usec << endl; } /** \fn VideoSync::CalcDelay() @@ -196,22 +201,27 @@ //cout << "CalcDelay: next: " << timeval_str(m_nexttrigger) << " now " // << timeval_str(now) << endl; + cout << "CalcDelay :: before now : " << now.tv_sec << "." << now.tv_usec << endl; + cout << "CalcDelay :: before m_nexttrigger : " << m_nexttrigger.tv_sec << "." << m_nexttrigger.tv_usec << endl; int ret_val = (m_nexttrigger.tv_sec - now.tv_sec) * 1000000 + (m_nexttrigger.tv_usec - now.tv_usec); + cout << "CalcDelay :: before m_delay " << ret_val << endl; //cout << "delay " << ret_val << endl; - if (ret_val > m_frame_interval * 2) + if (ret_val > (m_frame_interval * MAX_FRAME_INTERVALS)) { if (m_interlaced) - ret_val = m_frame_interval; // same as / 2 * 2. + ret_val = int(m_frame_interval * (MAX_FRAME_INTERVALS / 2)); // same as / 2 * MAX_FRAME_INTERVALS. else - ret_val = m_frame_interval * 2; + ret_val = m_frame_interval * MAX_FRAME_INTERVALS; // 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); + cout << "CalcDelay :: after m_nexttrigger : " << m_nexttrigger.tv_sec << "." << m_nexttrigger.tv_usec << endl; + cout << "CalcDelay :: after m_delay " << ret_val << endl; } return ret_val;