From: Andreas Monzner Date: Mon, 5 Dec 2005 19:15:53 +0000 (+0000) Subject: add channel cache (transponders) X-Git-Tag: 2.6.0~4825 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/3c2c648735df18576453aa52f0d8441793619dc7 add channel cache (transponders) --- diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index aa795812..8feb3c18 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -299,7 +299,19 @@ RESULT eDVBResourceManager::getChannelList(ePtr &list) RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUsePtr &channel) { /* first, check if a channel is already existing. */ - + + if (m_cached_channel) + { + eDVBChannel *cache_chan = (eDVBChannel*)&(*m_cached_channel); + if(channelid==cache_chan->getChannelID()) + { + eDebug("use cached_channel"); + channel=m_cached_channel; + return 0; + } + m_cached_channel=0; + } + // eDebug("allocate channel.. %04x:%04x", channelid.transport_stream_id.get(), channelid.original_network_id.get()); for (std::list::iterator i(m_active_channels.begin()); i != m_active_channels.end(); ++i) { @@ -344,7 +356,7 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUse channel = 0; return errChidNotFound; } - channel = ch; + m_cached_channel = channel = ch; return 0; } @@ -444,7 +456,7 @@ bool eDVBResourceManager::canAllocateChannel(const eDVBChannelID &channelid, con if (i->m_channel_id == ignore) { eDVBChannel *channel = (eDVBChannel*) &(*i->m_channel); - if (channel->getUseCount() == 1) // channel only used once.. + if (channel == &(*m_cached_channel) ? channel->getUseCount() == 2 : channel->getUseCount() == 1) // channel only used once.. { ePtr fe; if (!i->m_channel->getFrontend(fe)) diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h index ee8ea8ef..ac5946cd 100644 --- a/lib/dvb/dvb.h +++ b/lib/dvb/dvb.h @@ -97,7 +97,9 @@ class eDVBResourceManager: public iObject { DECLARE_REF(eDVBResourceManager); int avail, busy; - + + eUsePtr m_cached_channel; + eSmartPtrList m_adapter; eSmartPtrList m_demux;