⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sitypes.cpp

📁 数字电视中间件小型库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -