From: ghost Date: Wed, 10 Nov 2010 16:16:39 +0000 (+0100) Subject: migrate eFilePushThread to new iDateSource read interface, remove no more supported... X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=dd43e7a64a07bd5777e40cd46fed4fd9f545eb01 migrate eFilePushThread to new iDateSource read interface, remove no more supported seek function --- diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp index 0d599f9..af5a8bb 100644 --- a/lib/base/filepush.cpp +++ b/lib/base/filepush.cpp @@ -29,7 +29,7 @@ void eFilePushThread::thread() { setIoPrio(prio_class, prio); - off_t dest_pos = 0, source_pos = 0; + off_t dest_pos = 0; size_t bytes_read = 0; off_t current_span_offset = 0; @@ -46,9 +46,7 @@ void eFilePushThread::thread() sigaction(SIGUSR1, &act, 0); hasStarted(); - - source_pos = m_raw_source->lseek(0, SEEK_CUR); - + /* m_stop must be evaluated after each syscall. */ while (!m_stop) { @@ -137,14 +135,12 @@ void eFilePushThread::thread() if (m_sg && !current_span_remaining) { - m_sg->getNextSourceSpan(source_pos, bytes_read, current_span_offset, current_span_remaining); + m_sg->getNextSourceSpan(m_current_position, bytes_read, current_span_offset, current_span_remaining); ASSERT(!(current_span_remaining % m_blocksize)); - - if (source_pos != current_span_offset) - source_pos = m_raw_source->lseek(current_span_offset, SEEK_SET); + m_current_position = current_span_offset; bytes_read = 0; } - + size_t maxread = sizeof(m_buffer); /* if we have a source span, don't read past the end */ @@ -157,9 +153,9 @@ void eFilePushThread::thread() m_buf_start = 0; m_filter_end = 0; m_buf_end = 0; - + if (maxread) - m_buf_end = m_raw_source->read(m_buffer, maxread); + m_buf_end = m_source->read(m_current_position, m_buffer, maxread); if (m_buf_end < 0) { @@ -177,10 +173,7 @@ void eFilePushThread::thread() /* a read might be mis-aligned in case of a short read. */ int d = m_buf_end % m_blocksize; if (d) - { - m_raw_source->lseek(-d, SEEK_CUR); m_buf_end -= d; - } if (m_buf_end == 0) { @@ -216,18 +209,10 @@ void eFilePushThread::thread() sleep(1); continue; } -#if 0 - eDebug("FILEPUSH: end-of-file! (currently unhandled)"); - if (!m_raw_source->lseek(0, SEEK_SET)) - { - eDebug("(looping)"); - continue; - } -#endif break; } else { - source_pos += m_buf_end; + m_current_position += m_buf_end; bytes_read += m_buf_end; if (m_sg) current_span_remaining -= m_buf_end; @@ -242,10 +227,9 @@ void eFilePushThread::thread() void eFilePushThread::start(int fd, int fd_dest) { eRawFile *f = new eRawFile(); + ePtr source = f; f->setfd(fd); - m_raw_source = f; - m_fd_dest = fd_dest; - resume(); + start(source, fd_dest); } int eFilePushThread::start(const char *file, int fd_dest) @@ -258,10 +242,11 @@ int eFilePushThread::start(const char *file, int fd_dest) return 0; } -void eFilePushThread::start(ePtr source, int fd_dest) +void eFilePushThread::start(ePtr &source, int fd_dest) { - m_raw_source = source; + m_source = source; m_fd_dest = fd_dest; + m_current_position = 0; resume(); } @@ -283,11 +268,6 @@ void eFilePushThread::pause() stop(); } -void eFilePushThread::seek(int whence, off_t where) -{ - m_raw_source->lseek(where, whence); -} - void eFilePushThread::resume() { m_stop = 0; diff --git a/lib/base/filepush.h b/lib/base/filepush.h index 75df7ab..eb8e792 100644 --- a/lib/base/filepush.h +++ b/lib/base/filepush.h @@ -25,10 +25,9 @@ public: void start(int sourcefd, int destfd); int start(const char *filename, int destfd); - void start(ePtr source, int destfd); + void start(ePtr &source, int destfd); void pause(); - void seek(int whence, off_t where); void resume(); /* flushes the internal readbuffer */ @@ -59,8 +58,9 @@ private: int m_send_pvr_commit; int m_stream_mode; int m_blocksize; + off_t m_current_position; - ePtr m_raw_source; + ePtr m_source; eFixedMessagePump m_messagepump;