X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb_ci%2Fdvbci.cpp;h=1419e97d3edd4e38127828db3e26d061eb43386b;hp=e7618d0b3fbb980436b1adec15d6ff4466646a25;hb=e55c2a3f54467f487dfd75617b19b0efeccf8ed7;hpb=abea3ffc90caa01c5327ecb478fd25a5269c2e07 diff --git a/lib/dvb_ci/dvbci.cpp b/lib/dvb_ci/dvbci.cpp index e7618d0..1419e97 100644 --- a/lib/dvb_ci/dvbci.cpp +++ b/lib/dvb_ci/dvbci.cpp @@ -298,6 +298,7 @@ void eDVBCIInterfaces::recheckPMTHandlers() if (tmp) // we dont like to change tsmux for running services { eDebugCI("already assigned and running CI!\n"); + tmp->addVtunerPid(pmthandler); continue; } } @@ -1069,13 +1070,6 @@ eDVBCISlot::eDVBCISlot(eMainloop *context, int nr) { perror(filename); } - - for(int i = 0; i < NUM_OF_ECM ; i++) - { - m_ecm[i] = 0; - } - ecm_num = 0; - } eDVBCISlot::~eDVBCISlot() @@ -1355,7 +1349,8 @@ void eDVBCISlot::addVtunerPid(eDVBServicePMTHandler *pmthandler) ePtr demux; eDVBServicePMTHandler::program p; - if (!pmthandler->getDataDemux(demux) && !ecm_num) + bool ignore = 0; + if (!pmthandler->getDataDemux(demux)) { if (!pmthandler->getProgramInfo(p)) @@ -1363,11 +1358,23 @@ void eDVBCISlot::addVtunerPid(eDVBServicePMTHandler *pmthandler) for (std::list::const_iterator i(p.caids.begin()); i != p.caids.end(); ++i) { - if (i->capid >= 0) + ignore = 0; + for (eSmartPtrList::iterator it(m_ecms.begin()); it != m_ecms.end(); ++it) + { + if(it->getPid() == i->capid) + { + ignore = 1; + break; + } + } + + if (i->capid >= 0 && !ignore) { - eDebug("PES Start ECM PID = %d Caid = %d ecm_num=%d", i->capid, i->caid, ecm_num); - m_ecm[ecm_num] = new eDVBECMParser(demux); - m_ecm[ecm_num++]->start(i->capid); + ePtr ecm; + eDebug("PES Start CAPID = %d Caid = %d", i->capid, i->caid); + ecm = new eDVBECMParser(demux); + m_ecms.push_back(ecm); + ecm->start(i->capid); } } } @@ -1377,15 +1384,12 @@ void eDVBCISlot::addVtunerPid(eDVBServicePMTHandler *pmthandler) void eDVBCISlot::removeVtunerPid(void) { - for(int i = 0; i < ecm_num ; i++) + eDebugCI("eDVBCISlot::removeVtunerPid..."); + for (eSmartPtrList::iterator it(m_ecms.begin()); it != m_ecms.end(); ++it) { - if(m_ecm[i]) - { - m_ecm[i]->stop(); - m_ecm[i] = 0; - } + it->stop(); } - ecm_num = 0; + m_ecms.clear(); } eAutoInitP0 init_eDVBCIInterfaces(eAutoInitNumbers::dvb, "CI Slots");