migrate eFilePushThread to new iDateSource read interface, remove no more supported...
authorghost <andreas.monzner@multimedia-labs.de>
Wed, 10 Nov 2010 16:16:39 +0000 (17:16 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Wed, 10 Nov 2010 16:16:39 +0000 (17:16 +0100)
lib/base/filepush.cpp
lib/base/filepush.h

index 0d599f9663ba746ce826c2bf69b37abce1680b9f..af5a8bb68c48e896b2d3039495f52daee378797b 100644 (file)
@@ -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;
index 75df7ab7c63293f7e3fc9169e083dcbb48a44e5b..eb8e7924dc89dcba8481fedaaec8226f7ffb1a16 100644 (file)
@@ -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;