📄 sitypes.cpp
字号:
mask = 0x00; status.pulling = true; return true;}void STTHandler::Request(uint16_t key){ (void) key; status.requested = true;}bool STTHandler::Complete(){ if (Tracker.Complete() && (!status.emitted)) { if (status.requestedEmit == false) status.emitted = true; return true; } return false;}bool STTHandler::AddSection(tablehead_t *head, uint16_t key0, uint16_t key1){ (void) key0; (void) key1; return Tracker.AddSection(head);}void EventHandler::Reset(){ Tracker.clear(); mgtloaded = false; sttloaded = false; servicesloaded = false; EITpid.clear(); ETTpid.clear(); Events.clear(); CompleteSent = false; SIStandard = SI_STANDARD_DVB;}bool EventHandler::Complete(){ if (status.empty()) return false; if (SIStandard == SI_STANDARD_ATSC) { if (!(mgtloaded)) return false; if (!(sttloaded)) return false; } if (!(servicesloaded)) return false; if (CompleteSent) return false; QMap_pullStatus::Iterator k; for (k = status.begin() ; k != status.end() ; ++k) { if ((k.data().pulling == true) && (k.data().emitted == true)) { CompleteSent = true; return true; } } return false;}void EventHandler::SetupTrackers(){ QMap_pullStatus::Iterator s; if (SIStandard == SI_STANDARD_ATSC) { QMap_pidHandler::Iterator p; for (s = status.begin() ; s != status.end() ; ++s) { for (p = EITpid.begin() ; p != EITpid.end() ; ++p) Tracker[s.key()][p.key()].Reset(); TrackerSetup[s.key()] = true; s.data().pulling = true; } } if (SIStandard == SI_STANDARD_DVB) { for (s = status.begin() ; s != status.end() ; ++s) {// Temporary value for now.. s.data().pulling = true; TrackerSetup[s.key()] = false; } }}bool EventHandler::RequirePIDs(){ if (SIStandard == SI_STANDARD_ATSC) { if (!(mgtloaded)) return false; if (!(sttloaded)) return false; } if (!(servicesloaded)) return false; QMap_pidHandler::Iterator i; for (i = EITpid.begin() ; i != EITpid.end() ; ++i) { if(i.data().pulling == false) { SetupTrackers(); return true; } } for (i = ETTpid.begin() ; i != ETTpid.end() ; ++i) { if(i.data().pulling == false) { SetupTrackers(); return true; } } return false;}bool EventHandler::GetPIDs(uint16_t& pid, uint8_t& filter, uint8_t& mask){ QMap_pidHandler::Iterator i; for (i = EITpid.begin() ; i != EITpid.end() ; ++i) { if(i.data().pulling == false) { pid = i.data().pid; filter = i.data().filter; mask = i.data().mask; i.data().pulling = true; return true; } } for (i = ETTpid.begin() ; i != ETTpid.end() ; ++i) { if(i.data().pulling == false) { pid = i.data().pid; filter = i.data().filter; mask = i.data().mask; i.data().pulling = true; return true; } } return false;}void EventHandler::RequestEmit(uint16_t key){#ifdef EIT_DEBUG_SID fprintf(stdout,"EventHandler::RequestEmit for serviceid=%i\n", key);#endif status[key].requested = true; status[key].requestedEmit = true; status[key].emitted = false;}bool EventHandler::EmitRequired(){ QMap_pidHandler::Iterator p; QMap_SectionTracker::Iterator i; QMap_pullStatus::Iterator s; QMap_Events::Iterator e; bool AllComplete; if (SIStandard == SI_STANDARD_ATSC) { if (!(mgtloaded)) return false; if (!(sttloaded)) return false; } if (!(servicesloaded)) return false; for (s = status.begin() ; s != status.end() ; ++s) { if (s.data().emitted || !s.data().pulling) { continue; } AllComplete = true; /* Make sure all sections are being pulled otherwise your not done */ if (TrackerSetup[s.key()] == false) AllComplete = false; for (i = Tracker[s.key()].begin() ; i != Tracker[s.key()].end() ; ++i) { if (!i.data().Complete()) { AllComplete = false; break; } } if (SIStandard == SI_STANDARD_ATSC) { for (e = Events[s.key()].begin() ; e != Events[s.key()].end() ; ++e) { if (e.data().ETM_Location != 0) { for (p = EITpid.begin() ; p != EITpid.end() ; ++p) { if (e.data().SourcePID == p.data().pid) { /* Delete events that need ETTs that aren't filtered */ if (ETTpid.contains(p.key())) AllComplete = false;// Don't remove it because it screwed up the list.. This is temporary.. Use Stack like DVBSIParser// else// Events[s.key()].remove(e); } } } } } if (AllComplete) return true; } return false;}bool EventHandler::GetEmitID(uint16_t& key0, uint16_t& key1){ QMap_pidHandler::Iterator p; QMap_SectionTracker::Iterator i; QMap_pullStatus::Iterator s; QMap_Events::Iterator e; bool AllComplete; for (s = status.begin() ; s != status.end() ; ++s) { if ((s.data().requestedEmit) && (s.data().emitted != true)) { AllComplete = true; if (TrackerSetup[s.key()] == false) AllComplete = false; /* Make sure all sections are being pulled otherwise your not done */ for (i = Tracker[s.key()].begin() ; i != Tracker[s.key()].end() ; ++i) { if (!(i.data().Complete())) AllComplete = false; } if (SIStandard == SI_STANDARD_ATSC) { for (e = Events[s.key()].begin() ; e != Events[s.key()].end() ; ++e) { if (e.data().ETM_Location != 0) { for (p = EITpid.begin() ; p != EITpid.end() ; ++p) { if (e.data().SourcePID == p.data().pid) { /* Delete events that need ETTs that aren't filtered */ if (ETTpid.contains(p.key())) AllComplete = false; // Don't remove it because it screwed up the list.. This is temporary.. // else // Events[s.key()].remove(e); } } } } } if (AllComplete) { key0 = s.key(); key1 = 0; s.data().emitted = true; return true; } } } return false;}void EventHandler::DependencyMet(tabletypes t){ if (t == MGT) mgtloaded = true; if (t == STT) sttloaded = true; if (t == SERVICES) servicesloaded = true;}void EventHandler::AddPid(uint16_t pid,uint8_t filter, uint8_t mask, uint8_t key){ if (filter == 0xCB) { if (EITpid.contains(key)) return; EITpid[key].pid = pid; EITpid[key].filter = filter; EITpid[key].mask = mask; EITpid[key].pulling = false; return; } if (filter == 0xCC) { if (ETTpid.contains(key)) return; ETTpid[key].pid = pid; ETTpid[key].filter = filter; ETTpid[key].mask = mask; ETTpid[key].pulling = false; return; } if (EITpid.contains(key)) return; EITpid[key].pid = pid; EITpid[key].filter = filter; EITpid[key].mask = mask; EITpid[key].pulling = false;}bool EventHandler::AddSection(tablehead_t *head, uint16_t key0, uint16_t key1){ int retval = false;#ifdef EIT_DEBUG_SID if (key0 == EIT_DEBUG_SID) { printf("EventHandler::AddSection sid=%i eid=%i version=%i section %02x of %02x\n", key0, key1, head->version, head->section_number, head->section_last); }#endif if (SIStandard == SI_STANDARD_ATSC) { QMap_pidHandler::Iterator p; uint16_t realkey1 = 1000; for (p = EITpid.begin() ; p != EITpid.end() ; ++p) { if (p.data().pid == key1) realkey1 = p.key(); } retval = Tracker[key0][realkey1].AddSection(head); } if (SIStandard == SI_STANDARD_DVB) {#ifdef EIT_DEBUG_SID if (key0 == EIT_DEBUG_SID) { QString foo = Tracker[key0][key1].loadStatus(); printf("%s\n", foo.ascii()); }#endif return Tracker[key0][key1].AddSection(head); } if (retval == 1) return true; if (retval == -1) { retval = -1; // Here you will reset the trackers and allow an emit again } return false;}void ServiceHandler::Reset(){ Tracker.clear(); mgtloaded = false; nitloaded = false; status.clear(); CompleteSent = false; Services.clear(); SIStandard = SI_STANDARD_AUTO;}bool ServiceHandler::Complete(){ if (status.empty()) return false; if ((SIStandard == SI_STANDARD_ATSC) && (!(mgtloaded)) ) return false; if ((SIStandard == SI_STANDARD_DVB) && (!(nitloaded)) ) return false; if (CompleteSent) return false; QMap_pullStatus::Iterator k; for (k = status.begin() ; k != status.end() ; ++k) { if ((k.data().pulling == true) && (k.data().emitted == true)) { CompleteSent = true; return true; } } return false;}bool ServiceHandler::RequirePIDs(){ if (SIStandard == SI_STANDARD_AUTO) return false; if ((SIStandard == SI_STANDARD_ATSC) && (!(mgtloaded)) ) return false; if ((SIStandard == SI_STANDARD_DVB) && (!(nitloaded)) ) return false; return (!(status[0].pulling));}bool ServiceHandler::GetPIDs(uint16_t& pid, uint8_t& filter, uint8_t& mask){ if ((SIStandard == SI_STANDARD_DVB) && (status[0].pulling == false)) { pid = 0x11; filter = 0x46; mask = 0xFB; status[0].pulling = true; return true; } if ((SIStandard == SI_STANDARD_ATSC) && (status[0].pulling == false)) { pid = 0x1FFB; filter = 0xFF; mask = 0x00; status[0].pulling = true; return true; } return false;}void ServiceHandler::RequestEmit(uint16_t key){ status[key].requested = true; status[key].requestedEmit = true; status[key].emitted = false;}void ServiceHandler::Request(uint16_t key){ status[key].requested = true; status[key].requestedEmit = false; status[key].emitted = false;}bool ServiceHandler::GetEmitID(uint16_t& key0, uint16_t& key1){ key0 = 0; key1 = 0; return false;}void ServiceHandler::DependencyMet(tabletypes t){ if (t == MGT) mgtloaded = true; if (t == NETWORK) nitloaded = true;}bool ServiceHandler::AddSection(tablehead_t *head, uint16_t key0, uint16_t key1){ (void) key1; return Tracker[key0].AddSection(head);}void NetworkHandler::Reset(){ Tracker.Reset(); status.Reset(); CompleteSent = false; NITList.Network.clear(); NITList.Transport.clear(); SIStandard = SI_STANDARD_AUTO;}bool NetworkHandler::Complete(){ if (SIStandard == SI_STANDARD_ATSC) return false; if (CompleteSent) return false; if ((status.pulling == true) && (Tracker.Complete()) ) { CompleteSent = true; return true; } return false;}bool NetworkHandler::RequirePIDs(){ if (SIStandard == SI_STANDARD_ATSC) return false; if ((status.pulling == false) && (status.requested == true)) return true; return false;}bool NetworkHandler::GetPIDs(uint16_t& pid, uint8_t& filter, uint8_t& mask){ if ((SIStandard == SI_STANDARD_DVB) && (status.pulling == false)) { pid = 0x10; filter = 0x40; mask = 0xFF; status.pulling = true; return true; } return false;}void NetworkHandler::Request(uint16_t key){ (void) key; status.requested = true;}void NetworkHandler::RequestEmit(uint16_t key){ (void) key; status.requested = true; status.requestedEmit = true; status.emitted = false;}bool NetworkHandler::EmitRequired(){ if ((status.emitted == false) && (Tracker.Complete()) && (status.requestedEmit)) return true; return false;}bool NetworkHandler::GetEmitID(uint16_t& key0, uint16_t& key1){ if (status.emitted == false) { key0 = 0; key1 = 0; status.emitted = true; return true; } return false;}bool NetworkHandler::AddSection(tablehead_t *head, uint16_t key0, uint16_t key1){ (void) head; (void) key1; (void) key0; return Tracker.AddSection(head);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -