capmt.cpp: Codeing the NI CI-Record workaround closer to original

Origin commit data
------------------
Commit: 8191d85c4c
Author: FlatTV <FlatTV@gmx.de>
Date: 2016-12-04 (Sun, 04 Dec 2016)
This commit is contained in:
FlatTV
2016-12-04 11:53:40 +01:00
parent 13923be3fb
commit 15cee94e22

View File

@@ -262,16 +262,13 @@ bool CCamManager::SetMode(t_channel_id channel_id, enum runmode mode, bool start
mode, start ? "START" : "STOP", source, oldmask, newmask, force_update, rmode); mode, start ? "START" : "STOP", source, oldmask, newmask, force_update, rmode);
//INFO("source %d old mask %d new mask %d force update %s", source, oldmask, newmask, force_update ? "yes" : "no"); //INFO("source %d old mask %d new mask %d force update %s", source, oldmask, newmask, force_update ? "yes" : "no");
if((oldmask != newmask) || force_update) { if((oldmask != newmask) || force_update) {
INFO(" ##NI: (oldmask != newmask) || force_update)\n"); INFO(" ##NI: (oldmask != newmask) || force_update)\n");
if(start) { cam->setCaMask(newmask);
cam->setCaMask(newmask); cam->setSource(source);
cam->setSource(source); if(newmask != 0 && (!filter_channels || !channel->bUseCI)) {
if(newmask != 0 && (!filter_channels || !channel->bUseCI)) { cam->makeCaPmt(channel, true);
cam->makeCaPmt(channel, true); cam->setCaPmt(true);
cam->setCaPmt(true);
}
} }
} }
@@ -283,7 +280,6 @@ bool CCamManager::SetMode(t_channel_id channel_id, enum runmode mode, bool start
StopCam(channel_id, cam); StopCam(channel_id, cam);
#ifdef BOXMODEL_APOLLO #ifdef BOXMODEL_APOLLO
CZapitChannel * chan = CServiceManager::getInstance()->GetCurrentChannel(); CZapitChannel * chan = CServiceManager::getInstance()->GetCurrentChannel();
INFO(" ##NI: GetCurrentChannel (%s)\n",chan->getName().c_str());
//NI - this is a hack for rezaping to the recording channe //NI - this is a hack for rezaping to the recording channe
//if commig from movieplayer, disable hack //if commig from movieplayer, disable hack
@@ -303,87 +299,73 @@ bool CCamManager::SetMode(t_channel_id channel_id, enum runmode mode, bool start
rmode = true; rmode = true;
INFO(" ##NI: rmode\n"); INFO(" ##NI: rmode\n");
} }
} else } else
rmode = false; rmode = false;
} }
#endif #endif
//NI CaIdVector caids;
if(oldmask == newmask) { cCA::GetInstance()->GetCAIDS(caids);
INFO(" ##NI: (oldmask == newmask) do nothing yet\n"); //uint8_t list = CCam::CAPMT_FIRST;
} uint8_t list = CCam::CAPMT_ONLY;
if (channel_map.size() > 1)
if(start) { //NI list = CCam::CAPMT_ADD;
INFO(" ##NI: (start)\n");
CaIdVector caids;
cCA::GetInstance()->GetCAIDS(caids);
//uint8_t list = CCam::CAPMT_FIRST;
uint8_t list = CCam::CAPMT_ONLY;
if (channel_map.size() > 1)
list = CCam::CAPMT_ADD;
#ifdef BOXMODEL_APOLLO #ifdef BOXMODEL_APOLLO
INFO(" ##NI: channel_map.size() %d\n",channel_map.size()); INFO(" ##NI: channel_map.size() %d\n",channel_map.size());
int ci_use_count = 0;
for (it = channel_map.begin(); it != channel_map.end(); ++it)
{
cam = it->second;
channel = CServiceManager::getInstance()->FindChannel(it->first);
int ci_use_count = 0; if (tunerno >= 0 && tunerno == cDemux::GetSource(cam->getSource())) {
bool ts_use = false; //NI cCA::GetInstance()->SetTS((CA_DVBCI_TS_INPUT)tunerno);
for (it = channel_map.begin(); it != channel_map.end(); ++it) ci_use_count++;
{ break;
cam = it->second; } else if (filter_channels) {
channel = CServiceManager::getInstance()->FindChannel(it->first); if (channel && channel->bUseCI)
if(!channel || !channel->scrambled) {//NI
INFO("CI: skip, channel not scrambled [%s]\n",channel->getName().c_str());
continue;
}
ts_use = true; //NI
if (tunerno >= 0 && tunerno == cDemux::GetSource(cam->getSource())) {
cCA::GetInstance()->SetTS((CA_DVBCI_TS_INPUT)tunerno);
ci_use_count++; ci_use_count++;
break; } else
} else if (filter_channels) { ci_use_count++;
if (channel && channel->bUseCI) }
ci_use_count++; if (ci_use_count == 0) {
} else INFO("CI: not used for [%s], disabling TS\n",channel->getName().c_str());
ci_use_count++; cCA::GetInstance()->SetTS(CA_DVBCI_TS_INPUT_DISABLED);
} }
if (ci_use_count == 0 && ts_use) { //NI - don't disable TS if SetTS wouldn't call
INFO("CI: not used for [%s], disabling TS\n",channel->getName().c_str());
cCA::GetInstance()->SetTS(CA_DVBCI_TS_INPUT_DISABLED);
}
#endif #endif
for (it = channel_map.begin(); it != channel_map.end(); /*++it*/) for (it = channel_map.begin(); it != channel_map.end(); /*++it*/)
{ {
cam = it->second; cam = it->second;
channel = CServiceManager::getInstance()->FindChannel(it->first); channel = CServiceManager::getInstance()->FindChannel(it->first);
++it; ++it;
if(!channel || !channel->scrambled) //NI if(!channel)
continue; continue;
#if 0 #if 0
if (it == channel_map.end()) if (it == channel_map.end())
list |= CCam::CAPMT_LAST; // FIRST->ONLY or MORE->LAST list |= CCam::CAPMT_LAST; // FIRST->ONLY or MORE->LAST
#endif #endif
cam->makeCaPmt(channel, false, list, caids); cam->makeCaPmt(channel, false, list, caids);
int len; int len;
unsigned char * buffer = channel->getRawPmt(len); unsigned char * buffer = channel->getRawPmt(len);
cam->sendCaPmt(channel->getChannelID(), buffer, len, CA_SLOT_TYPE_SMARTCARD); cam->sendCaPmt(channel->getChannelID(), buffer, len, CA_SLOT_TYPE_SMARTCARD);
if (tunerno >= 0 && tunerno != cDemux::GetSource(cam->getSource())) { if (tunerno >= 0 && tunerno != cDemux::GetSource(cam->getSource())) {
INFO("CI: configured tuner %d do not match %d, skip [%s]\n", tunerno, cam->getSource(), channel->getName().c_str()); INFO("CI: configured tuner %d do not match %d, skip [%s]\n", tunerno, cam->getSource(), channel->getName().c_str());
} else if (filter_channels && !channel->bUseCI) { } else if (filter_channels && !channel->bUseCI) {
INFO("CI: filter enabled, CI not used for [%s]\n", channel->getName().c_str()); INFO("CI: filter enabled, CI not used for [%s]\n", channel->getName().c_str());
} else { } else {
useCI = true; //NI useCI = true; //NI
INFO("CI: use CI for [%s]\n", channel->getName().c_str()); INFO("CI: use CI for [%s]\n", channel->getName().c_str());
cam->sendCaPmt(channel->getChannelID(), buffer, len, CA_SLOT_TYPE_CI); cam->sendCaPmt(channel->getChannelID(), buffer, len, CA_SLOT_TYPE_CI);
}
//list = CCam::CAPMT_MORE;
} }
} //NI //list = CCam::CAPMT_MORE;
}
return true; return true;
} }