- /* find first unused demux which is on same adapter as frontend (or any, if PVR) */
- for (eSmartPtrList<eDVBRegisteredDemux>::iterator i(m_demux.begin()); i != m_demux.end(); ++i)
+ /* 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. */
+
+ eDebug("allocate demux");
+ eSmartPtrList<eDVBRegisteredDemux>::iterator i(m_demux.begin());
+
+ if (i == m_demux.end())
+ return -1;
+
+ /* FIXME: hardware demux policy */
+ if (!(cap & iDVBChannel::capDecode))
+ ++i;
+
+ for (; i != m_demux.end(); ++i)