1 | Index: mythtv/libs/libmythtv/NuppelVideoPlayer.cpp |
---|
2 | =================================================================== |
---|
3 | --- mythtv/libs/libmythtv/NuppelVideoPlayer.cpp (revision 22730) |
---|
4 | +++ mythtv/libs/libmythtv/NuppelVideoPlayer.cpp (working copy) |
---|
5 | @@ -1074,13 +1074,17 @@ |
---|
6 | |
---|
7 | m_scan_locked = (scan != kScan_Detect); |
---|
8 | |
---|
9 | - if (scan == m_scan) |
---|
10 | + if (scan == m_scan) { |
---|
11 | + bool interlaced = m_deint_possible && is_interlaced(scan); |
---|
12 | + videosync->SetFrameInterval(frame_interval, interlaced); |
---|
13 | return; |
---|
14 | + } |
---|
15 | |
---|
16 | bool interlaced = is_interlaced(scan); |
---|
17 | if (interlaced && !m_deint_possible) |
---|
18 | { |
---|
19 | m_scan = scan; |
---|
20 | + videosync->SetFrameInterval(frame_interval, false); |
---|
21 | return; |
---|
22 | } |
---|
23 | |
---|
24 | @@ -1114,11 +1118,8 @@ |
---|
25 | if (kScan_Progressive == scan) |
---|
26 | { |
---|
27 | m_double_process = false; |
---|
28 | - if (m_double_framerate) |
---|
29 | - { |
---|
30 | - m_double_framerate = false; |
---|
31 | - videosync->SetFrameInterval(frame_interval, false); |
---|
32 | - } |
---|
33 | + m_double_framerate = false; |
---|
34 | + videosync->SetFrameInterval(frame_interval, false); |
---|
35 | videoOutput->SetDeinterlacingEnabled(false); |
---|
36 | VERBOSE(VB_PLAYBACK, "Disabled deinterlacing"); |
---|
37 | } |
---|
38 | Index: mythtv/libs/libmythtv/vsync.cpp |
---|
39 | =================================================================== |
---|
40 | --- mythtv/libs/libmythtv/vsync.cpp (revision 22730) |
---|
41 | +++ mythtv/libs/libmythtv/vsync.cpp (working copy) |
---|
42 | @@ -197,25 +197,15 @@ |
---|
43 | { |
---|
44 | struct timeval now; |
---|
45 | gettimeofday(&now, NULL); |
---|
46 | - //cout << "CalcDelay: next: " << timeval_str(m_nexttrigger) << " now " |
---|
47 | - // << timeval_str(now) << endl; |
---|
48 | |
---|
49 | int ret_val = (m_nexttrigger.tv_sec - now.tv_sec) * 1000000 + |
---|
50 | (m_nexttrigger.tv_usec - now.tv_usec); |
---|
51 | |
---|
52 | - //cout << "delay " << ret_val << endl; |
---|
53 | - |
---|
54 | - if (ret_val > m_frame_interval * 2) |
---|
55 | - { |
---|
56 | - if (m_interlaced) |
---|
57 | - ret_val = m_frame_interval; // same as / 2 * 2. |
---|
58 | - else |
---|
59 | - ret_val = m_frame_interval * 2; |
---|
60 | - |
---|
61 | - // set nexttrigger to our new target time |
---|
62 | + // We don't want to allow too much underflow. If |
---|
63 | + // the trigger time is too far in the past, reset it now. |
---|
64 | + if (ret_val < -m_frame_interval / 2) { |
---|
65 | m_nexttrigger.tv_sec = now.tv_sec; |
---|
66 | m_nexttrigger.tv_usec = now.tv_usec; |
---|
67 | - OffsetTimeval(m_nexttrigger, ret_val); |
---|
68 | } |
---|
69 | |
---|
70 | return ret_val; |
---|