diff options
author | Christian Wieninger <cwieninger@gmx.de> | 2011-08-04 20:14:55 +0200 |
---|---|---|
committer | Christian Wieninger <cwieninger@gmx.de> | 2011-08-04 20:14:55 +0200 |
commit | 548a267c4458845485d41480ddec7c5c4ff28778 (patch) | |
tree | d9d77d3b8e8e3520328e57196ea06ce410c14df3 | |
parent | ecd53aaaa0af6f6c42358ad665653e53a563cd4e (diff) | |
download | vdr-plugin-epgsearch-548a267c4458845485d41480ddec7c5c4ff28778.tar.gz vdr-plugin-epgsearch-548a267c4458845485d41480ddec7c5c4ff28778.tar.bz2 |
cache CAM stati to speedup conflict check
-rw-r--r-- | conflictcheck.c | 16 | ||||
-rw-r--r-- | conflictcheck.h | 4 |
2 files changed, 19 insertions, 1 deletions
diff --git a/conflictcheck.c b/conflictcheck.c index ced1009..7b30326 100644 --- a/conflictcheck.c +++ b/conflictcheck.c @@ -442,6 +442,7 @@ cList<cConflictCheckTime>* cConflictCheck::CreateConflictList(cList<cConflictChe int cConflictCheck::ProcessCheckTime(cConflictCheckTime* checkTime) { if (!checkTime) return 0; + LogFile.Log(3,"check time %s", DAYDATETIME(checkTime->evaltime)); LogFile.Log(3,"detach stopping timers"); @@ -510,6 +511,19 @@ int cConflictCheck::ProcessCheckTime(cConflictCheckTime* checkTime) } #if APIVERSNUM >= 10500 + +eModuleStatus cConflictCheck::CamSlotModuleStatus(cCamSlot *CamSlot) +{ + if (!CamSlot) return msNone; + if ((int)camSlotStatusArray.size() != CamSlots.Count()) + for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot)) + camSlotStatusArray.push_back(CamSlot->ModuleStatus()); + if (CamSlot->Index() < (int)camSlotStatusArray.size()) + return camSlotStatusArray[CamSlot->Index()]; + else + return msNone; +} + int cConflictCheck::GetDevice(cConflictCheckTimerObj* TimerObj, bool* NeedsDetachReceivers) { int Priority = TimerObj->timer->Priority(); @@ -523,7 +537,7 @@ int cConflictCheck::GetDevice(cConflictCheckTimerObj* TimerObj, bool* NeedsDetac if (Channel->Ca() >= CA_ENCRYPTED_MIN) { for (cCamSlot *CamSlot = CamSlots.First(); CamSlot; CamSlot = CamSlots.Next(CamSlot)) { SlotPriority[CamSlot->Index()] = MAXPRIORITY + 1; // assumes it can't be used - if (CamSlot->ModuleStatus() == msReady) { + if (CamSlotModuleStatus(CamSlot) == msReady) { if (CamSlot->ProvidesCa(Channel->Caids())) { if (!ChannelCamRelations.CamChecked(Channel->GetChannelID(), CamSlot->SlotNumber())) { SlotPriority[CamSlot->Index()] = CamSlot->Priority(); diff --git a/conflictcheck.h b/conflictcheck.h index 545da8b..58df933 100644 --- a/conflictcheck.h +++ b/conflictcheck.h @@ -289,6 +289,7 @@ class cConflictCheck int numDevices; time_t maxCheck; + std::vector<eModuleStatus> camSlotStatusArray; public: int relevantConflicts; int numConflicts; @@ -308,6 +309,9 @@ class cConflictCheck int ProcessCheckTime(cConflictCheckTime* checkTime); bool TimerInConflict(cTimer*); void EvaluateConflCheckCmd(); +#if APIVERSNUM >= 10500 + eModuleStatus CamSlotModuleStatus(cCamSlot *CamSlot); +#endif }; #endif |