aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2010-11-10 17:16:39 +0100
committerghost <andreas.monzner@multimedia-labs.de>2010-11-10 17:16:39 +0100
commitdd43e7a64a07bd5777e40cd46fed4fd9f545eb01 (patch)
treeac5cedeb7b0d06d2aa975312e071a8a0b8e501a7 /lib
parent6fdb2d2094c50a2bc324f4094473c2107d2ea943 (diff)
downloadenigma2-dd43e7a64a07bd5777e40cd46fed4fd9f545eb01.tar.gz
enigma2-dd43e7a64a07bd5777e40cd46fed4fd9f545eb01.zip
migrate eFilePushThread to new iDateSource read interface, remove no more supported seek function
Diffstat (limited to 'lib')
-rw-r--r--lib/base/filepush.cpp46
-rw-r--r--lib/base/filepush.h6
2 files changed, 16 insertions, 36 deletions
diff --git a/lib/base/filepush.cpp b/lib/base/filepush.cpp
index 0d599f96..af5a8bb6 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<iDataSource> 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<iDataSource> source, int fd_dest)
+void eFilePushThread::start(ePtr<iDataSource> &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 75df7ab7..eb8e7924 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<iDataSource> source, int destfd);
+ void start(ePtr<iDataSource> &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<iDataSource> m_raw_source;
+ ePtr<iDataSource> m_source;
eFixedMessagePump<int> m_messagepump;