X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/aa3d1162bef321bd2d0effdafce6eb080660a7ca..d0c2907cd737fe997153839f3c9242e137e5bf3e:/lib/dvb/demux.cpp diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp index f50f4bb2..d5c7cf73 100644 --- a/lib/dvb/demux.cpp +++ b/lib/dvb/demux.cpp @@ -6,7 +6,6 @@ #include #include -#include #if HAVE_DVB_API_VERSION < 3 #include @@ -20,6 +19,7 @@ #include "crc32.h" #include +#include #include #include #include @@ -59,6 +59,36 @@ RESULT eDVBDemux::getMPEGDecoder(ePtr &decoder) return 0; } +RESULT eDVBDemux::getSTC(pts_t &pts) +{ + char filename[128]; +#if HAVE_DVB_API_VERSION < 3 + sprintf(filename, "/dev/dvb/card%d/demux%d", adapter, demux); +#else + sprintf(filename, "/dev/dvb/adapter%d/demux%d", adapter, demux); +#endif + int fd = ::open(filename, O_RDWR); + + if (fd < 0) + return -ENODEV; + + struct dmx_stc stc; + stc.num = 0; + stc.base = 1; + + if (ioctl(fd, DMX_GET_STC, &stc) < 0) + { + ::close(fd); + return -1; + } + + pts = stc.stc; + + ::close(fd); + return 0; +} + + void eDVBSectionReader::data(int) { __u8 data[4096]; // max. section size @@ -74,7 +104,10 @@ void eDVBSectionReader::data(int) // this check should never happen unless the driver is crappy! unsigned int c; if ((c = crc32((unsigned)-1, data, r))) - eFatal("crc32 failed! is %x\n", c); + { + eDebug("crc32 failed! is %x\n", c); + return; + } } if (active) read(data); @@ -96,7 +129,7 @@ eDVBSectionReader::eDVBSectionReader(eDVBDemux *demux, eMainloop *context, RESUL if (fd >= 0) { - notifier=new eSocketNotifier(context, fd, eSocketNotifier::Read); + notifier=new eSocketNotifier(context, fd, eSocketNotifier::Read, false); CONNECT(notifier->activated, eDVBSectionReader::data); res = 0; } else @@ -122,6 +155,7 @@ RESULT eDVBSectionReader::start(const eDVBSectionFilterMask &mask) if (fd < 0) return -ENODEV; + notifier->start(); #if HAVE_DVB_API_VERSION < 3 dmxSctFilterParams sct; #else @@ -172,7 +206,8 @@ RESULT eDVBSectionReader::stop() active=0; ::ioctl(fd, DMX_STOP); - + notifier->stop(); + return 0; } @@ -184,98 +219,12 @@ RESULT eDVBSectionReader::connectRead(const Slot1 &r, ePtrm_dvr_busy = 1; }