X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/2bc720f79ea42168572ba458fec5b2cffb175a04..1479a77bb6c7c2c4c39514129abb3e73734db783:/lib/service/servicedvb.cpp diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 581f64c5..bae45aae 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -630,7 +630,7 @@ RESULT eServiceFactoryDVB::lookupService(ePtr &service, const eServ } 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(); @@ -751,7 +751,7 @@ RESULT eDVBServicePlay::start() 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) { @@ -1028,7 +1028,8 @@ RESULT eDVBServicePlay::subServices(ePtr &ptr) RESULT eDVBServicePlay::timeshift(ePtr &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) { @@ -1689,30 +1690,31 @@ void eDVBServicePlay::updateDecoder() 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 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 db; - if (!res_mgr->getChannelList(db)) + ePtr res_mgr; + if (!eDVBResourceManager::getInstance(res_mgr)) { - ePtr origService; - eServiceReference tmp = m_reference; - tmp.path=""; - if (!db->getService((eServiceReferenceDVB&)tmp, origService)) + ePtr db; + if (!res_mgr->getChannelList(db)) { - ac3_delay = origService->getCacheEntry(eDVBService::cAC3DELAY); - pcm_delay = origService->getCacheEntry(eDVBService::cPCMDELAY); + ePtr 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); @@ -1768,6 +1770,7 @@ void eDVBServicePlay::updateDecoder() m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid); } } + m_have_video_pid = (vpid > 0 && vpid < 0x2000); } void eDVBServicePlay::loadCuesheet()