aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/demux.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-01-12 21:11:59 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-01-12 21:11:59 +0000
commit967664233fc4ce992405a0e86e0c6cd594dfba57 (patch)
tree4443d9fe6737d81eb78298ee8be9b2d2a4118759 /lib/dvb/demux.cpp
parent50d3596b1c5351f07a7d77bd7d0fcab561884806 (diff)
downloadenigma2-967664233fc4ce992405a0e86e0c6cd594dfba57.tar.gz
enigma2-967664233fc4ce992405a0e86e0c6cd594dfba57.zip
fixes for old api.. not all tested..
Diffstat (limited to 'lib/dvb/demux.cpp')
-rw-r--r--lib/dvb/demux.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp
index 4522706d..286821c3 100644
--- a/lib/dvb/demux.cpp
+++ b/lib/dvb/demux.cpp
@@ -1,10 +1,16 @@
+#include <config.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <unistd.h>
+#if HAVE_DVB_API_VERSION < 3
+#include <ost/dmx.h>
+#else
#include <linux/dvb/dmx.h>
+#endif
+
#include "crc32.h"
#include <lib/base/eerror.h>
@@ -61,7 +67,11 @@ void eDVBSectionReader::data(int)
eDVBSectionReader::eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESULT &res): demux(demux)
{
char filename[128];
+#if HAVE_DVB_API_VERSION < 3
+ sprintf(filename, "/dev/dvb/card%d/demux%d", demux->adapter, demux->demux);
+#else
sprintf(filename, "/dev/dvb/adapter%d/demux%d", demux->adapter, demux->demux);
+#endif
fd = ::open(filename, O_RDWR);
if (fd >= 0)
@@ -92,11 +102,18 @@ RESULT eDVBSectionReader::start(const eDVBSectionFilterMask &mask)
if (fd < 0)
return -ENODEV;
+#if HAVE_DVB_API_VERSION < 3
+ dmxSctFilterParams sct;
+#else
dmx_sct_filter_params sct;
-
+#endif
sct.pid = mask.pid;
sct.timeout = 0;
+#if HAVE_DVB_API_VERSION < 3
+ sct.flags = 0;
+#else
sct.flags = DMX_IMMEDIATE_START;
+#endif
if (mask.flags & eDVBSectionFilterMask::rfCRC)
{
sct.flags |= DMX_CHECK_CRC;
@@ -106,11 +123,25 @@ RESULT eDVBSectionReader::start(const eDVBSectionFilterMask &mask)
memcpy(sct.filter.filter, mask.data, DMX_FILTER_SIZE);
memcpy(sct.filter.mask, mask.mask, DMX_FILTER_SIZE);
+#if HAVE_DVB_API_VERSION >= 3
memcpy(sct.filter.mode, mask.mode, DMX_FILTER_SIZE);
+#endif
res = ::ioctl(fd, DMX_SET_FILTER, &sct);
if (!res)
+ {
+#if HAVE_DVB_API_VERSION < 3
+ res = ::ioctl(fd, DMX_SET_NEGFILTER_MASK, mask.mode);
+ if (!res)
+ {
+ res = ::ioctl(fd, DMX_START, 0);
+ if (!res)
+ active = 1;
+ }
+#else
active = 1;
+#endif
+ }
return res;
}