diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2006-04-13 00:52:31 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2006-04-13 00:52:31 +0000 |
| commit | 73e8bb7046d631681fe42d8f56f486f7e36f52b7 (patch) | |
| tree | 0a57230965461239177e184844f26d17c13c9380 /lib/dvb/dvb.cpp | |
| parent | 7a79e14b385f63a84a12720cadee720a7a803783 (diff) | |
| download | enigma2-73e8bb7046d631681fe42d8f56f486f7e36f52b7.tar.gz enigma2-73e8bb7046d631681fe42d8f56f486f7e36f52b7.zip | |
use refcount for decoding demuxes to check if they are in use
Diffstat (limited to 'lib/dvb/dvb.cpp')
| -rw-r--r-- | lib/dvb/dvb.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 18765ad3..2a188ee1 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -282,9 +282,14 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA } for (; i != m_demux.end(); ++i, ++n) - if ((!i->m_inuse) && ((!fe) || (i->m_adapter == fe->m_adapter))) + { + int is_decode = n < 2; + + int in_use = is_decode ? (i->m_demux->getRefCount() != 2) : i->m_inuse; + + if ((!in_use) && ((!fe) || (i->m_adapter == fe->m_adapter))) { - if ((cap & iDVBChannel::capDecode) && (n >= 2)) + if ((cap & iDVBChannel::capDecode) && !is_decode) continue; demux = new eDVBAllocatedDemux(i); @@ -294,6 +299,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA demux->get().setSourcePVR(0); return 0; } + } eDebug("demux not found"); return -1; } |
