git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge commit 'origin/translations' into experimental
[enigma2.git]
/
lib
/
service
/
servicedvb.cpp
diff --git
a/lib/service/servicedvb.cpp
b/lib/service/servicedvb.cpp
index b5e2651fc029fe7a71faa9d2757cfc04d23df4ee..615329c9b5d1cf064a08b5f95a246ad6d78c5335 100644
(file)
--- a/
lib/service/servicedvb.cpp
+++ b/
lib/service/servicedvb.cpp
@@
-1387,7
+1387,14
@@
RESULT eDVBServicePlay::setTrickmode(int trick)
RESULT eDVBServicePlay::isCurrentlySeekable()
{
RESULT eDVBServicePlay::isCurrentlySeekable()
{
- return m_is_pvr || m_timeshift_active;
+ int ret = 0;
+ if (m_decoder)
+ {
+ ret = (m_is_pvr || m_timeshift_active) ? 3 : 0; // fast forward/backward possible and seeking possible
+ if (m_decoder->getVideoProgressive() == -1)
+ ret &= ~2;
+ }
+ return ret;
}
RESULT eDVBServicePlay::frontendInfo(ePtr<iFrontendInformation> &ptr)
}
RESULT eDVBServicePlay::frontendInfo(ePtr<iFrontendInformation> &ptr)
@@
-2260,9
+2267,7
@@
void eDVBServicePlay::switchToLive()
m_timeshift_active = 0;
m_timeshift_changed = 1;
m_timeshift_active = 0;
m_timeshift_changed = 1;
- m_event((iPlayableService*)this, evSeekableStatusChanged);
-
- updateDecoder();
+ updateDecoder(true);
}
void eDVBServicePlay::switchToTimeshift()
}
void eDVBServicePlay::switchToTimeshift()
@@
-2292,14
+2297,13
@@
void eDVBServicePlay::switchToTimeshift()
eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now.");
pause();
eDebug("eDVBServicePlay::switchToTimeshift, in pause mode now.");
pause();
- updateDecoder(); /* mainly to switch off PCR, and to set pause */
-
- m_event((iPlayableService*)this, evSeekableStatusChanged);
+ updateDecoder(true); /* mainly to switch off PCR, and to set pause */
}
}
-void eDVBServicePlay::updateDecoder()
+void eDVBServicePlay::updateDecoder(
bool sendSeekableStateChanged
)
{
int vpid = -1, vpidtype = -1, pcrpid = -1, tpid = -1, achannel = -1, ac3_delay=-1, pcm_delay=-1;
{
int vpid = -1, vpidtype = -1, pcrpid = -1, tpid = -1, achannel = -1, ac3_delay=-1, pcm_delay=-1;
+ bool mustPlay = false;
eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
@@
-2380,17
+2384,17
@@
void eDVBServicePlay::updateDecoder()
Py_DECREF(subs);
}
}
Py_DECREF(subs);
}
}
- m_decoder->play(); /* pids will be set later */
}
if (m_cue)
m_cue->setDecodingDemux(m_decode_demux, m_decoder);
}
if (m_cue)
m_cue->setDecodingDemux(m_decode_demux, m_decoder);
- m
_decoder->play(); /* pids will be set later. */
+ m
ustPlay = true;
}
m_timeshift_changed = 0;
if (m_decoder)
{
}
m_timeshift_changed = 0;
if (m_decoder)
{
+ bool wasSeekable = m_decoder->getVideoProgressive() != -1;
if (m_dvb_service)
{
achannel = m_dvb_service->getCacheEntry(eDVBService::cACHANNEL);
if (m_dvb_service)
{
achannel = m_dvb_service->getCacheEntry(eDVBService::cACHANNEL);
@@
-2449,7
+2453,11
@@
void eDVBServicePlay::updateDecoder()
m_decoder->setRadioPic(radio_pic);
}
m_decoder->setRadioPic(radio_pic);
}
- m_decoder->set();
+ if (mustPlay)
+ m_decoder->play();
+ else
+ m_decoder->set();
+
m_decoder->setAudioChannel(achannel);
/* don't worry about non-existing services, nor pvr services */
m_decoder->setAudioChannel(achannel);
/* don't worry about non-existing services, nor pvr services */
@@
-2461,8
+2469,13
@@
void eDVBServicePlay::updateDecoder()
m_dvb_service->setCacheEntry(eDVBService::cPCRPID, pcrpid);
m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid);
}
m_dvb_service->setCacheEntry(eDVBService::cPCRPID, pcrpid);
m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid);
}
+ if (!sendSeekableStateChanged && (m_decoder->getVideoProgressive() != -1) != wasSeekable)
+ sendSeekableStateChanged = true;
}
m_have_video_pid = (vpid > 0 && vpid < 0x2000);
}
m_have_video_pid = (vpid > 0 && vpid < 0x2000);
+
+ if (sendSeekableStateChanged)
+ m_event((iPlayableService*)this, evSeekableStatusChanged);
}
void eDVBServicePlay::loadCuesheet()
}
void eDVBServicePlay::loadCuesheet()
@@
-2563,7
+2576,7
@@
void eDVBServicePlay::cutlistToCuesheet()
{
if (i == m_cue_entries.end())
{
{
if (i == m_cue_entries.end())
{
- if (!have_any_span)
+ if (!have_any_span
&& !in
)
break;
out = length;
} else {
break;
out = length;
} else {
@@
-2593,6
+2606,7
@@
void eDVBServicePlay::cutlistToCuesheet()
{
have_any_span = 1;
m_cue->addSourceSpan(in, out);
{
have_any_span = 1;
m_cue->addSourceSpan(in, out);
+ in = out = 0;
}
in = length;
}
in = length;