char filename[128];
#if HAVE_DVB_API_VERSION < 3
sprintf(filename, "/dev/dvb/card%d/video%d", demux->adapter, dev);
+ m_fd_video = ::open("/dev/video", O_RDWR);
+ if (m_fd_video < 0)
+ eWarning("/dev/video: %m");
#else
sprintf(filename, "/dev/dvb/adapter%d/video%d", demux->adapter, dev);
#endif
int eDVBVideo::getPTS(pts_t &now)
{
- eDebugNoNewLine("VIDEO_GET_PTS - ");
+#if HAVE_DVB_API_VERSION < 3
+ #define VIDEO_GET_PTS_OLD _IOR('o', 1, unsigned int*)
+ unsigned int pts;
+ int ret = ::ioctl(m_fd_video, VIDEO_GET_PTS_OLD, &pts);
+ now = pts;
+ now *= 2;
+#else
int ret = ::ioctl(m_fd, VIDEO_GET_PTS, &now);
+#endif
if (ret < 0)
- eDebug("failed(%m)");
- else
- eDebug("ok");
+ eDebug("VIDEO_GET_PTS failed(%m)");
return ret;
}
::close(m_fd);
if (m_fd_demux >= 0)
::close(m_fd_demux);
+#if HAVE_DVB_API_VERSION < 3
+ if (m_fd_video >= 0)
+ ::close(m_fd_video);
+#endif
}
void eDVBVideo::video_event(int)
private:
ePtr<eDVBDemux> m_demux;
int m_fd, m_fd_demux, m_dev;
-
+#if HAVE_DVB_API_VERSION < 3
+ m_fd_video;
+#endif
int m_is_slow_motion, m_is_fast_forward, m_is_freezed;
eSocketNotifier *m_sn;
void video_event(int what);
{
case FE_QPSK:
m_type = iDVBFrontend::feSatellite;
-#if HAVE_DVB_API_VERSION < 3
- if (m_secfd < 0)
- {
- m_secfd = ::open(m_sec_filename, O_RDWR);
- if (m_secfd < 0)
- {
- eWarning("failed! (%s) %m", m_sec_filename);
- ::close(m_fd);
- m_fd=-1;
- return -1;
- }
- }
- else
- eWarning("sec %d already opened", m_dvbid);
-#endif
break;
case FE_QAM:
m_type = iDVBFrontend::feCable;
eDebug("detected %s frontend", "satellite\0cable\0 terrestrial"+fe_info.type*10);
}
+#if HAVE_DVB_API_VERSION < 3
+ if (m_type == iDVBFrontend::feSatellite)
+ {
+ if (m_secfd < 0)
+ {
+ m_secfd = ::open(m_sec_filename, O_RDWR);
+ if (m_secfd < 0)
+ {
+ eWarning("failed! (%s) %m", m_sec_filename);
+ ::close(m_fd);
+ m_fd=-1;
+ return -1;
+ }
+ }
+ else
+ eWarning("sec %d already opened", m_dvbid);
+ }
+#endif
+
setTone(iDVBFrontend::toneOff);
setVoltage(iDVBFrontend::voltageOff);