Index: /home/andreas/devel/mythtv/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp =================================================================== --- /home/andreas/devel/mythtv/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp (revision 20635) +++ /home/andreas/devel/mythtv/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp (working copy) @@ -297,6 +297,13 @@ text_size = 8 * (sizeof(teletextsubtitle) + VT_WIDTH); for (int i = 0; i < MAXTBUFFER; i++) txtbuffers[i].buffer = new unsigned char[text_size + 1]; + + // Read the global audio sync (lipsync) settings + db_audio_sync = gContext->GetNumSettingOnHost( + "AudioSync", gContext->GetHostName(), 0); + SaveAudioTimecodeOffset(db_audio_sync); + + } NuppelVideoPlayer::~NuppelVideoPlayer(void) Index: /home/andreas/devel/mythtv/mythtv/libs/libmythtv/NuppelVideoPlayer.h =================================================================== --- /home/andreas/devel/mythtv/mythtv/libs/libmythtv/NuppelVideoPlayer.h (revision 20635) +++ /home/andreas/devel/mythtv/mythtv/libs/libmythtv/NuppelVideoPlayer.h (working copy) @@ -803,6 +803,7 @@ bool decode_extra_audio; float m_stored_audio_stretchfactor; bool audio_paused; + long long db_audio_sync; // Audio warping stuff bool usevideotimebase; Index: /home/andreas/devel/mythtv/mythtv/libs/libmythtv/tv_play.cpp =================================================================== --- /home/andreas/devel/mythtv/mythtv/libs/libmythtv/tv_play.cpp (revision 20635) +++ /home/andreas/devel/mythtv/mythtv/libs/libmythtv/tv_play.cpp (working copy) @@ -8001,7 +8001,7 @@ // dir in 10ms jumps void TV::ChangeAudioSync(PlayerContext *ctx, int dir, bool allowEdit) { - long long newval; + long long newval = 0; ctx->LockDeleteNVP(__FILE__, __LINE__); if (!ctx->nvp) @@ -8009,10 +8009,14 @@ ctx->UnlockDeleteNVP(__FILE__, __LINE__); return; } - + + VERBOSE(VB_PLAYBACK, LOC + "ChangeAudioSync("<nvp->GetAudioTimecodeOffset(); - + audiosyncBaseline = ctx->nvp->GetAudioTimecodeOffset(); + + VERBOSE(VB_PLAYBACK, LOC + "ChangeAudioSync("<nvp->GetAudioTimecodeOffset(); } - else + else if (dir != 0) { newval = ctx->nvp->AdjustAudioTimecodeOffset(dir*10) - audiosyncBaseline; - } + } + + VERBOSE(VB_PLAYBACK, LOC + "ChangeAudioSync - newval: "<UnlockDeleteNVP(__FILE__, __LINE__); OSD *osd = GetOSDLock(ctx); @@ -8037,7 +8044,7 @@ OSD *osd = GetOSDLock(ctx); if (osd && !browsemode) { - QString text = QString(" %1 ms").arg(newval); + QString text = QString(" %1 ms (+ %2 ms)").arg(newval).arg(audiosyncBaseline); int val = (int)newval; if (dir == 1000000 || dir == -1000000) { Index: /home/andreas/devel/mythtv/mythtv/programs/mythfrontend/globalsettings.cpp =================================================================== --- /home/andreas/devel/mythtv/mythtv/programs/mythfrontend/globalsettings.cpp (revision 20635) +++ /home/andreas/devel/mythtv/mythtv/programs/mythfrontend/globalsettings.cpp (working copy) @@ -2728,7 +2728,6 @@ static HostCheckBox *UseFixedWindowSize() { -{ HostCheckBox *gc = new HostCheckBox("UseFixedWindowSize"); gc->setLabel(QObject::tr("Use fixed window size")); gc->setValue(true); @@ -2737,7 +2736,6 @@ "window can be resized")); return gc; } -} static HostCheckBox *RandomTheme() @@ -2872,6 +2870,16 @@ return gc; } +static HostSpinBox *AudioSync() +{ + HostSpinBox *gs = new HostSpinBox("AudioSync", -1600, 1600, 8, true); + gs->setLabel(QObject::tr("Audio sync offset")); + gs->setValue(0); + gs->setHelpText(QObject::tr("The global offset for audio synchronization " + "(Lipsync)")); + return gs; +} + ThemeSelector::ThemeSelector(QString label): HostImageSelect(label) { @@ -3446,6 +3454,7 @@ addChild(MaxAudioChannels()); addChild(AudioUpmixType()); + addChild(AudioSync()); // General boolean settings addChild(AC3PassThrough());