diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2006-03-03 03:13:13 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2006-03-03 03:13:13 +0000 |
| commit | 8ef240801bf66e543cdea9df3b32fc09cebcc7e5 (patch) | |
| tree | 5518ec66c8b24014faa47659591f0d47f8816155 /lib/dvb | |
| parent | 13e74ce7d8fcccc12bed3ce65c4f35987f206799 (diff) | |
| download | enigma2-8ef240801bf66e543cdea9df3b32fc09cebcc7e5.tar.gz enigma2-8ef240801bf66e543cdea9df3b32fc09cebcc7e5.zip | |
enable playback of multifile (split) movies
Diffstat (limited to 'lib/dvb')
| -rw-r--r-- | lib/dvb/dvb.cpp | 17 | ||||
| -rw-r--r-- | lib/dvb/dvb.h | 2 | ||||
| -rw-r--r-- | lib/dvb/tstools.cpp | 22 | ||||
| -rw-r--r-- | lib/dvb/tstools.h | 5 |
4 files changed, 21 insertions, 25 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 3bceebb0..f8f95276 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1008,14 +1008,6 @@ RESULT eDVBChannel::playFile(const char *file) return -ENODEV; } - m_pvr_fd_src = open(file, O_RDONLY|O_LARGEFILE); - if (m_pvr_fd_src < 0) - { - eDebug("can't open PVR m_pvr_fd_src file %s (%m)", file); - close(m_pvr_fd_dst); - return -ENOENT; - } - m_state = state_ok; m_stateChanged(this); @@ -1023,7 +1015,13 @@ RESULT eDVBChannel::playFile(const char *file) m_pvr_thread->enablePVRCommit(1); m_pvr_thread->setScatterGather(this); - m_pvr_thread->start(m_pvr_fd_src, m_pvr_fd_dst); + if (m_pvr_thread->start(file, m_pvr_fd_dst)) + { + delete m_pvr_thread; + m_pvr_thread = 0; + eDebug("can't open PVR file %s (%m)", file); + return -ENOENT; + } CONNECT(m_pvr_thread->m_event, eDVBChannel::pvrEvent); return 0; @@ -1034,7 +1032,6 @@ void eDVBChannel::stopFile() if (m_pvr_thread) { m_pvr_thread->stop(); - ::close(m_pvr_fd_src); ::close(m_pvr_fd_dst); delete m_pvr_thread; m_pvr_thread = 0; diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h index 8b0a3595..6209f281 100644 --- a/lib/dvb/dvb.h +++ b/lib/dvb/dvb.h @@ -250,7 +250,7 @@ private: eFilePushThread *m_pvr_thread; void pvrEvent(int event); - int m_pvr_fd_src, m_pvr_fd_dst; + int m_pvr_fd_dst; eDVBTSTools m_tstools; ePtr<eCueSheet> m_cue; diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp index b6792c65..5c99ea60 100644 --- a/lib/dvb/tstools.cpp +++ b/lib/dvb/tstools.cpp @@ -7,7 +7,6 @@ eDVBTSTools::eDVBTSTools() { - m_fd = -1; m_pid = -1; m_maxrange = 256*1024; @@ -36,16 +35,14 @@ int eDVBTSTools::openFile(const char *filename) m_use_streaminfo = 0; } - m_fd = ::open(filename, O_RDONLY); - if (m_fd < 0) + if (m_file.open(filename) < 0) return -1; return 0; } void eDVBTSTools::closeFile() { - if (m_fd >= 0) - ::close(m_fd); + m_file.close(); } void eDVBTSTools::setSyncPID(int pid) @@ -64,13 +61,12 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed) if (m_use_streaminfo) return m_streaminfo.getPTS(offset, pts); - if (m_fd < 0) + if (!m_file.valid() < 0) return -1; offset -= offset % 188; - // TODO: multiple files! - if (lseek(m_fd, offset, SEEK_SET) < 0) + if (m_file.lseek(offset, SEEK_SET) < 0) return -1; int left = m_maxrange; @@ -78,7 +74,7 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed) while (left >= 188) { unsigned char block[188]; - if (read(m_fd, block, 188) != 188) + if (m_file.read(block, 188) != 188) { eDebug("read error"); break; @@ -95,7 +91,7 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts, int fixed) break; ++i; } - offset = lseek(m_fd, i - 188, SEEK_CUR); + offset = m_file.lseek(i - 188, SEEK_CUR); continue; } @@ -204,7 +200,7 @@ int eDVBTSTools::getNextAccessPoint(pts_t &ts, const pts_t &start, int direction void eDVBTSTools::calcBegin() { - if (m_fd < 0) + if (!m_file.valid()) return; if (!m_begin_valid) @@ -217,10 +213,10 @@ void eDVBTSTools::calcBegin() void eDVBTSTools::calcEnd() { - if (m_fd < 0) + if (!m_file.valid()) return; - off_t end = lseek(m_fd, 0, SEEK_END); + off_t end = m_file.lseek(0, SEEK_END); if (abs(end - m_offset_end) > 1*1024*1024) { diff --git a/lib/dvb/tstools.h b/lib/dvb/tstools.h index 76128071..b6a275dc 100644 --- a/lib/dvb/tstools.h +++ b/lib/dvb/tstools.h @@ -3,6 +3,7 @@ #include <sys/types.h> #include <lib/dvb/pvrparse.h> +#include <lib/base/rawfile.h> /* * Note: we're interested in PTS values, not STC values. @@ -51,9 +52,11 @@ public: int calcBitrate(); /* in bits/sec */ private: - int m_fd, m_pid; + int m_pid; int m_maxrange; + eRawFile m_file; + int m_begin_valid, m_end_valid; pts_t m_pts_begin, m_pts_end; off_t m_offset_begin, m_offset_end; |
