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

File mythtvgitdiff-master-refresh-jitter.txt, 2.6 KB (added by blm-ubunet@…, 13 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