}
eDVBResourceManager::eDVBResourceManager()
- :m_releaseCachedChannelTimer(eApp)
+ :m_releaseCachedChannelTimer(eTimer::create(eApp))
{
avail = 1;
busy = 0;
eDVBCAService::registerChannelCallback(this);
- CONNECT(m_releaseCachedChannelTimer.timeout, eDVBResourceManager::releaseCachedChannel);
+ CONNECT(m_releaseCachedChannelTimer->timeout, eDVBResourceManager::releaseCachedChannel);
}
void eDVBResourceManager::feStateChanged()
}
m_cached_channel_state_changed_conn.disconnect();
m_cached_channel=0;
- m_releaseCachedChannelTimer.stop();
+ m_releaseCachedChannelTimer->stop();
}
eDebugNoSimulate("allocate channel.. %04x:%04x", channelid.transport_stream_id.get(), channelid.original_network_id.get());
return err;
RESULT res;
- ePtr<eDVBChannel> ch;
- ch = new eDVBChannel(this, fe);
+ ePtr<eDVBChannel> ch = new eDVBChannel(this, fe);
res = ch->setChannel(channelid, feparm);
if (res)
case iDVBChannel::state_ok:
{
eDebug("stop release channel timer");
- m_releaseCachedChannelTimer.stop();
+ m_releaseCachedChannelTimer->stop();
break;
}
case iDVBChannel::state_last_instance:
{
eDebug("start release channel timer");
- m_releaseCachedChannelTimer.start(3000, true);
+ m_releaseCachedChannelTimer->start(3000, true);
break;
}
default: // ignore all other events
{
m_cached_channel_state_changed_conn.disconnect();
m_cached_channel=0;
- m_releaseCachedChannelTimer.stop();
+ m_releaseCachedChannelTimer->stop();
}
int err = allocateFrontendByIndex(fe, slot_index);
if (err)
return err;
- eDVBChannel *ch;
- ch = new eDVBChannel(this, fe);
-
- channel = ch;
+ channel = new eDVBChannel(this, fe);
return 0;
}
{
ePtr<eDVBAllocatedDemux> demux;
- if (m_cached_channel && m_releaseCachedChannelTimer.isActive())
+ if (m_cached_channel && m_releaseCachedChannelTimer->isActive())
{
m_cached_channel_state_changed_conn.disconnect();
m_cached_channel=0;
- m_releaseCachedChannelTimer.stop();
+ m_releaseCachedChannelTimer->stop();
}
- eDVBChannel *ch;
- ch = new eDVBChannel(this, 0);
-
- channel = ch;
+ channel = new eDVBChannel(this, 0);
return 0;
}
return 0;
}
-int eDVBResourceManager::canAllocateFrontend(ePtr<iDVBFrontendParameters> &feparm)
+int eDVBResourceManager::canAllocateFrontend(ePtr<iDVBFrontendParameters> &feparm, bool simulate)
{
+ eSmartPtrList<eDVBRegisteredFrontend> &frontends = simulate ? m_simulate_frontend : m_frontend;
ePtr<eDVBRegisteredFrontend> best;
int bestval = 0;
- for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(m_frontend.begin()); i != m_frontend.end(); ++i)
+ for (eSmartPtrList<eDVBRegisteredFrontend>::iterator i(frontends.begin()); i != frontends.end(); ++i)
if (!i->m_inuse)
{
int c = i->m_frontend->isCompatibleWith(feparm);
return 0;
}
-int eDVBResourceManager::canAllocateChannel(const eDVBChannelID &channelid, const eDVBChannelID& ignore)
+int eDVBResourceManager::canAllocateChannel(const eDVBChannelID &channelid, const eDVBChannelID& ignore, bool simulate)
{
+ std::list<active_channel> &active_channels = simulate ? m_active_simulate_channels : m_active_channels;
int ret=0;
- if (m_cached_channel)
+ if (!simulate && m_cached_channel)
{
eDVBChannel *cache_chan = (eDVBChannel*)&(*m_cached_channel);
if(channelid==cache_chan->getChannelID())
/* first, check if a channel is already existing. */
// eDebug("allocate channel.. %04x:%04x", channelid.transport_stream_id.get(), channelid.original_network_id.get());
- for (std::list<active_channel>::iterator i(m_active_channels.begin()); i != m_active_channels.end(); ++i)
+ for (std::list<active_channel>::iterator i(active_channels.begin()); i != active_channels.end(); ++i)
{
// eDebug("available channel.. %04x:%04x", i->m_channel_id.transport_stream_id.get(), i->m_channel_id.original_network_id.get());
if (i->m_channel_id == channelid)
int *decremented_cached_channel_fe_usecount=NULL,
*decremented_fe_usecount=NULL;
- for (std::list<active_channel>::iterator i(m_active_channels.begin()); i != m_active_channels.end(); ++i)
+ for (std::list<active_channel>::iterator i(active_channels.begin()); i != active_channels.end(); ++i)
{
+ eSmartPtrList<eDVBRegisteredFrontend> &frontends = simulate ? m_simulate_frontend : m_frontend;
// eDebug("available channel.. %04x:%04x", i->m_channel_id.transport_stream_id.get(), i->m_channel_id.original_network_id.get());
if (i->m_channel_id == ignore)
{
ePtr<iDVBFrontend> fe;
if (!i->m_channel->getFrontend(fe))
{
- for (eSmartPtrList<eDVBRegisteredFrontend>::iterator ii(m_frontend.begin()); ii != m_frontend.end(); ++ii)
+ for (eSmartPtrList<eDVBRegisteredFrontend>::iterator ii(frontends.begin()); ii != frontends.end(); ++ii)
{
if ( &(*fe) == &(*ii->m_frontend) )
{
ePtr<iDVBFrontend> fe;
if (!channel->getFrontend(fe))
{
- for (eSmartPtrList<eDVBRegisteredFrontend>::iterator ii(m_frontend.begin()); ii != m_frontend.end(); ++ii)
+ eSmartPtrList<eDVBRegisteredFrontend> &frontends = simulate ? m_simulate_frontend : m_frontend;
+ for (eSmartPtrList<eDVBRegisteredFrontend>::iterator ii(frontends.begin()); ii != frontends.end(); ++ii)
{
if ( &(*fe) == &(*ii->m_frontend) )
{
goto error;
}
- ret = canAllocateFrontend(feparm);
+ ret = canAllocateFrontend(feparm, simulate);
error:
if (decremented_fe_usecount)