Skip to content

Commit

Permalink
Clean up SPEEDINC/DEC support and INFO playback OSD.
Browse files Browse the repository at this point in the history
Remove support for the non-slomo speeds.  Those speeds are already
supported more cleanly by either timestretch or fast-forward.  This
effectively makes the SPEEDINC/DEC support a slow motion only
function.

Also, make the OSD, "play" message when INFO is pressed be consistent
with the OSD message that was displayed when the speed was originally
set, especially, fast-forward and rewind speeds.
  • Loading branch information
gigem committed Nov 2, 2021
1 parent 7acf261 commit 58abc95
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 35 deletions.
31 changes: 18 additions & 13 deletions mythtv/libs/libmythtv/playercontext.cpp
Expand Up @@ -425,21 +425,26 @@ QString PlayerContext::GetFilters(const QString &baseFilters) const
QString PlayerContext::GetPlayMessage(void) const
{
QString mesg = QObject::tr("Play");
if (m_tsNormal != 1.0F)
if (m_ffRewState < 0)
{
if (m_tsNormal == 0.5F)
mesg += QString(" 1/2x");
else if (0.32F < m_tsNormal && m_tsNormal < 0.34F)
mesg += QString(" 1/3x");
else if (m_tsNormal == 0.25F)
mesg += QString(" 1/4x");
else if (m_tsNormal == 0.125F)
mesg += QString(" 1/8x");
else if (m_tsNormal == 0.0625F)
mesg += QString(" 1/16x");
else
mesg += QString(" %1x").arg(m_tsNormal);
mesg = QObject::tr("Rewind");
mesg += QString(" %1X").arg(-m_ffRewSpeed);
}
else if (m_ffRewState > 0)
{
mesg = QObject::tr("Forward");
mesg += QString(" %1X").arg(m_ffRewSpeed);
}
// Make sure these values for m_ffRewSpeed in TV::ChangeSpeed()
// and PlayerContext::GetPlayMessage() stay in sync.
else if (m_ffRewSpeed == 0)
mesg += QString(" %1X").arg(m_tsNormal);
else if (m_ffRewSpeed == -1)
mesg += QString(" 1/3X");
else if (m_ffRewSpeed == -2)
mesg += QString(" 1/8X");
else if (m_ffRewSpeed == -3)
mesg += QString(" 1/16X");

return mesg;
}
Expand Down
46 changes: 24 additions & 22 deletions mythtv/libs/libmythtv/tv_play.cpp
Expand Up @@ -5104,37 +5104,39 @@ void TV::ChangeSpeed(int Direction)
m_playerContext.m_ffRewSpeed += Direction;

float time = StopFFRew();
float speed = NAN;
QString mesg;

switch (m_playerContext.m_ffRewSpeed)
{
case 4: speed = 16.0F; mesg = tr("Speed 16X"); break;
case 3: speed = 8.0F; mesg = tr("Speed 8X"); break;
case 2: speed = 3.0F; mesg = tr("Speed 3X"); break;
case 1: speed = 2.0F; mesg = tr("Speed 2X"); break;
case 0: speed = 1.0F; mesg = m_playerContext.GetPlayMessage(); break;
case -1: speed = 1.0F / 3; mesg = tr("Speed 1/3X"); break;
case -2: speed = 1.0F / 8; mesg = tr("Speed 1/8X"); break;
case -3: speed = 1.0F / 16; mesg = tr("Speed 1/16X"); break;
case -4:
DoTogglePause(true);
return;
default:
m_playerContext.m_ffRewSpeed = old_speed;
return;
float speed;

// Make sure these values for m_ffRewSpeed in TV::ChangeSpeed()
// and PlayerContext::GetPlayMessage() stay in sync.
if (m_playerContext.m_ffRewSpeed == 0)
speed = m_playerContext.m_tsNormal;
else if (m_playerContext.m_ffRewSpeed == -1)
speed = 1.0F / 3;
else if (m_playerContext.m_ffRewSpeed == -2)
speed = 1.0F / 8;
else if (m_playerContext.m_ffRewSpeed == -3)
speed = 1.0F / 16;
else if (m_playerContext.m_ffRewSpeed == -4)
{
DoTogglePause(true);
return;
}

else
{
m_playerContext.m_ffRewSpeed = old_speed;
return;
}

m_playerContext.LockDeletePlayer(__FILE__, __LINE__);
if (m_player && !m_player->Play(
(!m_playerContext.m_ffRewSpeed) ? m_playerContext.m_tsNormal: speed, m_playerContext.m_ffRewSpeed == 0))
if (m_player && !m_player->Play(speed, m_playerContext.m_ffRewSpeed == 0))
{
m_playerContext.m_ffRewSpeed = old_speed;
m_playerContext.UnlockDeletePlayer(__FILE__, __LINE__);
return;
}
m_playerContext.UnlockDeletePlayer(__FILE__, __LINE__);
DoPlayerSeek(time);
QString mesg = m_playerContext.GetPlayMessage();
UpdateOSDSeekMessage(mesg, kOSDTimeout_Med);

SetSpeedChangeTimer(0ms, __LINE__);
Expand Down

0 comments on commit 58abc95

Please sign in to comment.