aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/dvb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dvb/dvb.cpp')
-rw-r--r--lib/dvb/dvb.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp
index bd3571a6..7156dbb8 100644
--- a/lib/dvb/dvb.cpp
+++ b/lib/dvb/dvb.cpp
@@ -204,13 +204,28 @@ void eDVBResourceManager::addAdapter(iDVBAdapter *adapter)
RESULT eDVBResourceManager::allocateFrontend(const eDVBChannelID &chid, ePtr<eDVBAllocatedFrontend> &fe)
{
- /* find first unused frontend. we ignore compatibility for now. */
+ ePtr<eDVBRegisteredFrontend> best;
+ int bestval = 0;
+
for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i)
if (!i->m_inuse)
{
- fe = new eDVBAllocatedFrontend(i);
- return 0;
+ int c = i->m_frontend->isCompatibleWith(chid);
+ if (c > bestval)
+ {
+ c = bestval;
+ best = i;
+ }
}
+
+ if (best)
+ {
+ fe = new eDVBAllocatedFrontend(best);
+ return 0;
+ }
+
+ fe = 0;
+
return -1;
}