Ticket #12990: mythtv-gitdiff-mythplayer-cpp-20170206.txt

File mythtv-gitdiff-mythplayer-cpp-20170206.txt, 4.9 KB (added by blm-ubunet@…, 7 years ago)

git diff my_branch vs master for mythplayer.cpp

Line 
1diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp
2index 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