removed thedoc's colors because of broken network setup
[enigma2.git] / lib / service / servicedvb.cpp
index 955ceb0a9a20f5e7a6b6df72a2e5496b5c95eec3..cb5b4b727ea1255cdc8bf5b4b86d60feda45319d 100644 (file)
@@ -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<iPauseableService> &ptr)
        return -1;
 }
 
+RESULT eDVBServicePlay::seek(ePtr<iSeekableService> &ptr)
+{
+       if (m_is_pvr)
+       {
+               ptr = this;
+               return 0;
+       }
+       
+       ptr = 0;
+       return -1;
+}
+
+RESULT eDVBServicePlay::getLength(pts_t &len)
+{
+       ePtr<iDVBPVRChannel> 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<iDVBPVRChannel> pvr_channel;
+       
+       if (m_service_handler.getPVRChannel(pvr_channel))
+               return -1;
+       
+       return pvr_channel->getCurrentPosition(pos);
+}
+
 RESULT eDVBServicePlay::info(ePtr<iServiceInformation> &ptr)
 {
        ptr = this;