aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/dvb.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2006-04-13 00:52:31 +0000
committerFelix Domke <tmbinc@elitedvb.net>2006-04-13 00:52:31 +0000
commit73e8bb7046d631681fe42d8f56f486f7e36f52b7 (patch)
tree0a57230965461239177e184844f26d17c13c9380 /lib/dvb/dvb.cpp
parent7a79e14b385f63a84a12720cadee720a7a803783 (diff)
downloadenigma2-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.cpp10
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;
}