Skip to content

Commit

Permalink
MythCaptionsState: Move text display mode into MythCaptionsState
Browse files Browse the repository at this point in the history
Refs #264
  • Loading branch information
mark-kendall committed Nov 14, 2020
1 parent 6d846d8 commit 1b5bcf3
Show file tree
Hide file tree
Showing 10 changed files with 99 additions and 90 deletions.
11 changes: 9 additions & 2 deletions mythtv/libs/libmythtv/DVD/mythdvdplayer.cpp
Expand Up @@ -607,15 +607,22 @@ void MythDVDPlayer::DisplayDVDButton(void)
m_buttonVersion = static_cast<int>(buttonversion);
QRect buttonPos = m_playerCtx->m_buffer->DVD()->GetButtonCoords();
m_captionsOverlay.DisplayDVDButton(dvdSubtitle, buttonPos);
m_textDisplayMode = kDisplayDVDButton;
uint oldcaptions = m_captionsState.m_textDisplayMode;
m_captionsState.m_textDisplayMode = kDisplayDVDButton;
if (oldcaptions != m_captionsState.m_textDisplayMode)
emit CaptionsStateChanged(m_captionsState);
m_playerCtx->m_buffer->DVD()->ReleaseMenuButton();
}

bool MythDVDPlayer::GoToMenu(const QString& Menu)
{
if (!m_playerCtx->m_buffer->IsDVD())
return false;
m_textDisplayMode = kDisplayNone;
uint oldcaptions = m_captionsState.m_textDisplayMode;
m_captionsState.m_textDisplayMode = kDisplayNone;
if (oldcaptions != m_captionsState.m_textDisplayMode)
emit CaptionsStateChanged(m_captionsState);

bool ret = m_playerCtx->m_buffer->DVD()->GoToMenu(Menu);

if (!ret)
Expand Down
17 changes: 0 additions & 17 deletions mythtv/libs/libmythtv/mythplayer.h
Expand Up @@ -58,23 +58,6 @@ enum TCTypes
#define TCTYPESMAX 4
using tctype_arr = std::array<int64_t,TCTYPESMAX>;

// Caption Display modes
enum
{
kDisplayNone = 0x000,
kDisplayNUVTeletextCaptions = 0x001,
kDisplayTeletextCaptions = 0x002,
kDisplayAVSubtitle = 0x004,
kDisplayCC608 = 0x008,
kDisplayCC708 = 0x010,
kDisplayTextSubtitle = 0x020,
kDisplayDVDButton = 0x040,
kDisplayRawTextSubtitle = 0x080,
kDisplayAllCaptions = 0x0FF,
kDisplayTeletextMenu = 0x100,
kDisplayAllTextCaptions = ~kDisplayDVDButton & kDisplayAllCaptions
};

enum PlayerFlags
{
kNoFlags = 0x000000,
Expand Down
101 changes: 60 additions & 41 deletions mythtv/libs/libmythtv/mythplayercaptionsui.cpp
Expand Up @@ -72,7 +72,8 @@ void MythPlayerCaptionsUI::AdjustSubtitleZoom(int Delta)

void MythPlayerCaptionsUI::AdjustSubtitleDelay(int Delta)
{
bool showing = (m_textDisplayMode == kDisplayRawTextSubtitle) || (m_textDisplayMode == kDisplayTextSubtitle);
bool showing = (m_captionsState.m_textDisplayMode == kDisplayRawTextSubtitle) ||
(m_captionsState.m_textDisplayMode == kDisplayTextSubtitle);
if (!(showing && !(m_browsing || m_editing)))
return;

Expand Down Expand Up @@ -120,14 +121,17 @@ static uint toTrackType(uint Type)

void MythPlayerCaptionsUI::DisableCaptions(uint Mode, bool UpdateOSD)
{
if (m_textDisplayMode)
m_lastValidTextDisplayMode = m_textDisplayMode;
m_textDisplayMode &= ~Mode;
uint oldcaptions = m_captionsState.m_textDisplayMode;
if (m_captionsState.m_textDisplayMode != kDisplayNone)
m_lastValidTextDisplayMode = m_captionsState.m_textDisplayMode;
m_captionsState.m_textDisplayMode &= ~Mode;
if (oldcaptions != m_captionsState.m_textDisplayMode)
emit CaptionsStateChanged(m_captionsState);
ResetCaptions();

QMutexLocker locker(&m_osdLock);

bool newTextDesired = (m_textDisplayMode & kDisplayAllTextCaptions) != 0U;
bool newTextDesired = (m_captionsState.m_textDisplayMode & kDisplayAllTextCaptions) != 0U;
// Only turn off textDesired if the Operator requested it.
if (UpdateOSD || newTextDesired)
m_textDesired = newTextDesired;
Expand All @@ -146,9 +150,9 @@ void MythPlayerCaptionsUI::DisableCaptions(uint Mode, bool UpdateOSD)
}
DisableTeletext();
}
int preserve = m_textDisplayMode & (kDisplayCC608 | kDisplayTextSubtitle |
kDisplayAVSubtitle | kDisplayCC708 |
kDisplayRawTextSubtitle);
int preserve = m_captionsState.m_textDisplayMode & (kDisplayCC608 | kDisplayTextSubtitle |
kDisplayAVSubtitle | kDisplayCC708 |
kDisplayRawTextSubtitle);
if ((kDisplayCC608 & Mode) || (kDisplayCC708 & Mode) ||
(kDisplayAVSubtitle & Mode) || (kDisplayRawTextSubtitle & Mode))
{
Expand Down Expand Up @@ -212,17 +216,19 @@ void MythPlayerCaptionsUI::EnableCaptions(uint Mode, bool UpdateOSD)
static_cast<uint>(GetTrack(kTrackTypeTeletextCaptions)));

EnableTeletext(page);
m_textDisplayMode = kDisplayTeletextCaptions;
}

msg += " " + tr("On");

LOG(VB_PLAYBACK, LOG_INFO, QString("EnableCaptions(%1) msg: %2")
.arg(Mode).arg(msg));

m_textDisplayMode = Mode;
if (m_textDisplayMode)
m_lastValidTextDisplayMode = m_textDisplayMode;
uint oldcaptions = m_captionsState.m_textDisplayMode;
m_captionsState.m_textDisplayMode = Mode;
if (m_captionsState.m_textDisplayMode != kDisplayNone)
m_lastValidTextDisplayMode = m_captionsState.m_textDisplayMode;
if (oldcaptions != m_captionsState.m_textDisplayMode)
emit CaptionsStateChanged(m_captionsState);
if (UpdateOSD)
UpdateOSDMessage(msg, kOSDTimeout_Med);
}
Expand All @@ -247,12 +253,12 @@ void MythPlayerCaptionsUI::SetAllowForcedSubtitles(bool Allow)

void MythPlayerCaptionsUI::ToggleCaptions()
{
SetCaptionsEnabled(!(static_cast<bool>(m_textDisplayMode)));
SetCaptionsEnabled(!(static_cast<bool>(m_captionsState.m_textDisplayMode)));
}

uint MythPlayerCaptionsUI::GetCaptionMode() const
{
return m_textDisplayMode;
return m_captionsState.m_textDisplayMode;
}

bool MythPlayerCaptionsUI::HasTextSubtitles()
Expand All @@ -264,10 +270,10 @@ void MythPlayerCaptionsUI::ToggleCaptionsByType(uint Type)
{
QMutexLocker locker(&m_osdLock);
uint mode = toCaptionType(Type);
uint origMode = m_textDisplayMode;
uint origMode = m_captionsState.m_textDisplayMode;

if (m_textDisplayMode)
DisableCaptions(m_textDisplayMode, (origMode & mode) != 0U);
if (m_captionsState.m_textDisplayMode)
DisableCaptions(m_captionsState.m_textDisplayMode, (origMode & mode) != 0U);

if (origMode & mode)
return;
Expand All @@ -280,7 +286,7 @@ void MythPlayerCaptionsUI::SetCaptionsEnabled(bool Enable, bool UpdateOSD)
{
QMutexLocker locker(&m_osdLock);
m_enableCaptions = m_disableCaptions = false;
uint origMode = m_textDisplayMode;
uint origMode = m_captionsState.m_textDisplayMode;

// Only turn off textDesired if the Operator requested it.
if (UpdateOSD || Enable)
Expand Down Expand Up @@ -314,16 +320,20 @@ void MythPlayerCaptionsUI::SetCaptionsEnabled(bool Enable, bool UpdateOSD)
ResetCaptions();
}

/*! \brief Return whether any *optional* captions are enabled
*
* Which currently means anything except DVD buttons.
*/
bool MythPlayerCaptionsUI::GetCaptionsEnabled() const
{
return (kDisplayNUVTeletextCaptions == m_textDisplayMode) ||
(kDisplayTeletextCaptions == m_textDisplayMode) ||
(kDisplayAVSubtitle == m_textDisplayMode) ||
(kDisplayCC608 == m_textDisplayMode) ||
(kDisplayCC708 == m_textDisplayMode) ||
(kDisplayTextSubtitle == m_textDisplayMode) ||
(kDisplayRawTextSubtitle == m_textDisplayMode) ||
(kDisplayTeletextMenu == m_textDisplayMode);
return (kDisplayNUVTeletextCaptions == m_captionsState.m_textDisplayMode) ||
(kDisplayTeletextCaptions == m_captionsState.m_textDisplayMode) ||
(kDisplayAVSubtitle == m_captionsState.m_textDisplayMode) ||
(kDisplayCC608 == m_captionsState.m_textDisplayMode) ||
(kDisplayCC708 == m_captionsState.m_textDisplayMode) ||
(kDisplayTextSubtitle == m_captionsState.m_textDisplayMode) ||
(kDisplayRawTextSubtitle == m_captionsState.m_textDisplayMode) ||
(kDisplayTeletextMenu == m_captionsState.m_textDisplayMode);
}

QStringList MythPlayerCaptionsUI::GetTracks(uint Type)
Expand Down Expand Up @@ -359,7 +369,7 @@ void MythPlayerCaptionsUI::SetTrack(uint Type, uint TrackNo)
uint subtype = toCaptionType(Type);
if (subtype)
{
DisableCaptions(m_textDisplayMode, false);
DisableCaptions(m_captionsState.m_textDisplayMode, false);
EnableCaptions(subtype, true);
if ((kDisplayCC708 == subtype || kDisplayCC608 == subtype) && m_decoder)
{
Expand Down Expand Up @@ -417,23 +427,23 @@ void MythPlayerCaptionsUI::ChangeCaptionTrack(int Direction)
if (!m_decoder || (Direction < 0))
return;

if (!((m_textDisplayMode == kDisplayTextSubtitle) ||
(m_textDisplayMode == kDisplayNUVTeletextCaptions) ||
(m_textDisplayMode == kDisplayNone)))
if (!((m_captionsState.m_textDisplayMode == kDisplayTextSubtitle) ||
(m_captionsState.m_textDisplayMode == kDisplayNUVTeletextCaptions) ||
(m_captionsState.m_textDisplayMode == kDisplayNone)))
{
uint tracktype = toTrackType(m_textDisplayMode);
uint tracktype = toTrackType(m_captionsState.m_textDisplayMode);
if (GetTrack(tracktype) < m_decoder->NextTrack(tracktype))
{
SetTrack(tracktype, static_cast<uint>(m_decoder->NextTrack(tracktype)));
return;
}
}
uint nextmode = NextCaptionTrack(m_textDisplayMode);
uint nextmode = NextCaptionTrack(m_captionsState.m_textDisplayMode);
if ((nextmode == kDisplayTextSubtitle) ||
(nextmode == kDisplayNUVTeletextCaptions) ||
(nextmode == kDisplayNone))
{
DisableCaptions(m_textDisplayMode, true);
DisableCaptions(m_captionsState.m_textDisplayMode, true);
if (nextmode != kDisplayNone)
EnableCaptions(nextmode, true);
}
Expand All @@ -443,7 +453,7 @@ void MythPlayerCaptionsUI::ChangeCaptionTrack(int Direction)
uint tracks = m_decoder->GetTrackCount(tracktype);
if (tracks)
{
DisableCaptions(m_textDisplayMode, true);
DisableCaptions(m_captionsState.m_textDisplayMode, true);
SetTrack(tracktype, 0);
}
}
Expand Down Expand Up @@ -496,16 +506,22 @@ uint MythPlayerCaptionsUI::NextCaptionTrack(uint Mode)
void MythPlayerCaptionsUI::EnableTeletext(int Page)
{
QMutexLocker locker(&m_osdLock);
uint oldcaptions = m_captionsState.m_textDisplayMode;
m_captionsOverlay.EnableTeletext(true, Page);
m_lastTextDisplayMode = m_textDisplayMode;
m_textDisplayMode = kDisplayTeletextMenu;
m_lastTextDisplayMode = m_captionsState.m_textDisplayMode;
m_captionsState.m_textDisplayMode = kDisplayTeletextMenu;
if (oldcaptions != m_captionsState.m_textDisplayMode)
emit CaptionsStateChanged(m_captionsState);
}

void MythPlayerCaptionsUI::DisableTeletext()
{
QMutexLocker locker(&m_osdLock);
m_captionsOverlay.EnableTeletext(false, 0);
m_textDisplayMode = kDisplayNone;
uint oldcaptions = m_captionsState.m_textDisplayMode;
m_captionsState.m_textDisplayMode = kDisplayNone;
if (oldcaptions != m_captionsState.m_textDisplayMode)
emit CaptionsStateChanged(m_captionsState);

// If subtitles were enabled before the teletext menu was displayed then re-enable them
if (m_lastTextDisplayMode & kDisplayAllCaptions)
Expand All @@ -523,17 +539,20 @@ void MythPlayerCaptionsUI::ResetTeletext()
void MythPlayerCaptionsUI::SetTeletextPage(uint Page)
{
m_osdLock.lock();
DisableCaptions(m_textDisplayMode);
DisableCaptions(m_captionsState.m_textDisplayMode);
uint oldcaptions = m_captionsState.m_textDisplayMode;
m_ttPageNum = static_cast<int>(Page);
m_cc608.SetTTPageNum(m_ttPageNum);
m_textDisplayMode &= static_cast<uint>(~kDisplayAllCaptions);
m_textDisplayMode |= kDisplayNUVTeletextCaptions;
m_captionsState.m_textDisplayMode &= static_cast<uint>(~kDisplayAllCaptions);
m_captionsState.m_textDisplayMode |= kDisplayNUVTeletextCaptions;
if (oldcaptions != m_captionsState.m_textDisplayMode)
emit CaptionsStateChanged(m_captionsState);
m_osdLock.unlock();
}

void MythPlayerCaptionsUI::HandleTeletextAction(const QString& Action, bool &Handled)
{
if (!(m_textDisplayMode & kDisplayTeletextMenu))
if (!(m_captionsState.m_textDisplayMode & kDisplayTeletextMenu))
return;

bool exit = false;
Expand Down
3 changes: 1 addition & 2 deletions mythtv/libs/libmythtv/mythplayercaptionsui.h
Expand Up @@ -10,7 +10,7 @@ class MTV_PUBLIC MythPlayerCaptionsUI : public MythPlayerAudioUI
Q_OBJECT

signals:
void CaptionsStateChanged(MythCaptionsState CaptionsState);
void CaptionsStateChanged(MythCaptionsState& CaptionsState);
void ResizeForInteractiveTV(const QRect& Rect);
void SetInteractiveStream(const QString& Stream);
void SetInteractiveStreamPos(long Position);
Expand Down Expand Up @@ -69,7 +69,6 @@ class MTV_PUBLIC MythPlayerCaptionsUI : public MythPlayerAudioUI
MythCaptionsOverlay m_captionsOverlay;
MythCaptionsState m_captionsState { };
bool m_textDesired { false };
uint m_textDisplayMode { kDisplayNone };
uint m_lastTextDisplayMode { kDisplayNone };
uint m_lastValidTextDisplayMode { kDisplayNone };
InteractiveTV *m_interactiveTV { nullptr };
Expand Down
5 changes: 3 additions & 2 deletions mythtv/libs/libmythtv/mythplayerstate.cpp
Expand Up @@ -28,8 +28,9 @@ MythAudioState::MythAudioState(AudioPlayer* Player, int64_t Offset)
{
}

MythCaptionsState::MythCaptionsState(bool ITV)
: m_haveITV(ITV)
MythCaptionsState::MythCaptionsState(uint TextDisplayMode, bool ITV)
: m_textDisplayMode(TextDisplayMode),
m_haveITV(ITV)
{
}

Expand Down
3 changes: 2 additions & 1 deletion mythtv/libs/libmythtv/mythplayerstate.h
Expand Up @@ -59,8 +59,9 @@ class MTV_PUBLIC MythCaptionsState
{
public:
MythCaptionsState() = default;
explicit MythCaptionsState(bool ITV);
MythCaptionsState(uint TextDisplayMode, bool ITV);

uint m_textDisplayMode { kDisplayNone };
bool m_haveITV { false };
};

Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/mythplayerui.cpp
Expand Up @@ -397,7 +397,7 @@ void MythPlayerUI::ReinitVideo(bool ForceUpdate)
m_reinitOsd = true;

// Signal to main thread to reinit subtitles
if (m_textDisplayMode)
if (m_captionsState.m_textDisplayMode != kDisplayNone)
EnableSubtitles(true);

// Signal to the main thread to check auto visualise
Expand Down
2 changes: 1 addition & 1 deletion mythtv/libs/libmythtv/mythplayervideoui.cpp
Expand Up @@ -147,7 +147,7 @@ void MythPlayerVideoUI::ReinitOSD()
int stretch = static_cast<int>(lroundf(aspect * 100));
if ((m_osd.Bounds() != visible) || (m_osd.GetFontStretch() != stretch))
{
uint old = m_textDisplayMode;
uint old = m_captionsState.m_textDisplayMode;
ToggleCaptionsByType(old);
m_osd.Init(visible, aspect);
m_captionsOverlay.Init(visible, aspect);
Expand Down

0 comments on commit 1b5bcf3

Please sign in to comment.