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
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
if (fd < 0)
return -ENODEV;
+ notifier->start();
#if HAVE_DVB_API_VERSION < 3
dmxSctFilterParams sct;
#else
active=0;
::ioctl(fd, DMX_STOP);
-
+ notifier->stop();
+
return 0;
}