aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2010-11-10 17:15:15 +0100
committerghost <andreas.monzner@multimedia-labs.de>2010-11-10 17:15:15 +0100
commit6fdb2d2094c50a2bc324f4094473c2107d2ea943 (patch)
treed20010fa6cef2a622af5a2442ba660591f75afcc /lib/dvb
parent96844b5bd92b331390597061efe140172979c34d (diff)
downloadenigma2-6fdb2d2094c50a2bc324f4094473c2107d2ea943.tar.gz
enigma2-6fdb2d2094c50a2bc324f4094473c2107d2ea943.zip
add new playSource / stopSource interface to iDVBChannel and eDVBChannel
Diffstat (limited to 'lib/dvb')
-rw-r--r--lib/dvb/dvb.cpp17
-rw-r--r--lib/dvb/dvb.h7
-rw-r--r--lib/dvb/idvb.h5
3 files changed, 24 insertions, 5 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp
index 1807b87e..21ebecf1 100644
--- a/lib/dvb/dvb.cpp
+++ b/lib/dvb/dvb.cpp
@@ -1761,14 +1761,20 @@ RESULT eDVBChannel::playFile(const char *file)
}
eRawFile *f = new eRawFile();
+ ePtr<iDataSource> source = f;
+
if (f->open(file) < 0)
{
eDebug("can't open PVR file %s (%m)", file);
return -ENOENT;
}
- ePtr<iDataSource> source = f;
- m_tstools.setSource(source, file);
+ return playSource(source, file);
+}
+
+RESULT eDVBChannel::playSource(ePtr<iDataSource> &source, const char *priv)
+{
+ m_tstools.setSource(source, priv);
/* DON'T EVEN THINK ABOUT FIXING THIS. FIX THE ATI SOURCES FIRST,
THEN DO A REAL FIX HERE! */
@@ -1804,7 +1810,7 @@ RESULT eDVBChannel::playFile(const char *file)
return 0;
}
-void eDVBChannel::stopFile()
+void eDVBChannel::stopSource()
{
if (m_pvr_thread)
{
@@ -1816,6 +1822,11 @@ void eDVBChannel::stopFile()
::close(m_pvr_fd_dst);
}
+void eDVBChannel::stopFile()
+{
+ stopSource();
+}
+
void eDVBChannel::setCueSheet(eCueSheet *cuesheet)
{
m_conn_cueSheetEvent = 0;
diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h
index fb925807..92771604 100644
--- a/lib/dvb/dvb.h
+++ b/lib/dvb/dvb.h
@@ -259,7 +259,10 @@ public:
/* iDVBPVRChannel */
RESULT playFile(const char *file);
void stopFile();
-
+
+ RESULT playSource(ePtr<iDataSource>& source, const char *priv=NULL);
+ void stopSource();
+
void setCueSheet(eCueSheet *cuesheet);
RESULT getLength(pts_t &len);
@@ -301,7 +304,7 @@ private:
std::list<std::pair<off_t, off_t> > m_source_span;
void getNextSourceSpan(off_t current_offset, size_t bytes_read, off_t &start, size_t &size);
void flushPVR(iDVBDemux *decoding_demux=0);
-
+
eSingleLock m_cuesheet_lock;
friend class eUsePtr<eDVBChannel>;
diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h
index f1217a6a..3996b6b6 100644
--- a/lib/dvb/idvb.h
+++ b/lib/dvb/idvb.h
@@ -15,6 +15,7 @@
#include <lib/base/object.h>
#include <lib/base/ebase.h>
#include <lib/base/elock.h>
+#include <lib/base/idatasource.h>
#include <lib/service/service.h>
#include <libsig_comp.h>
#include <connection.h>
@@ -605,6 +606,10 @@ public:
virtual RESULT playFile(const char *file) = 0;
virtual void stopFile() = 0;
+ /* new interface */
+ virtual RESULT playSource(ePtr<iDataSource> &source, const char *priv=NULL) = 0;
+ virtual void stopSource() = 0;
+
virtual void setCueSheet(eCueSheet *cuesheet) = 0;
virtual RESULT getLength(pts_t &pts) = 0;