diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2009-07-09 12:20:36 +0200 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2009-07-09 12:21:49 +0200 |
| commit | 6c64f5122744f89b948540faad3352fbacbc6c58 (patch) | |
| tree | 334905112dd801f65c0a7eb0c957a14d10ebed90 /lib/dvb/dvb.cpp | |
| parent | 1cb0ba0d3b77c753f49c71c23293f17e81c0509c (diff) | |
| download | enigma2-6c64f5122744f89b948540faad3352fbacbc6c58.tar.gz enigma2-6c64f5122744f89b948540faad3352fbacbc6c58.zip | |
fix non working recording on dm800 when a recording is started during ts playback
Diffstat (limited to 'lib/dvb/dvb.cpp')
| -rw-r--r-- | lib/dvb/dvb.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index e6d9a25d..6b027088 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -438,7 +438,9 @@ alloc_fe_by_id_not_possible: return err; } -RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBAllocatedDemux> &demux, int cap) +#define capHoldDecodeReference 64 + +RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBAllocatedDemux> &demux, int &cap) { /* find first unused demux which is on same adapter as frontend (or any, if PVR) never use the first one unless we need a decoding demux. */ @@ -455,6 +457,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA if (m_boxtype == DM800 || m_boxtype == DM500HD) // dm800 / 500hd { + cap |= capHoldDecodeReference; // this is checked in eDVBChannel::getDemux for (; i != m_demux.end(); ++i, ++n) { if (!i->m_inuse) @@ -510,6 +513,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA } else if (m_boxtype == DM8000) { + cap |= capHoldDecodeReference; // this is checked in eDVBChannel::getDemux for (; i != m_demux.end(); ++i, ++n) { if (fe) @@ -1693,17 +1697,24 @@ RESULT eDVBChannel::getDemux(ePtr<iDVBDemux> &demux, int cap) if (m_mgr->allocateDemux(m_frontend ? (eDVBRegisteredFrontend*)*m_frontend : (eDVBRegisteredFrontend*)0, our_demux, cap)) return -1; - } - demux = *our_demux; + demux = *our_demux; + /* don't hold a reference to the decoding demux, we don't need it. */ /* FIXME: by dropping the 'allocated demux' in favour of the 'iDVBDemux', the refcount is lost. thus, decoding demuxes are never allocated. this poses a big problem for PiP. */ - if (cap & capDecode) - our_demux = 0; + + if (cap & capHoldDecodeReference) // this is set in eDVBResourceManager::allocateDemux for Dm500HD/DM800 and DM8000 + ; + else if (cap & capDecode) + our_demux = 0; + } + else + demux = *our_demux; + return 0; } |
