enabled timeredit to show bug
[enigma2.git] / lib / dvb / demux.cpp
index bdd8e67df329f1a09625b32de93302f7abbaa0e3..d5c7cf7399177652430796912aec70a2733bc727 100644 (file)
@@ -59,6 +59,36 @@ RESULT eDVBDemux::getMPEGDecoder(ePtr<iTSMPEGDecoder> &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
@@ -99,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
@@ -125,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
@@ -175,7 +206,8 @@ RESULT eDVBSectionReader::stop()
 
        active=0;
        ::ioctl(fd, DMX_STOP);
-       
+       notifier->stop();
+
        return 0;
 }