aboutsummaryrefslogtreecommitdiff
path: root/lib/service/servicedvb.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-08-17 02:16:32 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-08-17 02:16:32 +0000
commit0af11516cabc973907890f548925a66313c8d18c (patch)
treec31b0f76274fbc23d24f0b0188c54282b96442bc /lib/service/servicedvb.cpp
parent17647e30993cc20d8f94f2de4a0bc78ce6b593cb (diff)
downloadenigma2-0af11516cabc973907890f548925a66313c8d18c.tar.gz
enigma2-0af11516cabc973907890f548925a66313c8d18c.zip
- add iSeekableService, implement it for serviceDvb
Diffstat (limited to 'lib/service/servicedvb.cpp')
-rw-r--r--lib/service/servicedvb.cpp54
1 files changed, 50 insertions, 4 deletions
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 955ceb0a..ac224562 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -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;