X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/8d0841a3c4d57ec102acc2a8ac09123b7ebdee27..1479a77bb6c7c2c4c39514129abb3e73734db783:/lib/service/servicedvb.cpp diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 8f58cdee..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) { @@ -1290,7 +1291,7 @@ int eDVBServicePlay::getCurrentChannel() RESULT eDVBServicePlay::selectChannel(int i) { - if (i < LEFT || i > RIGHT) + if (i < LEFT || i > RIGHT || i == STEREO) i = -1; // Stereo if (m_dvb_service) m_dvb_service->setCacheEntry(eDVBService::cACHANNEL, i); @@ -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); @@ -1734,6 +1736,15 @@ void eDVBServicePlay::updateDecoder() m_decoder->start(); + if (vpid > 0 && vpid < 0x2000) + ; + else + { + std::string radio_pic; + if (!ePythonConfigQuery::getConfigValue("config.misc.radiopic", radio_pic)) + m_decoder->setRadioPic(radio_pic); + } + m_decoder->setAudioChannel(achannel); // how we can do this better? @@ -1759,6 +1770,7 @@ void eDVBServicePlay::updateDecoder() m_dvb_service->setCacheEntry(eDVBService::cTPID, tpid); } } + m_have_video_pid = (vpid > 0 && vpid < 0x2000); } void eDVBServicePlay::loadCuesheet() @@ -2004,7 +2016,7 @@ int eDVBServicePlay::getPCMDelay() void eDVBServicePlay::setAC3Delay(int delay) { if (m_dvb_service) - m_dvb_service->setCacheEntry(eDVBService::cAC3DELAY, delay); + m_dvb_service->setCacheEntry(eDVBService::cAC3DELAY, delay ? delay : -1); if (m_decoder) m_decoder->setAC3Delay(delay); } @@ -2012,7 +2024,7 @@ void eDVBServicePlay::setAC3Delay(int delay) void eDVBServicePlay::setPCMDelay(int delay) { if (m_dvb_service) - m_dvb_service->setCacheEntry(eDVBService::cPCMDELAY, delay); + m_dvb_service->setCacheEntry(eDVBService::cPCMDELAY, delay ? delay : -1); if (m_decoder) m_decoder->setPCMDelay(delay); }