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

📄 dvbsect.c

📁 ST5100 driver files for ST chipset
💻 C
📖 第 1 页 / 共 2 页
字号:
        U16 P_Info_Length;
        U16 ES_Info_Length;

        P_Info_Length  = extract(&Buffer_p[10], LENGTH_MASK);
        (void)GetDescriptorData( &Buffer_p[PMT_HEAD_SIZE], P_Info_Length, ECM_DESCRIPTOR );

        DISPLAY(("---- PMT - Transport Id %5d ----\n", Header.StreamId));
        DISPLAY(("  %-20s  Pid %5d  ECM %04X\n",
                 "Pcr",
                 extract(&Buffer_p[ 8], PID_MASK),
                 Desc.Info.ECMPid ));

        for ( i = PMT_HEAD_SIZE + P_Info_Length;
              i < (Header.SectionLength - CRC_SIZE);
              i += (PMT_DATA_SIZE + ES_Info_Length))
        {
            ES_Info_Length = extract(&Buffer_p[i+3], LENGTH_MASK);
            (void)GetDescriptorData( &Buffer_p[i+PMT_DATA_SIZE], ES_Info_Length, 0 );
            DISPLAY(("  %-20s  Pid %5d  ECM %04X\n",
                     StreamTypeNameLookup(Buffer_p[i]),
                     extract(&Buffer_p[i+1], PID_MASK),
                     Desc.Info.ECMPid ));
        }
    }
    break;

    case NIT_TABLE_ID: /* Network Information Table */
    {
        U16 n_desc_length;
        U16 t_loop_length;
        U16 t_desc_length;

        n_desc_length = extract(&Buffer_p[8], LENGTH_MASK);
        t_desc_length = 0;

        /* Get Network name from descriptor */
        if ( Buffer_p[NIT_HEAD_SIZE] == NETWORK_NAME_DESCRIPTOR )
        {
            DISPLAY(("Name \'%-*.*s\'",
                     Buffer_p[NIT_HEAD_SIZE+1], Buffer_p[NIT_HEAD_SIZE+1],
                     &Buffer_p[NIT_HEAD_SIZE+2] ));
        }

        if ( Header.SectionNumber == 0 )
        {
            DISPLAY(("---- NIT - Id %5d ----\n", Header.StreamId ));
            DISPLAY(("TS_Id freq (kHz) Poln   FEC SRate\n"));
            DISPLAY(("----- ---------- -----  --- -----\n"));
        }

        t_loop_length = extract(&Buffer_p[NIT_HEAD_SIZE+n_desc_length], LENGTH_MASK);
        for ( i = NIT_HEAD_SIZE + n_desc_length + 2;
            i < t_loop_length;
            i += NIT_DATA_SIZE + t_desc_length )
        {
            U32 Frequency;
            STTUNER_Polarization_t Polarization;
            STTUNER_FECRate_t      FECRates;
            U16 SymbolRate;

            DISPLAY(("%5d ",  extract(&Buffer_p[i], PROG_MASK)));

            Frequency  = extractBCD( &Buffer_p[i+ 8] );
            Frequency *= 100;
            Frequency += extractBCD( &Buffer_p[i+ 9] );
            Frequency *= 100;
            Frequency += extractBCD( &Buffer_p[i+10] );
            Frequency *= 100;
            Frequency += extractBCD( &Buffer_p[i+11] );
            Frequency *= 10;
            DISPLAY(("%10d ", Frequency ));

            switch ( ( Buffer_p[i+14] & 0x60 ) >> 5 )
            {
                case 0x0:
                    Polarization = STTUNER_PLR_HORIZONTAL;
                    break;
                case 0x1:
                    Polarization = STTUNER_PLR_VERTICAL;
                    break;
                default:
                    Polarization = STTUNER_PLR_ALL;
                    break;
            }
#if 0 // EXT_SHARE
           DISPLAY(("%-6.6s ", PolarityToStr( Polarization )));
#endif
            /* convert DVB format to STTUNER format */
            switch ( Buffer_p[i+18] & 0x0f )
            {
                case 0x1:
                    FECRates = STTUNER_FEC_1_2;
                    break;
                case 0x2:
                    FECRates = STTUNER_FEC_2_3;
                    break;
                case 0x3:
                    FECRates = STTUNER_FEC_3_4;
                    break;
                case 0x4:
                    FECRates = STTUNER_FEC_5_6;
                    break;
                case 0x5:
                    FECRates = STTUNER_FEC_6_7;
                    break;
                default:
                    FECRates = STTUNER_FEC_ALL;
                    break;
            }
#if 0 // EXT_SHARE
            DISPLAY(("%s ", FecToStr(FECRates) ));
#endif
            /* symbol rate in M/Symbols / 1000 */
            SymbolRate  = extractBCD( &Buffer_p[i+15] );
            SymbolRate *= 100;
            SymbolRate += extractBCD( &Buffer_p[i+16] );
            SymbolRate *= 100;
            DISPLAY(("%5d\n", SymbolRate ));

            t_desc_length = extract(&Buffer_p[i+4], LENGTH_MASK);
        }
    }
    break;

    case SDT_TABLE_ID: /* Service Descriptor Table */
        if ( Header.SectionNumber == 0 )
        {
            DISPLAY(("---- SDT - Transport Id %d ----\n", Header.StreamId ));
            DISPLAY(("prog#  status  CA   type            Provider name       service name\n"));
            DISPLAY(("-----  ------  ---- --------------  ------------------  --------------------\n"));
        }
	
        for ( i = SDT_HEAD_SIZE, j=1;
            i < (Header.SectionLength - CRC_SIZE);
            i += SDT_DATA_SIZE + DescLoopLength )
        {
            DISPLAY(("%5d  ", extract(&Buffer_p[i], PROG_MASK)));
            /* schedule_flag */
            /* present_following_flag */
            DISPLAY(("%-7.7s ", StatusTypeNames[LIMITED_TO_(5,((Buffer_p[i+3] & 0xE0 ) >> 5),0)] ));
            DISPLAY(("%-4.4s ", ((Buffer_p[i+3] & 0x10 ) >> 4==0) ? "free":"lock"));

            /*
            **  descriptor data
            */
            DescLoopLength = extract(&Buffer_p[i+3], LENGTH_MASK);

            (void)GetDescriptorData( &Buffer_p[i+SDT_DATA_SIZE],
                               DescLoopLength,
                               SERVICE_DESCRIPTOR );

            if ( Desc.Tag == SERVICE_DESCRIPTOR )
            {
                DISPLAY(("%-15s ", ServiceTypeNames[LIMITED_TO_(11,Desc.Info.Service.Type,0)] ));
                if ( Desc.Info.Service.ProviderLen > 0 )
                {
                    DISPLAY(( "%-20.*s", Desc.Info.Service.ProviderLen,
                                  Desc.Info.Service.ProviderName_p ));
                }
                else
                    DISPLAY(("%-20.20s", "Unknown"));

                if ( Desc.Info.Service.ServiceLen > 0 )
                {                                                                                                                                               
                   DISPLAY(( "%-20.*s", Desc.Info.Service.ServiceLen,
                                  Desc.Info.Service.ServiceName_p ));
	     
		     for(k=0; k < ((MAX_NAME_LEN < Desc.Info.Service.ServiceLen) ? MAX_NAME_LEN : Desc.Info.Service.ServiceLen); k++)
		     {
		     		ChannelInfo[j].ChannelName[k]=Desc.Info.Service.ServiceName_p[k];
		     }
		     ChannelInfo[j].ChannelName[k]='\0';
	     
		     j++;                                                         
                }
                else
                {
                    DISPLAY(("%-20.20s", "Unknown"));
                 }            
            }
            DISPLAY(("\n"));
        }
        break;

    case EIT_TABLE_ID: /* Event Information Table */
        {         
            U16 Year, Month, Day;

			DescLoopLength = 0;

            if ( Header.SectionNumber == 0 )
            {
                DISPLAY(("---- EIT - Id %d ----\n", Header.StreamId ));
                DISPLAY(("EvId Start Date/Time     Duration Status  CA\n"));
                DISPLAY(("---- ------------------- -------- ------- ----\n"));
            }
            /*
              STTBX_Print(("Transport %d, Network %d, SegLast %d, LastTable %d\n",
                  extract(&Buffer_p[8], PROG_MASK),
                  extract(&Buffer_p[10], PROG_MASK),
                  Buffer_p[12], Buffer_p[13] ));
            */

            for ( i = EIT_HEAD_SIZE;
                  i < (Header.SectionLength - CRC_SIZE);
                  i += EIT_DATA_SIZE + DescLoopLength )
            {
                /*
                **  descriptor data
                */
                MJD2YMD( extract(&Buffer_p[i+2],PROG_MASK), &Year, &Month, &Day );
                DISPLAY(("%4x %04d/%02d/%02d %02x:%02x:%02x %02x:%02x:%02x %-7.7s %-4.4s\t",
                             extract(&Buffer_p[i], PROG_MASK),
                             Year+1900, Month, Day,
                             Buffer_p[i+4],Buffer_p[i+5],Buffer_p[i+6],
                             Buffer_p[i+7],Buffer_p[i+8],Buffer_p[i+9],
                             StatusTypeNames[LIMITED_TO_(5,((Buffer_p[i+10] & 0xE0 ) >> 5),0)],
                             ((Buffer_p[i+10] & 0x10 ) >> 4==0) ? "free":"lock" ));

                DescLoopLength = extract(&Buffer_p[i+10], LENGTH_MASK);
                (void)GetDescriptorData( &Buffer_p[i+EIT_DATA_SIZE],
                                   DescLoopLength, SHORT_EVENT_DESCRIPTOR );

                DISPLAY(("%-*.*s\n", Desc.Info.ShortEvent.NameLen, Desc.Info.ShortEvent.NameLen, Desc.Info.ShortEvent.Name_p ));
                DISPLAY(("%-*.*s\n", Desc.Info.ShortEvent.TextLen, Desc.Info.ShortEvent.TextLen, Desc.Info.ShortEvent.Text_p));

                DISPLAY(("%d,%d,%d\n", Desc.Info.ShortEvent.NameLen, Desc.Info.ShortEvent.TextLen,
                             DescLoopLength ));
            }
        }
        break;

    default:
        break;
    }
}

/*-------------------------------------------------------------------------
 * Function : DVB_GetPids
 * Input    : 
 * Output   :
 * Return   : Error code
 * ----------------------------------------------------------------------*/
void DVB_GetPids( U8 *Buffer_p, LISTS_Channel_t *Channel_p)
{   
    SECTION_Header_t Header;
    U16 i;
    
    DVB_HeaderExtract(Buffer_p, &Header);
    if ( Header.TableId == PMT_TABLE_ID ) /* Program Map Table */
    {
        U16 P_Info_Length;
        U16 ES_Info_Length;
        
        P_Info_Length  = extract(&Buffer_p[10], LENGTH_MASK);
        (void)GetDescriptorData( &Buffer_p[PMT_HEAD_SIZE], P_Info_Length, ECM_DESCRIPTOR );
	
		Channel_p->PcrPid = extract(&Buffer_p[ 8], PID_MASK);
	
        for ( i = PMT_HEAD_SIZE + P_Info_Length;
              i < (Header.SectionLength - CRC_SIZE);
              i += (PMT_DATA_SIZE + ES_Info_Length))
        {
            ES_Info_Length = extract(&Buffer_p[i+3], LENGTH_MASK);
            (void)GetDescriptorData( &Buffer_p[i+PMT_DATA_SIZE], ES_Info_Length, 0 );
                  
            switch ( (LISTS_StreamType_t)Buffer_p[i] )
            {
	            case MP1V:
	            case MP2V:
						if (Channel_p->VideoPid == 0)  /* get first video PID */
						{
	                    	Channel_p->VideoPid = extract(&Buffer_p[i+1], PID_MASK);                 
						}
	                break;
	            case MP1A:
	            case MP2A:
	            case AC3:
	            case AAC:
						if (Channel_p->AudioPid == 0) /* get first audio PID */
						{
	                    	Channel_p->AudioType = (LISTS_StreamType_t)Buffer_p[i];
	                    	Channel_p->AudioPid  = extract(&Buffer_p[i+1], PID_MASK);
						}
	                break;
	            case PRIVATE_DATA:
	            		if (Channel_p->TtxPid == 0) /* get first ttx PID */
	            		{                 
	                    	Channel_p->TtxPid = extract(&Buffer_p[i+1], PID_MASK);
						}
	                break;  
	                
	            default:
	                break;    
            }
        }
    }
}


/* EOF --------------------------------------------------------------------- */

⌨️ 快捷键说明

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