add pes parser
[enigma2.git] / lib / dvb / demux.cpp
index c8e711731323c63f1c524b28f5e064b1601d243e..f277468d248b89d0e700a29c17693d81c6e0a011 100644 (file)
@@ -25,7 +25,7 @@
 #else
 #include <linux/dvb/dmx.h>
 
-// #define HAVE_ADD_PID
+#define HAVE_ADD_PID
 
 #ifdef HAVE_ADD_PID
 #define DMX_ADD_PID              _IO('o', 51)
@@ -379,7 +379,7 @@ RESULT eDVBTSRecorder::start()
 
        dmx_pes_filter_params flt;
        flt.pes_type = (dmx_pes_type_t)DMX_TAP_TS;
-       flt.pid     = 0x1234; /* FIXME */
+       flt.pid     = (__u16)-1;
        flt.input   = DMX_IN_FRONTEND;
        flt.output  = DMX_OUT_TAP;
        flt.flags   = 0;
@@ -462,6 +462,7 @@ RESULT eDVBTSRecorder::stop()
        m_thread->stop();
        
        close(m_source_fd);
+       m_source_fd = -1;
        
        if (m_target_filename != "")
                m_thread->saveTimingInformation(m_target_filename + ".ap");
@@ -510,10 +511,10 @@ RESULT eDVBTSRecorder::startPID(int pid)
        }
        m_pids[pid] = fd;
 #else
-       eDebug("add pid: %08x", pid);
        if (::ioctl(m_source_fd, DMX_ADD_PID, pid))
                perror("DMX_ADD_PID");
-       eDebug("ok");
+       else
+               m_pids[pid] = 1;
 #endif
        return 0;
 }
@@ -523,9 +524,12 @@ void eDVBTSRecorder::stopPID(int pid)
 #ifndef HAVE_ADD_PID
        if (m_pids[pid] != -1)
                ::close(m_pids[pid]);
-       m_pids[pid] = -1;
 #else
-       if (::ioctl(m_source_fd, DMX_REMOVE_PID, pid))
-               perror("DMX_REMOVE_PID");
+       if (m_pids[pid] != -1)
+       {
+               if (::ioctl(m_source_fd, DMX_REMOVE_PID, pid))
+                       perror("DMX_REMOVE_PID");
+       }
 #endif
+       m_pids[pid] = -1;
 }