Index: libs/libmythtv/NuppelVideoPlayer.cpp =================================================================== --- libs/libmythtv/NuppelVideoPlayer.cpp (revision 10210) +++ libs/libmythtv/NuppelVideoPlayer.cpp (working copy) @@ -2439,8 +2439,30 @@ // handle Interactive TV if (GetInteractiveTV() && GetDecoder()) - itvVisible = GetDecoder()->ITVUpdate(itvVisible); + { + QMutexLocker locker(&itvLock); + OSD *osd = GetOSD(); + if (osd) + { + OSDSet *itvosd = osd->GetSet("interactive"); + + if (itvosd) + { + bool visible = false; + if (interactiveTV->ImageHasChanged() || !itvVisible) + { + interactiveTV->UpdateOSD(itvosd); + visible = true; + itvVisible = true; + } + + if (visible) + osd->SetVisible(itvosd, 0); + } + } + } + // handle EIA-608 and Teletext if (textDisplayMode & kDisplayNUVCaptions) ShowText(); @@ -5711,7 +5733,11 @@ QMutexLocker locker(&decoder_change_lock); if (GetDecoder()) - return GetDecoder()->ITVHandleAction(action); + { + QMutexLocker locker(&itvLock); + if (GetInteractiveTV()) + return interactiveTV->OfferKey(action); + } return false; } @@ -5734,8 +5760,12 @@ return; } - GetDecoder()->ITVRestart(chanid, cardid, isLiveTV); - + { + QMutexLocker locker(&itvLock); + if (GetInteractiveTV()) + interactiveTV->Restart(chanid, cardid, isLiveTV); + } + osd->ClearAll("interactive"); itvosd->Display(); osd->SetVisible(itvosd, 0); Index: libs/libmythtv/avformatdecoder.cpp =================================================================== --- libs/libmythtv/avformatdecoder.cpp (revision 10210) +++ libs/libmythtv/avformatdecoder.cpp (working copy) @@ -2204,54 +2204,6 @@ return ccd608->GetXDS(key); } -bool AvFormatDecoder::ITVUpdate(bool itvVisible) -{ - QMutexLocker locker(&itvLock); - - OSD *osd = GetNVP()->GetOSD(); - if (!osd) - return itvVisible; - - OSDSet *itvosd = osd->GetSet("interactive"); - if (!itvosd) - return itvVisible; - - if (!itv) - return itvVisible; - - bool visible = false; - if (itv->ImageHasChanged() || !itvVisible) - { - itv->UpdateOSD(itvosd); - visible = true; - itvVisible = true; - } - - if (visible) - osd->SetVisible(itvosd, 0); - - return itvVisible; -} - -bool AvFormatDecoder::ITVHandleAction(const QString &action) -{ - QMutexLocker locker(&itvLock); - if (itv) - return itv->OfferKey(action); - return false; -} - -/** \fn AvFormatDecoder::ITVRestart(uint,uint,bool) - * \brief Restart the MHEG/MHP engine. - */ -void AvFormatDecoder::ITVRestart(uint chanid, uint cardid, bool isLiveTV) -{ - QMutexLocker locker(&itvLock); - itv = GetNVP()->GetInteractiveTV(); - if (itv) - itv->Restart(chanid, cardid, isLiveTV); -} - bool AvFormatDecoder::SetAudioByComponentTag(int tag) { for (uint i = 0; i < tracks[kTrackTypeAudio].size(); i++) Index: libs/libmythtv/decoderbase.h =================================================================== --- libs/libmythtv/decoderbase.h (revision 10210) +++ libs/libmythtv/decoderbase.h (working copy) @@ -129,11 +129,6 @@ virtual QString GetXDS(const QString&) const { return QString::null; } // MHEG/MHI stuff - virtual bool ITVUpdate(bool /*visible*/) { return false; } - virtual bool ITVHandleAction(const QString& /*action*/) { return false; } - virtual void ITVRestart(uint /*chanid*/, uint /*cardid*/, - bool /*livetv*/) { } - virtual bool SetAudioByComponentTag(int) { return false; } virtual bool SetVideoByComponentTag(int) { return false; } Index: libs/libmythtv/NuppelVideoPlayer.h =================================================================== --- libs/libmythtv/NuppelVideoPlayer.h (revision 10210) +++ libs/libmythtv/NuppelVideoPlayer.h (working copy) @@ -643,6 +643,7 @@ bool itvVisible; InteractiveTV *interactiveTV; bool itvEnabled; + QMutex itvLock; // OSD stuff OSD *osd; Index: libs/libmythtv/avformatdecoder.h =================================================================== --- libs/libmythtv/avformatdecoder.h (revision 10210) +++ libs/libmythtv/avformatdecoder.h (working copy) @@ -136,10 +136,6 @@ virtual QString GetXDS(const QString&) const; // MHEG stuff - virtual bool ITVUpdate(bool itvVisible); - virtual bool ITVHandleAction(const QString&); - virtual void ITVRestart(uint chanid, uint cardid, bool livetv); - virtual bool SetAudioByComponentTag(int tag); virtual bool SetVideoByComponentTag(int tag); @@ -239,7 +235,6 @@ // MHEG InteractiveTV *itv; ///< MHEG/MHP decoder int selectedVideoIndex; ///< MHEG/MHP video stream to use. - QMutex itvLock; // Audio short int *audioSamples;