X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/fe813cde98c0c550137b47dd7a75ec2d4d9e6f34..14a8e1d85dd79328945b1812e639e9693cc4cbb1:/lib/service/servicedvb.cpp diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 955ceb0a..cb5b4b72 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -305,7 +305,7 @@ void eDVBServicePlay::serviceEvent(int event) { m_decoder->setVideoPID(vpid); m_decoder->setAudioPID(apid, 0); - if (m_is_pvr) + if (!m_is_pvr) m_decoder->setSyncPCR(pcrpid); else m_decoder->setSyncPCR(-1); @@ -313,9 +313,14 @@ void eDVBServicePlay::serviceEvent(int event) // how we can do this better? // update cache pid when the user changed the audio track or video track // TODO handling of difference audio types.. default audio types.. - m_dvb_service->setCachePID(eDVBService::cVPID, vpid); - m_dvb_service->setCachePID(eDVBService::cAPID, apid); - m_dvb_service->setCachePID(eDVBService::cPCRPID, pcrpid); + + /* don't worry about non-existing services, nor pvr services */ + if (m_dvb_service && !m_is_pvr) + { + m_dvb_service->setCachePID(eDVBService::cVPID, vpid); + m_dvb_service->setCachePID(eDVBService::cAPID, apid); + m_dvb_service->setCachePID(eDVBService::cPCRPID, pcrpid); + } } break; @@ -325,9 +330,10 @@ void eDVBServicePlay::serviceEvent(int event) RESULT eDVBServicePlay::start() { + int r; eDebug("starting DVB service"); + r = m_service_handler.tune((eServiceReferenceDVB&)m_reference); m_event(this, evStart); - return m_service_handler.tune((eServiceReferenceDVB&)m_reference); } RESULT eDVBServicePlay::stop() @@ -349,6 +355,46 @@ RESULT eDVBServicePlay::pause(ePtr &ptr) return -1; } +RESULT eDVBServicePlay::seek(ePtr &ptr) +{ + if (m_is_pvr) + { + ptr = this; + return 0; + } + + ptr = 0; + return -1; +} + +RESULT eDVBServicePlay::getLength(pts_t &len) +{ + ePtr pvr_channel; + + if (m_service_handler.getPVRChannel(pvr_channel)) + { + eDebug("getPVRChannel failed!"); + return -1; + } + + return pvr_channel->getLength(len); +} + +RESULT eDVBServicePlay::seekTo(pts_t to) +{ + return -1; +} + +RESULT eDVBServicePlay::getPlayPosition(pts_t &pos) +{ + ePtr pvr_channel; + + if (m_service_handler.getPVRChannel(pvr_channel)) + return -1; + + return pvr_channel->getCurrentPosition(pos); +} + RESULT eDVBServicePlay::info(ePtr &ptr) { ptr = this;