}
eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *service):
- m_reference(ref), m_dvb_service(service), m_is_paused(0)
+ m_reference(ref), m_dvb_service(service), m_have_video_pid(0), m_is_paused(0)
{
m_is_primary = 1;
m_is_pvr = !m_reference.path.empty();
m_first_program_info = 1;
eServiceReferenceDVB &service = (eServiceReferenceDVB&)m_reference;
r = m_service_handler.tune(service, m_is_pvr, m_cue);
-
+
/* inject EIT if there is a stored one */
if (m_is_pvr)
{
RESULT eDVBServicePlay::timeshift(ePtr<iTimeshiftService> &ptr)
{
ptr = 0;
- if (m_timeshift_enabled || !m_is_pvr)
+ if (m_have_video_pid && // HACK !!! FIXMEE !! temporary no timeshift on radio services !!
+ (m_timeshift_enabled || !m_is_pvr))
{
if (!m_timeshift_enabled)
{
ac3_delay = m_dvb_service->getCacheEntry(eDVBService::cAC3DELAY);
pcm_delay = m_dvb_service->getCacheEntry(eDVBService::cPCMDELAY);
}
-/*
- else if (m_reference.path.length()) // workaround for recordings
+ else // subservice or recording
{
- eDebug("playback %s", m_reference.toString().c_str());
-
- ePtr<eDVBResourceManager> res_mgr;
- if (!eDVBResourceManager::getInstance(res_mgr))
+ eServiceReferenceDVB ref;
+ m_service_handler.getServiceReference(ref);
+ eServiceReferenceDVB parent = ref.getParentServiceReference();
+ if (!parent)
+ parent = ref;
+ if (parent)
{
- ePtr<iDVBChannelList> db;
- if (!res_mgr->getChannelList(db))
+ ePtr<eDVBResourceManager> res_mgr;
+ if (!eDVBResourceManager::getInstance(res_mgr))
{
- ePtr<eDVBService> origService;
- eServiceReference tmp = m_reference;
- tmp.path="";
- if (!db->getService((eServiceReferenceDVB&)tmp, origService))
+ ePtr<iDVBChannelList> db;
+ if (!res_mgr->getChannelList(db))
{
- ac3_delay = origService->getCacheEntry(eDVBService::cAC3DELAY);
- pcm_delay = origService->getCacheEntry(eDVBService::cPCMDELAY);
+ ePtr<eDVBService> origService;
+ if (!db->getService(parent, origService))
+ {
+ ac3_delay = origService->getCacheEntry(eDVBService::cAC3DELAY);
+ pcm_delay = origService->getCacheEntry(eDVBService::cPCMDELAY);
+ }
}
}
}
}
-*/
-
m_decoder->setAC3Delay(ac3_delay == -1 ? 0 : ac3_delay);
m_decoder->setPCMDelay(pcm_delay == -1 ? 0 : pcm_delay);
m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid);
}
}
+ m_have_video_pid = (vpid > 0 && vpid < 0x2000);
}
void eDVBServicePlay::loadCuesheet()