| 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;
|
|---|