diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2006-01-18 15:46:35 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2006-01-18 15:46:35 +0000 |
| commit | 4a594e382e063bc9f313683d2bd6c679cbad0e9a (patch) | |
| tree | a2dbf40d5de7c5c71d546822483c41110992840c /lib/base | |
| parent | b09455febeca3d10b9c55ee8720d0831a52e0d69 (diff) | |
| download | enigma2-4a594e382e063bc9f313683d2bd6c679cbad0e9a.tar.gz enigma2-4a594e382e063bc9f313683d2bd6c679cbad0e9a.zip | |
experimental PVR commit support
Diffstat (limited to 'lib/base')
| -rw-r--r-- | lib/base/filepush.cpp | 24 | ||||
| -rw-r--r-- | lib/base/filepush.h | 2 |
2 files changed, 25 insertions, 1 deletions
diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index 7ab8c0d3..39319a24 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -3,11 +3,15 @@ #include <lib/base/eerror.h> #include <errno.h> #include <fcntl.h> +#include <sys/ioctl.h> + +#define PVR_COMMIT 1 eFilePushThread::eFilePushThread(): m_messagepump(eApp, 0) { m_stop = 0; flush(); + enablePVRCommit(0); CONNECT(m_messagepump.recv_msg, eFilePushThread::recvEvent); } @@ -18,6 +22,8 @@ static void signal_handler(int x) void eFilePushThread::thread() { off_t dest_pos = 0; + + int already_empty = 0; eDebug("FILEPUSH THREAD START"); // this is a race. FIXME. @@ -66,6 +72,17 @@ void eFilePushThread::thread() } if (m_buf_end == 0) { + /* on EOF, try COMMITting once. */ + if (m_send_pvr_commit && !already_empty) + { + eDebug("sending PVR commit"); + already_empty = 1; + if (::ioctl(m_fd_dest, PVR_COMMIT) == EINTR) + continue; + eDebug("commit done"); + /* well check again */ + continue; + } sendEvent(evtEOF); #if 0 @@ -77,7 +94,8 @@ void eFilePushThread::thread() } #endif break; - } + } else + already_empty = 0; // printf("FILEPUSH: read %d bytes\n", m_buf_end); } @@ -119,6 +137,10 @@ void eFilePushThread::flush() m_buf_start = m_buf_end = 0; } +void eFilePushThread::enablePVRCommit(int s) +{ + m_send_pvr_commit = s; +} void eFilePushThread::sendEvent(int evt) { diff --git a/lib/base/filepush.h b/lib/base/filepush.h index 7eb79974..f2bd98be 100644 --- a/lib/base/filepush.h +++ b/lib/base/filepush.h @@ -20,6 +20,7 @@ public: /* flushes the internal readbuffer */ void flush(); + void enablePVRCommit(int); enum { evtEOF, evtReadError, evtWriteError }; Signal1<void,int> m_event; @@ -29,6 +30,7 @@ private: unsigned char m_buffer[65536]; int m_buf_start, m_buf_end; int m_fd_source, m_fd_dest; + int m_send_pvr_commit; eFixedMessagePump<int> m_messagepump; |
