📄 dvb_descriptor.c
字号:
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) ETSI 300 468 6.2.xx -- 2004-08-28 update auf EN 300 468 1.6.1 (routine rewritten)*/void descriptorDVB_TerrestDelivSys (u_char *b){ u_long cfreq; // tag = b[0]; // len = b[1]; cfreq = getBits (b, 0, 16, 32); // frequency is in 10 Hz steps == * 10 out_nl (4,"Center frequency: 0x%08x (= %lu.%03lu kHz)",cfreq, cfreq / 100, cfreq % 100 ); outBit_S2x_NL (4,"Bandwidth: ", b, 48, 3, (char *(*)(u_long)) dvbstrTerrBandwidth_SCHEME ); outBit_S2x_NL (4,"priority: ", b, 51, 1, (char *(*)(u_long)) dvbstrTerrPriority ); outBit_S2x_NL (4,"Time_Slicing_indicator: ", b, 52, 1, (char *(*)(u_long)) dvbstrTerrTimeSlicingIndicator ); outBit_S2x_NL (4,"MPE-FEC_indicator: ", b, 53, 1, (char *(*)(u_long)) dvbstrTerrMPE_FEC_Indicator ); outBit_Sx_NL (6,"reserved_1: ", b, 54, 2); outBit_S2x_NL (4,"Constellation: ", b, 56, 2, (char *(*)(u_long)) dvbstrTerrConstellation_FLAG ); outBit_S2x_NL (4,"Hierarchy information: ", b, 58, 3, (char *(*)(u_long)) dvbstrTerrHierarchy_FLAG ); outBit_S2x_NL (4,"Code_rate_HP_stream: ", b, 61, 3, (char *(*)(u_long)) dvbstrTerrCodeRate_FLAG ); outBit_S2x_NL (4,"Code_rate_LP_stream: ", b, 64, 3, (char *(*)(u_long)) dvbstrTerrCodeRate_FLAG ); outBit_S2x_NL (4,"Guard_interval: ", b, 67, 2, (char *(*)(u_long)) dvbstrTerrGuardInterval_FLAG ); outBit_S2x_NL (4,"Transmission_mode: ", b, 69, 2, (char *(*)(u_long)) dvbstrTerrTransmissionMode_FLAG ); outBit_Sx_NL (4,"Other_frequency_flag: ", b, 71, 1); outBit_Sx_NL (6,"reserved_2: ", b, 72, 32);}/* 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 -- 2004-08-22 Bugfix, rewrite*/void descriptorDVB_MultilingServiceName (u_char *b){ int len; // tag = b[0]; len = b[1]; b += 2; indent (+1); while (len > 0 ) { int len2; char ISO639_2_language_code[4]; getISO639_3 (ISO639_2_language_code, b); out_nl (4,"ISO639_2_language_code: %3.3s", ISO639_2_language_code); len2 = outBit_Sx_NL (5,"Service_provider_name_length: ", b, 24, 8); print_text_468A (4, "Service_provider_name: ", b+4,len2); b += 4 + len2; len -= 4 + len2; len2 = outBit_Sx_NL (5,"Service_name_length: ", b, 0, 8); print_text_468A (4, "Service_name: ", b+1,len2); b += 1 + len2; len -= 1 + len2; 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; descFreqList d; descFreqList2 d2; int len; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.reserved_1 = getBits (b, 0, 16, 6); d.coding_type = getBits (b, 0, 22, 2); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_S2B_NL (4,"coding_type: ",d.coding_type, dvbstrDelivSysCoding_TYPE(d.coding_type)); b += 3; len = d.descriptor_length - 1; indent (+1); while (len > 0) { d2.centre_frequency = getBits (b, 0, 0, 32); out (4,"Centre_frequency: %08lx ",d2.centre_frequency); switch (d.coding_type) { case 0x01: out_nl (4,"(= %3lx.%05lx GHz)", d2.centre_frequency >> 20, d2.centre_frequency & 0x000FFFFF ); break; case 0x02: out_nl (4,"(= %3lx.%04lx MHz)", d2.centre_frequency >> 16, d2.centre_frequency & 0x0000FFFF ); break; case 0x03: // frequency is in 10 Hz steps == * 10 out_nl (4,"(= %lu.%03lu kHz)", d2.centre_frequency / 100, d2.centre_frequency % 100 ); break; } len -= 4; b += 4; } indent (-1);}/* 0x63 Partial Transport Stream Descriptor ETSI EN 300 468 6.2.xx*/void descriptorDVB_PartialTransportStream (u_char *b){ typedef struct _descPartTranspStream { u_int descriptor_tag; u_int descriptor_length; u_int reserved_1; u_long peak_rate; u_int reserved_2; u_long minimum_overall_smoothing_rate; u_int reserved_3; u_int maximum_overall_smoothing_buffer; } descPartTranspStream; descPartTranspStream d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.reserved_1 = getBits (b, 0, 16, 2); d.peak_rate = getBits (b, 0, 18, 22); d.reserved_2 = getBits (b, 0, 40, 2); d.minimum_overall_smoothing_rate= getBits (b, 0, 42, 22); d.reserved_3 = getBits (b, 0, 64, 2); d.maximum_overall_smoothing_buffer= getBits (b, 0, 66, 14); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_nl (4,"peak_rate: 0x%06lx (= %lu bits/sec)", d.peak_rate,d.peak_rate/400); out_SB_NL (6,"reserved_2: ",d.reserved_2); out_nl (4,"minimum_overall_smoothing_rate: 0x%06lx (= %lu bits/sec)", d.minimum_overall_smoothing_rate, d.minimum_overall_smoothing_rate/400); out_SB_NL (6,"reserved_3: ",d.reserved_3); out_nl (4,"maximum_overall_smoothing_buffer: 0x%04x (= %lu bits/sec)", d.maximum_overall_smoothing_buffer, d.maximum_overall_smoothing_buffer/400);}/* 0x64 DataBroadcast descriptor ETSI EN 300 468 6.2.xx*/void descriptorDVB_DataBroadcast (u_char *b)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -