Ticket #11246: mythtvgitdiff-master-refresh-jitter.txt

File mythtvgitdiff-master-refresh-jitter.txt, 2.6 KB (added by blm-ubunet@…, 11 years ago)

0.28 patch to fix refreshrate jitter reintroduced by recent commit to help sick AVI files

Line 
1diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp
2index cbbb395..dff1550 100644
3--- a/mythtv/libs/libmythtv/mythplayer.cpp
4+++ b/mythtv/libs/libmythtv/mythplayer.cpp
5@@ -212,7 +212,7 @@ MythPlayer::MythPlayer(PlayerFlags flags)
6       decoder_lock(QMutex::Recursive),
7       next_play_speed(1.0f),        next_normal_speed(true),
8       play_speed(1.0f),             normal_speed(true),
9-      frame_interval((int)(1000000.0f / 30)), m_frame_interval(0),
10+      frame_interval((int)(1000000.0f / 25)), m_frame_interval(0),
11       ffrew_skip(1),ffrew_adjust(0),
12       // Audio and video synchronization stuff
13       videosync(NULL),              avsync_delay(0),
14@@ -1928,7 +1928,7 @@ void MythPlayer::AVSync(VideoFrame *buffer, bool limit_delay)
15             videoOutput->Show(ps);
16         }
17 
18-        repeat_delay = frame_interval * repeat_pict * 0.5;
19+        repeat_delay = refreshrate * repeat_pict * 0.5;
20 
21         if (repeat_delay)
22             LOG(VB_TIMESTAMP, LOG_INFO, LOC +
23@@ -1954,7 +1954,7 @@ void MythPlayer::AVSync(VideoFrame *buffer, bool limit_delay)
24     {
25         // If audio is way behind of video, adjust for it...
26         // by cutting the frame rate in half for the length of this frame
27-        avsync_adjustment = frame_interval;
28+        avsync_adjustment = refreshrate;
29         lastsync = true;
30         LOG(VB_PLAYBACK, LOG_INFO, LOC +
31             QString("Video is %1 frames ahead of audio,\n"
32@@ -1987,16 +1987,16 @@ void MythPlayer::AVSync(VideoFrame *buffer, bool limit_delay)
33             if (prevtc != 0)
34             {
35                 int delta = (int)((timecode - prevtc)/play_speed) -
36-                                  (frame_interval / 1000);
37+                                  (refreshrate / 1000);
38                 // If timecode is off by a frame (dropped frame) wait to sync
39-                if (delta > (int) frame_interval / 1200 &&
40-                    delta < (int) frame_interval / 1000 * 3 &&
41+                if (delta > (int) refreshrate / 1200 &&
42+                    delta < (int) refreshrate / 1000 * 3 &&
43                     prevrp == 0)
44                 {
45                     // wait an extra frame interval
46                     LOG(VB_PLAYBACK | VB_TIMESTAMP, LOG_INFO, LOC +
47                         QString("A/V delay %1").arg(delta));
48-                    avsync_adjustment += frame_interval;
49+                    avsync_adjustment += refreshrate;
50                     // If we're duplicating a frame, it may be because
51                     // the container frame rate doesn't match the
52                     // stream frame rate.  In this case, we increment
53