Ticket #7772: mythtv-audiosync.patch

File mythtv-audiosync.patch, 4.0 KB (added by Robert S, 16 years ago)
Line 
1--- mythtv/programs/mythfrontend/globalsettings.cpp 2009-11-19 12:34:41.412950656 +0100
2+++ mythtv/programs/mythfrontend/globalsettings.cpp 2009-11-28 13:22:56.416257520 +0100
3@@ -2757,7 +2757,6 @@
4
5 static HostCheckBox *UseFixedWindowSize()
6 {
7-{
8 HostCheckBox *gc = new HostCheckBox("UseFixedWindowSize");
9 gc->setLabel(QObject::tr("Use fixed window size"));
10 gc->setValue(true);
11@@ -2766,6 +2765,14 @@
12 "window can be resized"));
13 return gc;
14 }
15+
16+static HostSpinBox *AudioSync()
17+{
18+ HostSpinBox *gs = new HostSpinBox("AudioSync", -1600, 1600, 8, true);
19+ gs->setLabel(QObject::tr("Audio sync offset"));
20+ gs->setValue(0);
21+ gs->setHelpText(QObject::tr("The global offset for audio synchronization (Lipsync)"));
22+ return gs;
23 }
24
25 static HostComboBox *MythDateFormat()
26@@ -3504,6 +3511,7 @@
27 vcg->setUseLabel(false);
28
29 vcg->addChild(AudioOutputDevice());
30+ vcg->addChild(AudioSync());
31
32 Setting *numchannels = MaxAudioChannels();
33 vcg->addChild(numchannels);
34--- mythtv/libs/libmythtv/tv_play.cpp 2009-11-19 12:34:01.591945869 +0100
35+++ mythtv/libs/libmythtv/tv_play.cpp 2009-11-28 13:19:59.436006433 +0100
36@@ -8132,7 +8132,7 @@
37 // dir in 10ms jumps
38 void TV::ChangeAudioSync(PlayerContext *ctx, int dir, bool allowEdit)
39 {
40- long long newval;
41+ long long newval = 0;
42
43 ctx->LockDeleteNVP(__FILE__, __LINE__);
44 if (!ctx->nvp)
45@@ -8141,9 +8141,18 @@
46 return;
47 }
48
49+ VERBOSE(VB_PLAYBACK, LOC + QString("ChangeAudioSync (%1, %2)")
50+ .arg(audiosyncBaseline)
51+ .arg(audiosyncAdjustment));
52+
53 if (!audiosyncAdjustment && LONG_LONG_MIN == audiosyncBaseline)
54 audiosyncBaseline = ctx->nvp->GetAudioTimecodeOffset();
55
56+ VERBOSE(VB_PLAYBACK, LOC + QString("ChangeAudioSync (%1, %2, %3)")
57+ .arg(audiosyncBaseline)
58+ .arg(audiosyncAdjustment)
59+ .arg(dir));
60+
61 audiosyncAdjustment = allowEdit;
62
63 if (dir == 1000000)
64@@ -8158,17 +8167,21 @@
65 audiosyncBaseline;
66 audiosyncBaseline = ctx->nvp->GetAudioTimecodeOffset();
67 }
68- else
69+ else if (dir != 0)
70 {
71 newval = ctx->nvp->AdjustAudioTimecodeOffset(dir*10) -
72 audiosyncBaseline;
73 }
74+
75+ VERBOSE(VB_PLAYBACK, LOC + QString("ChangeAudioSync - newval: %1")
76+ .arg(newval));
77+
78 ctx->UnlockDeleteNVP(__FILE__, __LINE__);
79
80 OSD *osd = GetOSDLock(ctx);
81 if (osd && !browsemode)
82 {
83- QString text = QString(" %1 ms").arg(newval);
84+ QString text = QString(" %1 ms (+ %2 ms)").arg(newval).arg(audiosyncBaseline);
85 int val = (int)newval;
86 if (dir == 1000000 || dir == -1000000)
87 {
88--- mythtv/libs/libmythtv/NuppelVideoPlayer.cpp 2009-11-25 18:22:26.833584919 +0100
89+++ mythtv/libs/libmythtv/NuppelVideoPlayer.cpp 2009-11-28 13:19:59.408009016 +0100
90@@ -294,6 +294,13 @@
91 text_size = 8 * (sizeof(teletextsubtitle) + VT_WIDTH);
92 for (int i = 0; i < MAXTBUFFER; i++)
93 txtbuffers[i].buffer = new unsigned char[text_size + 1];
94+
95+ // Read the global audio sync (lipsync) settings
96+ db_audio_sync = gContext->GetNumSettingOnHost(
97+ "AudioSync", gContext->GetHostName(), 0);
98+
99+ VERBOSE(VB_IMPORTANT, LOC_ERR + QString("Saved audio timecode offset of %1").arg(db_audio_sync));
100+ SaveAudioTimecodeOffset(db_audio_sync);
101 }
102
103 NuppelVideoPlayer::~NuppelVideoPlayer(void)
104@@ -4784,7 +4789,7 @@
105 if (savedAudioTimecodeOffset)
106 {
107 tc_wrap[TC_AUDIO] = savedAudioTimecodeOffset;
108- savedAudioTimecodeOffset = 0;
109+ //savedAudioTimecodeOffset = 0;
110 }
111
112 SetPrebuffering(true);
113--- mythtv/libs/libmythtv/NuppelVideoPlayer.h 2009-11-19 12:34:01.418700673 +0100
114+++ mythtv/libs/libmythtv/NuppelVideoPlayer.h 2009-11-28 13:19:59.384000668 +0100
115@@ -803,6 +803,7 @@
116 bool decode_extra_audio;
117 float m_stored_audio_stretchfactor;
118 bool audio_paused;
119+ long long db_audio_sync;
120
121 // Audio warping stuff
122 bool usevideotimebase;