#include <lib/base/filepush.h>
#include <lib/dvb/idvb.h>
#include <lib/dvb/dvb.h>
+#include <lib/dvb/pmt.h>
#include <lib/dvb/sec.h>
#include <errno.h>
eDebug("found %d adapter, %d frontends and %d demux",
m_adapter.size(), m_frontend.size(), m_demux.size());
+ eDVBCAService::registerChannelCallback(this);
+
CONNECT(m_releaseCachedChannelTimer.timeout, eDVBResourceManager::releaseCachedChannel);
}
return bestval;
}
+int tuner_type_channel_default(ePtr<iDVBChannelList> &channellist, const eDVBChannelID &chid)
+{
+ if (channellist)
+ {
+ ePtr<iDVBFrontendParameters> feparm;
+ if (!channellist->getChannelFrontendData(chid, feparm))
+ {
+ int system;
+ if (!feparm->getSystem(system))
+ {
+ switch(system)
+ {
+ case iDVBFrontend::feSatellite:
+ return 50000;
+ case iDVBFrontend::feCable:
+ return 40000;
+ case iDVBFrontend::feTerrestrial:
+ return 30000;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ return 0;
+}
+
int eDVBResourceManager::canAllocateChannel(const eDVBChannelID &channelid, const eDVBChannelID& ignore)
{
- int ret=30000;
+ int ret=0;
if (m_cached_channel)
{
eDVBChannel *cache_chan = (eDVBChannel*)&(*m_cached_channel);
if(channelid==cache_chan->getChannelID())
- return ret;
+ return tuner_type_channel_default(m_list, channelid);
}
/* first, check if a channel is already existing. */
if (i->m_channel_id == channelid)
{
// eDebug("found shared channel..");
- return ret;
+ return tuner_type_channel_default(m_list, channelid);
}
}
if (!m_list)
{
eDebug("no channel list set!");
- ret = 0;
goto error;
}
if (m_list->getChannelFrontendData(channelid, feparm))
{
eDebug("channel not found!");
- ret = 0;
goto error;
}
m_skipmode_n = m_skipmode_m = 0;
}
}
+ ASSERT(m_pvr_thread);
m_pvr_thread->setIFrameSearch(m_skipmode_n != 0);
eDebug("flush pvr");
flushPVR(m_cue->m_decoding_demux);