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

📄 dvb_descriptor.c

📁 DVB MPEG2 system stream 分析, 包含 各個talbe(EIT,PMT,PAT,SDT),以及video,audio. 對於學習數字電視有很大幫助.
💻 C
📖 第 1 页 / 共 5 页
字号:
 d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; len = d.descriptor_length; b  += 2;  indent (+1); while (len > 0) {    strncpy (d2.country_code, b, 3);	    d2.country_region_id	 = getBits (b, 0, 24,  6);    d2.reserved_1		 = getBits (b, 0, 30,  1);    d2.local_time_offset_polarity = getBits (b, 0, 31,  1);    d2.local_time_offset	 = getBits (b, 0, 32, 16);    d2.time_of_change_MJD	 = getBits (b, 0, 48, 16);    d2.time_of_change_UTC	 = getBits (b, 0, 64, 24);    d2.next_time_offset		 = getBits (b, 0, 88, 16);    len -= 13;    b   += 13;    out_nl    (4,"Country_code:  %3.3s", d2.country_code);    out_SB_NL (4,"Country_region_ID: ",d2.country_region_id);    out_SB_NL (6,"reserved_1: ",d2.reserved_1);    out_nl    (4,"local_time_offset_polarity: %u  (= %s to UTC)",	d2.local_time_offset_polarity,	(d2.local_time_offset_polarity) ? "minus" : "plus");    out_nl    (4,"Local_time_offset: %02x:%02x",	d2.local_time_offset >> 8, d2.local_time_offset & 0xFF);    out       (4,"Time_of_change: ");      print_time40 (4, d2.time_of_change_MJD,d2.time_of_change_UTC);      out_NL (4);    out_nl    (4,"Next_time_offset: %02x:%02x ",	d2.next_time_offset >> 8, d2.next_time_offset & 0xFF);    out_NL(4); } indent (-1);}/*  0x59  Subtitling  descriptor   ETSI EN 300 468     6.2.xx*/void descriptorDVB_Subtitling  (u_char *b){ typedef struct  _descSubTitling {    u_int      descriptor_tag;    u_int      descriptor_length;		 } descSubTitling; typedef struct  _descSubTitling2 {    u_char     ISO_639_language_code[4];    u_int      subtitling_type;    u_int      composition_page_id;    u_int      ancillary_page_id; } descSubTitling2; descSubTitling   d; descSubTitling2  d2; int              len; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; len = d.descriptor_length; b  += 2; indent (+1); while ( len > 0) {    getISO639_3 (d2.ISO_639_language_code, b);	    d2.subtitling_type		= getBits (b,0,24, 8);    d2.composition_page_id	= getBits (b,0,32,16);    d2.ancillary_page_id	= getBits (b,0,48,16);    b   += 8;    len -= 8;    out_nl  (4,"  ISO639_language_code:  %3.3s", d2.ISO_639_language_code);    out_S2B_NL (4,"Subtitling_type: ", d2.subtitling_type,	dvbstrStreamContent_Component_TYPE (	    (0x03 << 8) | d2.subtitling_type));    out_SW_NL (4,"Composition_page_id: ",d2.composition_page_id);    out_SW_NL (4,"Ancillary_page_id: ",d2.ancillary_page_id);    out_NL (4); } indent (-1);}/*  0x5A TerrestDelivSys  descriptor  (Terrestrial delivery system descriptor)*/void descriptorDVB_TerrestDelivSys (u_char *b){ /* ETSI 300 468    6.2.xx */ typedef struct  _descCDS {    u_int      descriptor_tag;    u_int      descriptor_length;		    u_long     centre_frequency;    u_int      bandwidth;    u_int      reserved_1;    u_int      constellation;    u_long     hierarchy_information;    u_int      code_rate_HP_stream;    u_int      code_rate_LP_stream;    u_int      guard_interval;    u_int      transmission_mode;     u_int      other_frequency_flag;    u_int      reserved_2; } descTDS; descTDS  d; //int      i; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; d.centre_frequency		 = getBits (b, 0, 16, 32); d.bandwidth			 = getBits (b, 0, 48, 3); d.reserved_1			 = getBits (b, 0, 51, 5); d.constellation		 = getBits (b, 0, 56, 2); d.hierarchy_information	 = getBits (b, 0, 58, 3); d.code_rate_HP_stream		 = getBits (b, 0, 61, 3); d.code_rate_LP_stream		 = getBits (b, 0, 64, 3); d.guard_interval		 = getBits (b, 0, 67, 2); d.transmission_mode		 = getBits (b, 0, 69, 2); d.other_frequency_flag		 = getBits (b, 0, 71, 1); d.reserved_2			 = getBits (b, 0, 72, 32);  // frequency is in 10 Hz steps == * 10 out_nl (4,"Center frequency: 0x%08x (= %lu.%03lu kHz)",d.centre_frequency,	 d.centre_frequency / 100, d.centre_frequency % 100 ); out_S2B_NL (4,"Bandwidth: ",d.bandwidth,	 dvbstrTerrBandwidth_SCHEME (d.bandwidth)); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_S2B_NL (4,"Constellation: ",d.constellation,	 dvbstrTerrConstellation_FLAG(d.constellation)); out_S2B_NL (4,"Hierarchy information: ",d.hierarchy_information,	 dvbstrTerrHierarchy_FLAG(d.hierarchy_information)); out_S2B_NL (4,"Code_rate_HP_stream: ",d.code_rate_HP_stream,	 dvbstrTerrCodeRate_FLAG(d.code_rate_HP_stream)); out_S2B_NL (4,"Code_rate_LP_stream: ",d.code_rate_LP_stream,	 dvbstrTerrCodeRate_FLAG(d.code_rate_LP_stream)); out_S2B_NL (4,"Guard_interval: ",d.guard_interval,	 dvbstrTerrGuardInterval_FLAG(d.guard_interval)); out_S2B_NL (4,"Transmission_mode: ",d.transmission_mode,	 dvbstrTerrTransmissionMode_FLAG(d.transmission_mode)); out_SB_NL (4,"Other_frequency_flag: ",d.other_frequency_flag); out_SL_NL (6,"reserved_2: ",d.reserved_2);}/*  0x5B  Multilingual Network Name  descriptor   ETSI EN 300 468     6.2.xx*/void descriptorDVB_MultilingNetworkName (u_char *b){ typedef struct  _descMultiNetName {    u_int      descriptor_tag;    u_int      descriptor_length;		    //  N .. List2 } descMultiNetName; typedef struct  _descMultiNetName2 {    u_char     ISO639_2_language_code[4];    u_int      network_name_length;    //  N2 ..  char } descMultiNetName2; descMultiNetName   d; descMultiNetName2  d2; int                len1; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; b += 2; len1 = d.descriptor_length; indent (+1); while (len1 > 0 ) {    getISO639_3 (d2.ISO639_2_language_code, b);    d2.network_name_length	 = getBits (b, 0, 24, 8);    out_nl    (4,"ISO639_2_language_code:  %3.3s", d2.ISO639_2_language_code);    out_SB_NL (5,"Network_name_length: ",d2.network_name_length);    print_text_468A (4, "Network_name: ", b+4,d2.network_name_length);    len1 -= (4 + d2.network_name_length);    b    +=  4 + d2.network_name_length;    out_NL (4); } indent (-1);}/*  0x5C  Multilingual Bouquet Name  descriptor   ETSI EN 300 468     6.2.xx*/void descriptorDVB_MultilingBouquetName (u_char *b){ typedef struct  _descMultiBouqName {    u_int      descriptor_tag;    u_int      descriptor_length;		    //  N .. List2 } descMultiBouqName; typedef struct  _descMultiBouqName2 {    u_char     ISO639_2_language_code[4];    u_int      bouquet_name_length;    //  N2 ..  char } descMultiBouqName2; descMultiBouqName   d; descMultiBouqName2  d2; int                 len1; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; b += 2; len1 = d.descriptor_length; indent (+1); while (len1 > 0 ) {    getISO639_3 (d2.ISO639_2_language_code, b);    d2.bouquet_name_length	 = getBits (b, 0, 24, 8);    out_nl    (4,"ISO639_2_language_code:  %3.3s", d2.ISO639_2_language_code);    out_SB_NL (5,"Bouquet_name_length: ",d2.bouquet_name_length);    print_text_468A (4, "Bouquet_name: ", b+4,d2.bouquet_name_length);    len1 -= (4 + d2.bouquet_name_length);    b    +=  4 + d2.bouquet_name_length;    out_NL (4); } indent (-1);}/*  0x5D  Multilingual Service Name  descriptor   ETSI EN 300 468     6.2.xx*/void descriptorDVB_MultilingServiceName (u_char *b){ typedef struct  _descMultiServiceName {    u_int      descriptor_tag;    u_int      descriptor_length;		    //  N .. List2 } descMultiServiceName; typedef struct  _descMultiServiceName2 {    u_char     ISO639_2_language_code[4];    u_int      service_provider_name_length;    //  N2 ..  char    u_int      service_name_length;    //  N3 ..  char } descMultiServiceName2; descMultiServiceName   d; descMultiServiceName2  d2; int                    len1; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; b += 2; len1 = d.descriptor_length; indent (+1); while (len1 > 0 ) {    getISO639_3 (d2.ISO639_2_language_code, b);    d2.service_provider_name_length	 = getBits (b, 0, 24, 8);    out_nl    (4,"ISO639_2_language_code:  %3.3s", d2.ISO639_2_language_code);    out_SB_NL (5,"Service_provider_name_length: ",d2.service_provider_name_length);    print_text_468A (4, "Service_provider_name: ", b+4,d2.service_provider_name_length);    len1 -= (4 + d2.service_provider_name_length);    b    +=  4 + d2.service_provider_name_length;    d2.service_name_length	 = getBits (b, 0, 24, 8);    out_SB_NL (5,"Service_name_length: ",d2.service_name_length);    print_text_468A (4, "Service_name: ", b+4,d2.service_name_length);    len1 -= (4 + d2.service_name_length);    b    +=  4 + d2.service_name_length;    out_NL (4); } indent (-1);}/*  0x5E  Multilingual Component  descriptor   ETSI EN 300 468     6.2.xx*/void descriptorDVB_MultilingComponent (u_char *b){ typedef struct  _descMultiComponent {    u_int      descriptor_tag;    u_int      descriptor_length;		    u_int      component_tag;    //  N .. List2 } descMultiComponent; typedef struct  _descMultiComponent2 {    u_char     ISO639_2_language_code[4];    u_int      text_description_length;    //  N2 ..  char } descMultiComponent2; descMultiComponent   d; descMultiComponent2  d2; int                  len1; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; d.component_tag 		 = b[2]; out_SB_NL (4,"Component_tag: ",d.component_tag); b += 3; len1 = d.descriptor_length + 1; indent (+1); while (len1 > 0 ) {    getISO639_3 (d2.ISO639_2_language_code, b);    d2.text_description_length	 = getBits (b, 0, 24, 8);    out_nl    (4,"ISO639_2_language_code:  %3.3s", d2.ISO639_2_language_code);    out_SB_NL (5,"Text_description_length: ",d2.text_description_length);    print_text_468A (4, "Text_description: ", b+4,d2.text_description_length);    len1 -= (4 + d2.text_description_length);    b    +=  4 + d2.text_description_length;    out_NL (4); } indent (-1);}/*  0x5F  Private Data Specifier  descriptor   ETSI EN 300 468     6.2.xx*/void descriptorDVB_PrivateDataSpecifier (u_char *b){ typedef struct  _descPrivDataSpec {    u_int      descriptor_tag;    u_int      descriptor_length;		    u_long     private_data_specifier; } descPrivDataSpec; descPrivDataSpec d; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; d.private_data_specifier	 = getBits (b, 0, 16, 32); out_S2L_NL (4,"PrivateDataSpecifier: ",d.private_data_specifier,	dvbstrPrivateDataSpecifier_ID( d.private_data_specifier) );}/*  0x60  Service Move  descriptor   ETSI EN 300 468     6.2.xx*/void descriptorDVB_ServiceMove  (u_char *b){ typedef struct  _descServMove {    u_int      descriptor_tag;    u_int      descriptor_length;		    u_int      new_original_network_id;    u_int      new_transport_stream_id;    u_int      new_service_id; } descServMove; descServMove    d; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; d.new_original_network_id	 = getBits (b, 0, 16, 16); d.new_transport_stream_id	 = getBits (b, 0, 32, 16); d.new_service_id		 = getBits (b, 0, 48, 16);  out_S2W_NL (4,"New_original_network_ID: ",d.new_original_network_id,	dvbstrOriginalNetwork_ID(d.new_original_network_id));  out_SW_NL  (4,"New_transport_stream_ID: ",d.new_transport_stream_id);  out_SW_NL (4,"Service_ID: ",d.new_service_id);}/*  0x61  Short Smoothing Buffer  descriptor   ETSI EN 300 468     6.2.xx*/void descriptorDVB_ShortSmoothingBuffer  (u_char *b){ typedef struct  _descSSBuf {    u_int      descriptor_tag;    u_int      descriptor_length;		    u_int      sb_size;    u_int      sb_leak_rate; } descSSBuf; descSSBuf  d; d.descriptor_tag		 = b[0]; d.descriptor_length       	 = b[1]; d.sb_size			 = getBits (b, 0, 16, 2); d.sb_leak_rate			 = getBits (b, 0, 16, 6);  out_S2B_NL (4,"sb_size: ", d.sb_size,	dvbstrShortSmoothingBufSize_TYPE (d.sb_size) ); out_S2B_NL (4,"sb_leak_rate: ", d.sb_leak_rate,	dvbstrShortSmoothingBufLeakRate_TYPE (d.sb_leak_rate) ); print_databytes (6,"reserved:", b+3,d.descriptor_length-1);}/*  0x62  Frequency List descriptor   ETSI EN 300 468     6.2.xx*/void descriptorDVB_FrequencyList  (u_char *b){ typedef struct  _descFreqList {    u_int      descriptor_tag;    u_int      descriptor_length;		    u_int      reserved_1;    u_int      coding_type; } descFreqList; typedef struct  _descFreqList2 {    u_long     centre_frequency; } descFreqList2;

⌨️ 快捷键说明

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