RESULT eDVBServicePlay::setSlowMotion(int ratio)
{
+ assert(ratio); /* The API changed: instead of calling setSlowMotion(0), call play! */
eDebug("eDVBServicePlay::setSlowMotion(%d)", ratio);
+ setFastForward_internal(0);
if (m_decoder)
return m_decoder->setSlowMotion(ratio);
else
RESULT eDVBServicePlay::setFastForward(int ratio)
{
eDebug("eDVBServicePlay::setFastForward(%d)", ratio);
+ assert(ratio);
+ return setFastForward_internal(ratio);
+}
+
+RESULT eDVBServicePlay::setFastForward_internal(int ratio)
+{
int skipmode, ffratio;
if (ratio > 8)
if (!m_decoder)
return -1;
- return m_decoder->setFastForward(ffratio);
+ if (ffratio == 0)
+ return 0;
+ else if (ffratio != 1)
+ return m_decoder->setFastForward(ffratio);
+ else
+ return m_decoder->setTrickmode();
}
RESULT eDVBServicePlay::seek(ePtr<iSeekableService> &ptr)
RESULT eDVBServicePlay::pause()
{
eDebug("eDVBServicePlay::pause");
- if (!m_is_paused && m_decoder)
+ setFastForward_internal(0);
+ if (m_decoder)
{
- m_is_paused = 1;
- return m_decoder->freeze(0);
+ return m_decoder->pause();
} else
return -1;
}
RESULT eDVBServicePlay::unpause()
{
eDebug("eDVBServicePlay::unpause");
- if (m_is_paused && m_decoder)
+ setFastForward_internal(0);
+ if (m_decoder)
{
- m_is_paused = 0;
- return m_decoder->unfreeze();
+ return m_decoder->play();
} else
return -1;
}
RESULT eDVBServicePlay::setTrickmode(int trick)
{
- if (m_decoder)
- m_decoder->setTrickmode(trick);
- return 0;
+ /* currently unimplemented */
+ return -1;
}
RESULT eDVBServicePlay::isCurrentlySeekable()
{
int ret = selectAudioStream(i);
- if (m_decoder->start())
+ if (m_decoder->play())
return -5;
return ret;
m_teletext_parser->start(program.textPid);
if (!m_is_primary)
- m_decoder->setTrickmode(1);
+ m_decoder->setTrickmode();
if (m_is_paused)
- m_decoder->preroll();
+ m_decoder->pause();
else
- m_decoder->start();
+ m_decoder->play();
if (vpid > 0 && vpid < 0x2000)
;