1 | diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp |
---|
2 | index 3db086f..cb10228 100644 |
---|
3 | --- a/mythtv/libs/libmythtv/mythplayer.cpp |
---|
4 | +++ b/mythtv/libs/libmythtv/mythplayer.cpp |
---|
5 | @@ -79,7 +79,7 @@ const double MythPlayer::kInaccuracyNone = 0; |
---|
6 | // By default, when seeking, snap to a keyframe if the keyframe's |
---|
7 | // distance from the target frame is less than 10% of the total seek |
---|
8 | // distance. |
---|
9 | -const double MythPlayer::kInaccuracyDefault = 0.1; |
---|
10 | +const double MythPlayer::kInaccuracyDefault = 0.2; |
---|
11 | |
---|
12 | // Allow greater inaccuracy (50%) in the cutlist editor (unless the |
---|
13 | // editor seek distance is set to 1 frame or 1 keyframe). |
---|
14 | @@ -202,7 +202,7 @@ MythPlayer::MythPlayer(PlayerFlags flags) |
---|
15 | decoder_lock(QMutex::Recursive), |
---|
16 | next_play_speed(1.0f), next_normal_speed(true), |
---|
17 | play_speed(1.0f), normal_speed(true), |
---|
18 | - frame_interval((int)(1000000.0f / 30)), m_frame_interval(0), |
---|
19 | + frame_interval((int)(1000000.0f / 25)), m_frame_interval(0), |
---|
20 | ffrew_skip(1),ffrew_adjust(0), |
---|
21 | // Audio and video synchronization stuff |
---|
22 | videosync(NULL), avsync_delay(0), |
---|
23 | @@ -673,9 +673,7 @@ FrameScanType MythPlayer::detectInterlace(FrameScanType newScan, |
---|
24 | // isn't, we have to guess. |
---|
25 | |
---|
26 | scan = kScan_Interlaced; // default to interlaced |
---|
27 | - if (720 == video_height) // ATSC 720p |
---|
28 | - scan = kScan_Progressive; |
---|
29 | - else if (fps > 45) // software deinterlacing |
---|
30 | + if (fps > 45) // software deinterlacing |
---|
31 | scan = kScan_Progressive; |
---|
32 | |
---|
33 | if (kScan_Detect != newScan) |
---|
34 | @@ -1774,6 +1772,8 @@ int MythPlayer::NextCaptionTrack(int mode) |
---|
35 | void MythPlayer::SetFrameInterval(FrameScanType scan, double frame_period) |
---|
36 | { |
---|
37 | frame_interval = (int)(1000000.0f * frame_period + 0.5f); |
---|
38 | + int frameDelay = m_double_framerate ? frame_interval / 2 : frame_interval; |
---|
39 | + |
---|
40 | if (!avsync_predictor_enabled) |
---|
41 | avsync_predictor = 0; |
---|
42 | avsync_predictor_enabled = false; |
---|
43 | @@ -1783,7 +1783,7 @@ void MythPlayer::SetFrameInterval(FrameScanType scan, double frame_period) |
---|
44 | if (play_speed < 1 || play_speed > 2 || refreshrate <= 0) |
---|
45 | return; |
---|
46 | |
---|
47 | - avsync_predictor_enabled = ((frame_interval-(frame_interval/200)) < |
---|
48 | + avsync_predictor_enabled = ((frameDelay-(frameDelay/200)) < |
---|
49 | refreshrate); |
---|
50 | } |
---|
51 | |
---|
52 | @@ -1902,7 +1902,7 @@ void MythPlayer::AVSync(VideoFrame *buffer, bool limit_delay) |
---|
53 | |
---|
54 | if (avsync_predictor_enabled) |
---|
55 | { |
---|
56 | - avsync_predictor += frame_interval; |
---|
57 | + avsync_predictor += frameDelay; |
---|
58 | if (avsync_predictor >= refreshrate) |
---|
59 | { |
---|
60 | int refreshperiodsinframe = avsync_predictor/refreshrate; |
---|
61 | @@ -2011,7 +2011,7 @@ void MythPlayer::AVSync(VideoFrame *buffer, bool limit_delay) |
---|
62 | videoOutput->Show(ps); |
---|
63 | } |
---|
64 | |
---|
65 | - repeat_delay = frame_interval * repeat_pict * 0.5; |
---|
66 | + repeat_delay = frameDelay * repeat_pict * 0.5; |
---|
67 | |
---|
68 | if (repeat_delay) |
---|
69 | LOG(VB_TIMESTAMP, LOG_INFO, LOC + |
---|
70 | @@ -2037,7 +2037,7 @@ void MythPlayer::AVSync(VideoFrame *buffer, bool limit_delay) |
---|
71 | { |
---|
72 | // If audio is way behind of video, adjust for it... |
---|
73 | // by cutting the frame rate in half for the length of this frame |
---|
74 | - avsync_adjustment = frame_interval; |
---|
75 | + avsync_adjustment = frameDelay; //frame_interval |
---|
76 | lastsync = true; |
---|
77 | LOG(VB_PLAYBACK, LOG_INFO, LOC + |
---|
78 | QString("Video is %1 frames ahead of audio,\n" |
---|
79 | @@ -2055,7 +2055,7 @@ void MythPlayer::AVSync(VideoFrame *buffer, bool limit_delay) |
---|
80 | "diverge %10") |
---|
81 | .arg(currentaudiotime) |
---|
82 | .arg(timecode) |
---|
83 | - .arg(frame_interval) |
---|
84 | + .arg(frameDelay) |
---|
85 | .arg(timecode - currentaudiotime - |
---|
86 | (int)(vsync_delay_clock*audio.GetStretchFactor()+500)/1000) |
---|
87 | .arg(avsync_avg) |
---|
88 | @@ -2074,14 +2074,14 @@ void MythPlayer::AVSync(VideoFrame *buffer, bool limit_delay) |
---|
89 | int delta = (int)((timecode - prevtc)/play_speed) - |
---|
90 | (frame_interval / 1000); |
---|
91 | // If timecode is off by a frame (dropped frame) wait to sync |
---|
92 | - if (delta > (int) frame_interval / 1200 && |
---|
93 | - delta < (int) frame_interval / 1000 * 3 && |
---|
94 | + if (delta > (int) frameDelay / 1200 && |
---|
95 | + delta < (int) frameDelay / 1000 * 3 && |
---|
96 | prevrp == 0) |
---|
97 | { |
---|
98 | // wait an extra frame interval |
---|
99 | LOG(VB_PLAYBACK | VB_TIMESTAMP, LOG_INFO, LOC + |
---|
100 | QString("A/V delay %1").arg(delta)); |
---|
101 | - avsync_adjustment += frame_interval; |
---|
102 | + avsync_adjustment += frameDelay; |
---|
103 | // If we're duplicating a frame, it may be because |
---|
104 | // the container frame rate doesn't match the |
---|
105 | // stream frame rate. In this case, we increment |
---|