X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fdvb.cpp;h=a8dfb193e9f30a9a2a989e62f0efe5ab274a3cad;hp=6b0270883ff97f37079db042302cee8649cb0464;hb=f1924b0eec8a16f8bc3b4d09f95f8e90dad0d7cb;hpb=35cc93a57db072be9ca6cf8737bbb120ab215059 diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 6b02708..a8dfb19 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -1124,6 +1124,7 @@ eDVBChannel::eDVBChannel(eDVBResourceManager *mgr, eDVBAllocatedFrontend *fronte m_frontend = frontend; m_pvr_thread = 0; + m_pvr_fd_dst = -1; m_skipmode_n = m_skipmode_m = m_skipmode_frames = 0; @@ -1461,12 +1462,7 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off continue; } - size_t iframe_len; - /* try to align to iframe */ - int direction = pts < 0 ? -1 : 1; - m_tstools.findFrame(offset, iframe_len, direction); - - eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx (skipped additional %d frames due to iframe re-align)", relative, pts, offset, direction); + eDebug("ok, resolved skip (rel: %d, diff %lld), now at %08llx", relative, pts, offset); current_offset = align(offset, blocksize); /* in case tstools return non-aligned offset */ } @@ -1750,16 +1746,19 @@ RESULT eDVBChannel::playFile(const char *file) /* DON'T EVEN THINK ABOUT FIXING THIS. FIX THE ATI SOURCES FIRST, THEN DO A REAL FIX HERE! */ + if (m_pvr_fd_dst < 0) + { /* (this codepath needs to be improved anyway.) */ #if HAVE_DVB_API_VERSION < 3 - m_pvr_fd_dst = open("/dev/pvr", O_WRONLY); + m_pvr_fd_dst = open("/dev/pvr", O_WRONLY); #else - m_pvr_fd_dst = open("/dev/misc/pvr", O_WRONLY); + m_pvr_fd_dst = open("/dev/misc/pvr", O_WRONLY); #endif - if (m_pvr_fd_dst < 0) - { - eDebug("can't open /dev/misc/pvr - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved. - return -ENODEV; + if (m_pvr_fd_dst < 0) + { + eDebug("can't open /dev/misc/pvr - you need to buy the new(!) $$$ box! (%m)"); // or wait for the driver to be improved. + return -ENODEV; + } } m_pvr_thread = new eDVBChannelFilePush(); @@ -1771,6 +1770,8 @@ RESULT eDVBChannel::playFile(const char *file) { delete m_pvr_thread; m_pvr_thread = 0; + ::close(m_pvr_fd_dst); + m_pvr_fd_dst = -1; eDebug("can't open PVR file %s (%m)", file); return -ENOENT; } @@ -1787,10 +1788,11 @@ void eDVBChannel::stopFile() if (m_pvr_thread) { m_pvr_thread->stop(); - ::close(m_pvr_fd_dst); delete m_pvr_thread; m_pvr_thread = 0; } + if (m_pvr_fd_dst >= 0) + ::close(m_pvr_fd_dst); } void eDVBChannel::setCueSheet(eCueSheet *cuesheet)