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

📄 siparser.cpp

📁 数字电视中间件小型库
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    default:        retval.CodeRateHP = "auto";    }    // CoderateLP    switch ((buffer[8] & 0xC0) >> 6)     {    case 0:        retval.CodeRateLP = "1/2";        break;    case 1:        retval.CodeRateLP = "2/3";        break;    case 2:        retval.CodeRateLP = "3/4";        break;    case 3:        retval.CodeRateLP = "5/6";        break;    case 4:        retval.CodeRateLP = "7/8";        break;    default:        retval.CodeRateLP = "auto";    }            //Guard Interval    switch ((buffer[8] & 0x18) >> 3)     {    case 0:        retval.GuardInterval = "1/32";        break;    case 1:        retval.GuardInterval = "1/16";        break;    case 2:        retval.GuardInterval = "1/8";        break;    case 3:        retval.GuardInterval = "1/4";        break;    }            //TransmissionMode    switch ((buffer[8] & 0x06) >> 1)     {    case 0:        retval.TransmissionMode = "2";        break;    case 1:        retval.TransmissionMode = "8";        break;    default:        retval.TransmissionMode = "auto";    }        return retval;}// Desctiptor 0x43 - Satellite Delivery System - NITTransportObject SIParser::ParseDescriptorSatelliteDeliverySystem(uint8_t* buffer, int size){    (void) size;    TransportObject retval;    retval.Type = QString("DVB-S");    QString FrequencyTemp = QString("%1%2%3%4%5%6%7%80")             .arg((buffer[2] & 0xF0) >> 4)             .arg( buffer[2] & 0x0F)             .arg((buffer[3] & 0xF0) >> 4)             .arg( buffer[3] & 0x0F)             .arg((buffer[4] & 0xF0) >> 4)             .arg( buffer[4] & 0x0F)             .arg((buffer[5] & 0xF0) >> 4)             .arg( buffer[5] & 0x0F);    // TODO: Use real BCD conversion on Frequency    retval.Frequency=FrequencyTemp.toInt();    retval.OrbitalLocation=QString("%1%2.%3").arg(buffer[6],0,16).arg((buffer[7]&0xF0) >> 4).arg(buffer[7] & 0x0F);    // This isn't reported correctly by some carriers    switch ((buffer[8] & 0x80) >> 7) {       case 0:               retval.OrbitalLocation += " West";               break;       case 1:               retval.OrbitalLocation += " East";               break;    }    switch ((buffer[8] & 0x60) >> 5) {       case 0:               retval.Polarity = "h";               break;       case 1:               retval.Polarity = "v";               break;       case 2:               retval.Polarity = "l";               break;       case 3:               retval.Polarity = "r";               break;    }    switch (buffer[8] & 0x1F) {    case 0:  // Some SAT Providers use this for QPSK for some reason             // Bell ExpressVu is an example    case 1:            retval.Modulation = "qpsk";        break;    case 2:            retval.Modulation = "qpsk_8";        break;    case 3:            retval.Modulation = "qam_16";        break;    default:        retval.Modulation = "auto";    }    QString SymbolRateTemp=QString("%1%2%3%4%5%6%700")             .arg((buffer[9] & 0xF0) >> 4)             .arg( buffer[9] & 0x0F)             .arg((buffer[10] & 0xF0) >> 4)             .arg( buffer[10] & 0x0F)             .arg((buffer[11] & 0xF0) >> 4)             .arg( buffer[11] & 0x0F)             .arg((buffer[12] & 0xF0) >> 4);    retval.SymbolRate = SymbolRateTemp.toInt();    switch (buffer[12] & 0x0F)    {    case 1:        retval.FEC_Inner = "1/2";        break;    case 2:        retval.FEC_Inner = "2/3";        break;    case 3:        retval.FEC_Inner = "3/4";        break;    case 4:        retval.FEC_Inner = "5/6";        break;    case 5:        retval.FEC_Inner = "7/8";        break;    case 6:        retval.FEC_Inner = "8/9";        break;    case 0x0F:        retval.FEC_Inner = "none";        break;    default:        retval.FEC_Inner = "auto";    }    return retval;}// Descriptor 0x44 - Cable Delivery System - NITTransportObject SIParser::ParseDescriptorCableDeliverySystem(uint8_t* buffer, int size){     (void) size;     TransportObject retval;     retval.Type = QString("DVB-C");     QString FrequencyTemp = QString("%1%2%3%4%5%6%7%800")             .arg((buffer[2] & 0xF0) >> 4)             .arg( buffer[2] & 0x0F)             .arg((buffer[3] & 0xF0) >> 4)             .arg( buffer[3] & 0x0F)             .arg((buffer[4] & 0xF0) >> 4)             .arg( buffer[4] & 0x0F)             .arg((buffer[5] & 0xF0) >> 4)             .arg( buffer[5] & 0x0F);     // TODO: Use real BCD conversion on Frequency     retval.Frequency=FrequencyTemp.toInt();     switch (buffer[7] & 0x0F) {         case 1:                 retval.FEC_Outer = "None";                 break;         case 2:                 retval.FEC_Outer = "RS(204/188)";                 break;         default:                 retval.FEC_Outer = "unknown";                 break;     }     switch (buffer[8]) {         case 1:                 retval.Modulation = "qam_16";                 break;         case 2:                 retval.Modulation = "qam_32";                 break;         case 3:                 retval.Modulation = "qam_64";                 break;         case 4:                 retval.Modulation = "qam_128";                 break;         case 5:                 retval.Modulation = "qam_256";                 break;         default:                 retval.Modulation = "auto";                 break;     }     QString SymbolRateTemp=QString("%1%2%3%4%5%6%700")              .arg((buffer[9] & 0xF0) >> 4)              .arg( buffer[9] & 0x0F)              .arg((buffer[10] & 0xF0) >> 4)              .arg( buffer[10] & 0x0F)              .arg((buffer[11] & 0xF0) >> 4)              .arg( buffer[11] & 0x0F)              .arg((buffer[12] & 0xF0) >> 4);     retval.SymbolRate = SymbolRateTemp.toInt();     switch (buffer[12] & 0x0F) {         case 1:                 retval.FEC_Inner = "1/2";                 break;         case 2:                 retval.FEC_Inner = "2/3";                 break;         case 3:                 retval.FEC_Inner = "3/4";                 break;         case 4:                 retval.FEC_Inner = "5/6";                 break;         case 5:                 retval.FEC_Inner = "7/8";                 break;         case 6:                 retval.FEC_Inner = "8/9";                 break;         case 0x0F:                 retval.FEC_Inner = "none";                 break;         default:                 retval.FEC_Inner = "auto";                 break;     }     return retval;}/* *  DVB Descriptor 0x54 - Process Content Descriptor - EIT */QString SIParser::ProcessContentDescriptor(uint8_t *buf,int size){// TODO: Add all types, possibly just lookup from a big array that is an include file?    (void) size;    uint8_t content = buf[2];    if (content)        return m_mapCategories[content];    else        return QString();}/* *  DVB Descriptor 0x4D - Short Event Descriptor - EIT */void SIParser::ProcessShortEventDescriptor(uint8_t *buf,int size,Event& e){// TODO: Test lower loop    (void) size;    int event_name_len = buf[5] & 0xFF;    int text_char_len = buf[event_name_len + 6];;    e.Event_Name = DecodeText(buf + 6, event_name_len);    e.Event_Subtitle = DecodeText(buf + event_name_len + 7, text_char_len);    if(e.Event_Subtitle == e.Event_Name)        e.Event_Subtitle= "";}/* *  DVB Descriptor 0x4E - Extended Event - EIT */void SIParser::ProcessExtendedEventDescriptor(uint8_t *buf,int size,Event &e){   (void) size;// TODO: Nothing, Complete    if (buf[6] != 0)      return;    int text_length = buf[7] & 0xFF;    e.Description = DecodeText(buf + 8, text_length);}QString SIParser::ParseDescriptorLanguage(uint8_t* buffer, int size){    (void) size;    return QString::fromLatin1((const char*) buffer + 2, 3);}void SIParser::ProcessComponentDescriptor(uint8_t *buf,int size,Event& e){    SIPARSER(QString("Component Descriptor"));   (void)size;   switch (buf[2] & 0x0f)   {   case 0x1: //Video       if ((buf[3]>=0x9) && (buf[3]<=0x10))           e.HDTV = true;       break;   case 0x2: //Audio       if ((buf[3]=0x3) || (buf[3]=0x5))           e.Stereo = true;       break;   case 0x3: //Teletext/Subtitles       switch (buf[3])       {       case 0x1:       case 0x3:       case 0x10 ... 0x13:       case 0x20 ... 0x23:            e.SubTitled = true;       }       break;   }}void SIParser::ParseDescriptorTeletext(uint8_t* buffer, int size){    SIPARSER(QString("Teletext Descriptor"));    buffer += 2;    while (size >= 5)    {        QString language = QString::fromLatin1((const char*) buffer, 3);        uint8_t teletext_type = buffer[3] >> 3;        uint8_t teletext_magazine_number = buffer[3] & 0x07;        uint8_t teletext_page_number = buffer[4];        SIPARSER(QString("  lang: %1, type: %2, mag: %3, page: %4")                    .arg(language)                    .arg(teletext_type)                    .arg(teletext_magazine_number)                    .arg(teletext_page_number)                );        buffer += 5;        size -= 5;    }}void SIParser::ParseDescriptorSubtitling(uint8_t* buffer, int size){    SIPARSER(QString("Subtitling Descriptor"));    buffer += 2;    while (size >= 8)    {        QString language = QString::fromLatin1((const char*) buffer, 3);        uint8_t subtitling_type = buffer[3];        uint16_t composition_page_id = (buffer[4] << 8) | buffer[5];        uint16_t ancillary_page_id = (buffer[6] << 8) | buffer[7];        SIPARSER(QString("  lang: %1, type: %2, comp: %3, anc: %4")                    .arg(language)                    .arg(subtitling_type)                    .arg(composition_page_id)                    .arg(ancillary_page_id)                );        buffer += 8;        size -= 8;    }}// --- BEGIN: changes by PJ ---/* *  DVB Descriptor 0x13 - Carousel Identifier Descriptor */void SIParser::ParseDescriptorCarouselIdentifier(uint8_t* buffer, int size, uint16_t pid) {    (void) size;    //uint8_t descriptor_tag    = buffer[0];    //uint8_t descriptor_length = buffer[1];    uint32_t carousel_id = (buffer[2] << 24) | (buffer[3] << 16) | (buffer[4] << 8) | buffer[5];        // Let's start receiving sections from this PID    SIPARSER("Carousel identifier descriptor found; the DSMCC handler will request this PID");    Table[DSMCC]->Request(pid);}/* *  DVB Descriptor 0x52 - Stream Identifier Descriptor */void SIParser::ParseDescriptorStreamIdentifier(uint8_t* buffer, int size, uint16_t pid) {    (void) size;    //uint8_t descriptor_tag    = buffer[0];    //uint8_t descriptor_length = buffer[1];    component_tags[pid] = buffer[2];    stream_pids[buffer[2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -