From 4225ff02e2a680eb4b329a9f15d49ce119467217 Mon Sep 17 00:00:00 2001 From: Mark Kendall Date: Thu, 18 Feb 2021 14:54:34 +0000 Subject: [PATCH] MythDVDPlayer: Add specific method for disabling DVD subs - which is signalled (thread safe) from the decoder, allowing the removal of the GetCaptionsMode call, which was not thread safe. --- mythtv/libs/libmythtv/DVD/mythdvddecoder.cpp | 14 ++++++-------- mythtv/libs/libmythtv/DVD/mythdvdplayer.cpp | 7 +++++++ mythtv/libs/libmythtv/DVD/mythdvdplayer.h | 4 ++++ mythtv/libs/libmythtv/mythplayer.h | 1 - mythtv/libs/libmythtv/mythplayercaptionsui.cpp | 5 ----- mythtv/libs/libmythtv/mythplayercaptionsui.h | 2 -- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/mythtv/libs/libmythtv/DVD/mythdvddecoder.cpp b/mythtv/libs/libmythtv/DVD/mythdvddecoder.cpp index 0d92e620b3f..3a6bd3ce8f3 100644 --- a/mythtv/libs/libmythtv/DVD/mythdvddecoder.cpp +++ b/mythtv/libs/libmythtv/DVD/mythdvddecoder.cpp @@ -485,7 +485,7 @@ void MythDVDDecoder::PostProcessTracks(void) m_tracks[kTrackTypeSubtitle] = filteredTracks; stable_sort(m_tracks[kTrackTypeSubtitle].begin(), m_tracks[kTrackTypeSubtitle].end()); - int trackNo = -1; + int track = -1; int selectedStream = m_ringBuffer->DVD()->GetTrack(kTrackTypeSubtitle); // Now iterate over the sorted list and try to find the index of the @@ -509,19 +509,17 @@ void MythDVDDecoder::PostProcessTracks(void) .arg(iso639_key_toName(stream. m_language))); if ((selectedStream != -1) && (stream.m_stream_id == selectedStream)) - trackNo = static_cast(idx); + track = static_cast(idx); } - uint captionmode = m_parent->GetCaptionMode(); int trackcount = static_cast(m_tracks[kTrackTypeSubtitle].size()); - - if (captionmode == kDisplayAVSubtitle && (trackNo < 0 || trackNo >= trackcount)) + if (auto * dvdplayer = dynamic_cast(m_parent); dvdplayer && (track < 0 || track >= trackcount)) { - m_parent->EnableSubtitles(false); + emit dvdplayer->DisableDVDSubtitles(); } - else if (trackNo >= 0 && trackNo < trackcount) + else if (track >= 0 && track < trackcount) { - SetTrack(kTrackTypeSubtitle, trackNo); + SetTrack(kTrackTypeSubtitle, track); m_parent->EnableSubtitles(true); } } diff --git a/mythtv/libs/libmythtv/DVD/mythdvdplayer.cpp b/mythtv/libs/libmythtv/DVD/mythdvdplayer.cpp index 2b5a2699392..c38243bce49 100644 --- a/mythtv/libs/libmythtv/DVD/mythdvdplayer.cpp +++ b/mythtv/libs/libmythtv/DVD/mythdvdplayer.cpp @@ -12,6 +12,7 @@ MythDVDPlayer::MythDVDPlayer(MythMainWindow* MainWindow, TV* Tv, PlayerContext* { connect(Tv, &TV::GoToMenu, this, &MythDVDPlayer::GoToMenu); connect(Tv, &TV::GoToDVDProgram, this, &MythDVDPlayer::GoToDVDProgram); + connect(this, &MythDVDPlayer::DisableDVDSubtitles, this, &MythDVDPlayer::DoDisableDVDSubtitles); } void MythDVDPlayer::AutoDeint(MythVideoFrame *Frame, MythVideoOutput *VideoOutput, @@ -49,6 +50,12 @@ bool MythDVDPlayer::HasReachedEof(void) const return eof != kEofStateNone && !m_allPaused; } +void MythDVDPlayer::DoDisableDVDSubtitles() +{ + if (kDisplayAVSubtitle == m_captionsState.m_textDisplayMode) + SetCaptionsEnabled(false, false); +} + void MythDVDPlayer::DisableCaptions(uint Mode, bool OSDMsg) { if ((kDisplayAVSubtitle & Mode) && m_playerCtx->m_buffer->IsDVD()) diff --git a/mythtv/libs/libmythtv/DVD/mythdvdplayer.h b/mythtv/libs/libmythtv/DVD/mythdvdplayer.h index 41315da8765..c44518124f2 100644 --- a/mythtv/libs/libmythtv/DVD/mythdvdplayer.h +++ b/mythtv/libs/libmythtv/DVD/mythdvdplayer.h @@ -11,6 +11,9 @@ class MythDVDPlayer : public MythPlayerUI { Q_OBJECT + signals: + void DisableDVDSubtitles(); + public: MythDVDPlayer(MythMainWindow* MainWindow, TV* Tv, PlayerContext* Context,PlayerFlags Flags = kNoFlags); @@ -62,6 +65,7 @@ class MythDVDPlayer : public MythPlayerUI void DisableCaptions(uint Mode, bool OSDMsg = true) override; void EnableCaptions(uint Mode, bool OSDMsg = true) override; void SetTrack(uint Type, uint TrackNo) override; + void DoDisableDVDSubtitles(); private: void DisplayDVDButton(void); diff --git a/mythtv/libs/libmythtv/mythplayer.h b/mythtv/libs/libmythtv/mythplayer.h index f247bf74efa..8fdc4e285b4 100644 --- a/mythtv/libs/libmythtv/mythplayer.h +++ b/mythtv/libs/libmythtv/mythplayer.h @@ -191,7 +191,6 @@ class MTV_PUBLIC MythPlayer : public QObject virtual bool PrepareAudioSample(std::chrono::milliseconds &timecode); // Public Closed caption and teletext stuff - virtual uint GetCaptionMode() const { return kDisplayNone; } virtual CC708Reader *GetCC708Reader(uint /*id*/=0) { return &m_cc708; } virtual CC608Reader *GetCC608Reader(uint /*id*/=0) { return &m_cc608; } virtual SubtitleReader *GetSubReader(uint /*id*/=0) { return &m_subReader; } diff --git a/mythtv/libs/libmythtv/mythplayercaptionsui.cpp b/mythtv/libs/libmythtv/mythplayercaptionsui.cpp index 0148cf6c9be..6c8bea6f69c 100644 --- a/mythtv/libs/libmythtv/mythplayercaptionsui.cpp +++ b/mythtv/libs/libmythtv/mythplayercaptionsui.cpp @@ -265,11 +265,6 @@ void MythPlayerCaptionsUI::ToggleCaptions() SetCaptionsEnabled(!(static_cast(m_captionsState.m_textDisplayMode))); } -uint MythPlayerCaptionsUI::GetCaptionMode() const -{ - return m_captionsState.m_textDisplayMode; -} - void MythPlayerCaptionsUI::ToggleCaptionsByType(uint Type) { QMutexLocker locker(&m_osdLock); diff --git a/mythtv/libs/libmythtv/mythplayercaptionsui.h b/mythtv/libs/libmythtv/mythplayercaptionsui.h index 4ee2f778082..103547dec40 100644 --- a/mythtv/libs/libmythtv/mythplayercaptionsui.h +++ b/mythtv/libs/libmythtv/mythplayercaptionsui.h @@ -20,8 +20,6 @@ class MTV_PUBLIC MythPlayerCaptionsUI : public MythPlayerAudioUI MythPlayerCaptionsUI(MythMainWindow* MainWindow, TV* Tv, PlayerContext* Context, PlayerFlags Flags); ~MythPlayerCaptionsUI() override; - uint GetCaptionMode() const override; - // N.B. These methods handle audio tracks as well. Fix. QStringList GetTracks(uint Type); uint GetTrackCount(uint Type);