{
#if HAVE_DVB_API_VERSION >= 3
int fd = openDemux();
-
int n = DMX_SOURCE_FRONT0 + fenum;
int res = ::ioctl(fd, DMX_SET_SOURCE, &n);
if (res)
eDebug("DMX_SET_SOURCE failed! - %m");
+ else
+ source = fenum;
::close(fd);
return res;
#endif
int fd = openDemux();
int n = DMX_SOURCE_DVR0 + pvrnum;
int res = ::ioctl(fd, DMX_SET_SOURCE, &n);
+ source = -1;
::close(fd);
return res;
#endif
if (ioctl(fd, DMX_GET_STC, &stc) < 0)
{
+ eDebug("DMX_GET_STC failed!");
::close(fd);
return -1;
}
pts = stc.stc;
+ eDebug("DMX_GET_STC - %lld", pts);
+
::close(fd);
return 0;
}
if (fd >= 0)
{
- notifier=new eSocketNotifier(context, fd, eSocketNotifier::Read, false);
+ notifier=eSocketNotifier::create(context, fd, eSocketNotifier::Read, false);
CONNECT(notifier->activated, eDVBSectionReader::data);
res = 0;
} else
eDVBSectionReader::~eDVBSectionReader()
{
- if (notifier)
- delete notifier;
if (fd >= 0)
::close(fd);
}
return;
if(r < 0)
{
- if (errno == EAGAIN) /* ok */
+ if (errno == EAGAIN || errno == EINTR) /* ok */
return;
eWarning("ERROR reading PES (fd=%d) - %m", m_fd);
return;
{
::ioctl(m_fd, DMX_SET_BUFFER_SIZE, 64*1024);
::fcntl(m_fd, F_SETFL, O_NONBLOCK);
- m_notifier = new eSocketNotifier(context, m_fd, eSocketNotifier::Read, false);
+ m_notifier = eSocketNotifier::create(context, m_fd, eSocketNotifier::Read, false);
CONNECT(m_notifier->activated, eDVBPESReader::data);
res = 0;
} else
eDVBPESReader::~eDVBPESReader()
{
- if (m_notifier)
- delete m_notifier;
if (m_fd >= 0)
::close(m_fd);
}
void saveTimingInformation(const std::string &filename);
protected:
- void filterRecordData(const unsigned char *data, int len);
+ int filterRecordData(const unsigned char *data, int len, size_t ¤t_span_remaining);
private:
eMPEGStreamParserTS m_ts_parser;
eMPEGStreamInformation m_stream_info;
m_stream_info.save(filename.c_str());
}
-void eDVBRecordFileThread::filterRecordData(const unsigned char *data, int len)
+int eDVBRecordFileThread::filterRecordData(const unsigned char *data, int len, size_t ¤t_span_remaining)
{
m_ts_parser.parseData(m_current_offset, data, len);
m_current_offset += len;
+
+ return len;
}
DEFINE_REF(eDVBTSRecorder);
}
m_pids[pid] = fd;
#else
- if (::ioctl(m_source_fd, DMX_ADD_PID, pid))
- perror("DMX_ADD_PID");
- else
- m_pids[pid] = 1;
+ while(true) {
+ if (::ioctl(m_source_fd, DMX_ADD_PID, pid) < 0) {
+ perror("DMX_ADD_PID");
+ if (errno == EAGAIN || errno == EINTR) {
+ eDebug("retry!");
+ continue;
+ }
+ } else
+ m_pids[pid] = 1;
+ break;
+ }
#endif
return 0;
}
#else
if (m_pids[pid] != -1)
{
- if (::ioctl(m_source_fd, DMX_REMOVE_PID, pid))
- perror("DMX_REMOVE_PID");
+ while(true) {
+ if (::ioctl(m_source_fd, DMX_REMOVE_PID, pid) < 0) {
+ perror("DMX_REMOVE_PID");
+ if (errno == EAGAIN || errno == EINTR) {
+ eDebug("retry!");
+ continue;
+ }
+ }
+ break;
+ }
}
#endif
m_pids[pid] = -1;