}
}
-RESULT eDVBResourceManager::allocateFrontend(const eDVBChannelID &chid, ePtr<eDVBAllocatedFrontend> &fe)
+RESULT eDVBResourceManager::allocateFrontend(ePtr<iDVBFrontendParameters> &feparm, ePtr<eDVBAllocatedFrontend> &fe)
{
ePtr<eDVBRegisteredFrontend> best;
int bestval = 0;
-
+
for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i)
if (!i->m_inuse)
{
- int c = i->m_frontend->isCompatibleWith(chid);
+ int c = i->m_frontend->isCompatibleWith(feparm);
if (c > bestval)
{
c = bestval;
}
}
- /* no currently available channel is tuned to this channelid. create a new one, if possible. */
-
- /* allocate a frontend. */
+ /* no currently available channel is tuned to this channelid. create a new one, if possible. */
+
+ if (!m_list)
+ {
+ eDebug("no channel list set!");
+ return -ENOENT;
+ }
+
+ ePtr<iDVBFrontendParameters> feparm;
+ if (m_list->getChannelFrontendData(channelid, feparm))
+ {
+ eDebug("channel not found!");
+ return -ENOENT;
+ }
+
+ /* allocate a frontend. */
ePtr<eDVBAllocatedFrontend> fe;
- if (allocateFrontend(channelid, fe))
+ if (allocateFrontend(feparm, fe))
return errNoFrontend;
// will be allocated on demand:
//
// if (allocateDemux(*fe, demux))
// return errNoDemux;
-
+
RESULT res;
ePtr<eDVBChannel> ch;
ch = new eDVBChannel(this, fe);
- res = ch->setChannel(channelid);
+ res = ch->setChannel(channelid, feparm);
if (res)
{
channel = 0;
RESULT eDVBResourceManager::allocateRawChannel(eUsePtr<iDVBChannel> &channel)
{
ePtr<eDVBAllocatedFrontend> fe;
-
- if (allocateFrontend(eDVBChannelID(), fe))
+
+#warning FIXME allocateRawChannel
+
+// if (allocateFrontend(eDVBChannelID(), fe))
return errNoFrontend;
// ePtr<eDVBAllocatedDemux> demux;
}
}
-RESULT eDVBChannel::setChannel(const eDVBChannelID &channelid)
+RESULT eDVBChannel::setChannel(const eDVBChannelID &channelid, ePtr<iDVBFrontendParameters> &feparm)
{
if (m_channel_id)
m_mgr->removeChannel(this);
if (!channelid)
return 0;
- ePtr<iDVBChannelList> list;
-
- if (m_mgr->getChannelList(list))
- {
- eDebug("no channel list set!");
- return -ENOENT;
- }
-
- eDebug("tuning to chid: ns: %08x tsid %04x onid %04x",
- channelid.dvbnamespace.get(), channelid.transport_stream_id.get(), channelid.original_network_id.get());
-
- ePtr<iDVBFrontendParameters> feparm;
- if (list->getChannelFrontendData(channelid, feparm))
- {
- eDebug("channel not found!");
- return -ENOENT;
- }
-
if (!m_frontend)
{
eDebug("no frontend to tune!");