fix no more working sec with old api
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Mon, 16 Jul 2007 16:17:31 +0000 (16:17 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Mon, 16 Jul 2007 16:17:31 +0000 (16:17 +0000)
fix get video pts for old api

lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/dvb/frontend.cpp

index 7b2284d33a8a5238fa37671af208dae5611ccfc7..c93fe26dd97a845a9249dd797add40dfa828a568 100644 (file)
@@ -305,6 +305,9 @@ eDVBVideo::eDVBVideo(eDVBDemux *demux, int dev)
        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
@@ -509,12 +512,17 @@ int eDVBVideo::setFastForward(int skip)
 
 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;
 }
 
@@ -531,6 +539,10 @@ eDVBVideo::~eDVBVideo()
                ::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)
index 2c47834ad34637093c5af43d6b461b62356c41ec..cd59b3d9734953970f0c640b2713045d45cce8cd 100644 (file)
@@ -40,7 +40,9 @@ DECLARE_REF(eDVBVideo);
 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);
index 04b794d4dd160ff76c9fdc59ec1f8d3b8883e627..1906a8f44386a0b5943f63c48d3dfd31ed8391b9 100644 (file)
@@ -449,21 +449,6 @@ int eDVBFrontend::openFrontend()
                {
                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;
@@ -480,6 +465,25 @@ int eDVBFrontend::openFrontend()
                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);