diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2005-07-28 00:04:32 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2005-07-28 00:04:32 +0000 |
| commit | cb205396ae920ef813764de92bf5b686bb9d80f1 (patch) | |
| tree | 42035b815af506c3755d6d7c2ae0e43bedb0fbc1 /lib/dvb | |
| parent | 40253d1a081381a643b8841aeb2914f75211ddb9 (diff) | |
| download | enigma2-cb205396ae920ef813764de92bf5b686bb9d80f1.tar.gz enigma2-cb205396ae920ef813764de92bf5b686bb9d80f1.zip | |
- factor out the filepusher from ts recorder
Diffstat (limited to 'lib/dvb')
| -rw-r--r-- | lib/dvb/demux.cpp | 90 | ||||
| -rw-r--r-- | lib/dvb/demux.h | 4 |
2 files changed, 4 insertions, 90 deletions
diff --git a/lib/dvb/demux.cpp b/lib/dvb/demux.cpp index f50f4bb2..c3383a7e 100644 --- a/lib/dvb/demux.cpp +++ b/lib/dvb/demux.cpp @@ -6,7 +6,6 @@ #include <unistd.h> #include <signal.h> -#include <lib/base/thread.h> #if HAVE_DVB_API_VERSION < 3 #include <ost/dmx.h> @@ -20,6 +19,7 @@ #include "crc32.h" #include <lib/base/eerror.h> +#include <lib/base/filepush.h> #include <lib/dvb/idvb.h> #include <lib/dvb/demux.h> #include <lib/dvb/esection.h> @@ -184,98 +184,12 @@ RESULT eDVBSectionReader::connectRead(const Slot1<void,const __u8*> &r, ePtr<eCo DEFINE_REF(eDVBTSRecorder); -class eDVBTSRecorderThread: public eThread -{ -public: - eDVBTSRecorderThread(); - void thread(); - void stop(); - void start(int sourcefd, int destfd); -private: - int m_stop; - unsigned char m_buffer[65536]; - int m_buf_start, m_buf_end; - int m_fd_source, m_fd_dest; -}; - -eDVBTSRecorderThread::eDVBTSRecorderThread() -{ - m_stop = 0; - m_buf_start = m_buf_end = 0; -} - -static void signal_handler(int x) -{ -} - -void eDVBTSRecorderThread::thread() -{ - eDebug("RECORDING THREAD START"); - // this is race. FIXME. - - /* we set the signal to not restart syscalls, so we can detect our signal. */ - struct sigaction act; - act.sa_handler = signal_handler; // no, SIG_IGN doesn't do it :/ - act.sa_flags = 0; - sigaction(SIGUSR1, &act, 0); - - /* m_stop must be evaluated after each syscall. */ - while (!m_stop) - { - /* first try flushing the bufptr */ - if (m_buf_start != m_buf_end) - { - // TODO: take care of boundaries. - int w = write(m_fd_dest, m_buffer + m_buf_start, m_buf_end - m_buf_start); - if (w <= 0) - { - if (errno == -EINTR) - continue; - eDebug("eDVBTSRecorder *write error* - not yet handled"); - // ... we would stop the thread - } - printf("TSRECORD: wrote %d bytes\n", w); - m_buf_start += w; - continue; - } - - /* now fill our buffer. */ - m_buf_start = 0; - m_buf_end = read(m_fd_source, m_buffer, sizeof(m_buffer)); - if (m_buf_end < 0) - { - m_buf_end = 0; - if (errno == EINTR) - continue; - eDebug("eDVBTSRecorder *read error* - not yet handled"); - } - printf("TSRECORD: read %d bytes\n", m_buf_end); - } - - eDebug("RECORDING THREAD STOP"); -} - -void eDVBTSRecorderThread::start(int fd_source, int fd_dest) -{ - m_fd_source = fd_source; - m_fd_dest = fd_dest; - m_stop = 0; - run(); -} - -void eDVBTSRecorderThread::stop() -{ - m_stop = 1; - sendSignal(SIGUSR1); - kill(); -} - eDVBTSRecorder::eDVBTSRecorder(eDVBDemux *demux): m_demux(demux) { m_running = 0; m_format = 0; m_target_fd = -1; - m_thread = new eDVBTSRecorderThread(); + m_thread = new eFilePushThread(); m_demux->m_dvr_busy = 1; } diff --git a/lib/dvb/demux.h b/lib/dvb/demux.h index b07239be..fdec4177 100644 --- a/lib/dvb/demux.h +++ b/lib/dvb/demux.h @@ -43,7 +43,7 @@ public: RESULT connectRead(const Slot1<void,const __u8*> &read, ePtr<eConnection> &conn); }; -class eDVBTSRecorderThread; +class eFilePushThread; class eDVBTSRecorder: public iDVBTSRecorder, public Object { @@ -68,7 +68,7 @@ private: RESULT startPID(int pid); void stopPID(int pid); - eDVBTSRecorderThread *m_thread; + eFilePushThread *m_thread; std::map<int,int> m_pids; Signal1<void,int> m_event; |
