📄 dvb_descriptor.c
字号:
d.component_type = getBits (b, 0, 24, 8); d.component_tag = getBits (b, 0, 32, 8); getISO639_3 (d.ISO639_2_language_code, b+5); out_SB_NL (6,"reserved: ",d.reserved_1); out_SB_NL (4,"stream_content: ",d.stream_content); out_SB_NL (4,"component_type: ",d.component_type); out_nl (4," == Content&Component: (= %s)", dvbstrStreamContent_Component_TYPE( (d.stream_content << 8) | d.component_type ) ); out_SB_NL (4,"component_tag: ",d.component_tag); out_nl (4,"ISO639_language_code: %3.3s", d.ISO639_2_language_code); print_text_468A (4, "component-description: ", b+8,d.descriptor_length - 6);}/* 0x51 Mosaic descriptor ETSI EN 300 468 6.2.xx*/void descriptorDVB_Mosaic (u_char *b){ typedef struct _descMosaic { u_int descriptor_tag; u_int descriptor_length; u_int mosaic_entry_point; u_int number_of_horizontal_elementary_cells; u_int reserved_1; u_int number_of_vertical_elementary_cells; // N desc Mosaic2 } descMosaic; typedef struct _descMosaic2 { u_int logical_cell_id; u_int reserved_1; u_int logical_cell_presentation_info; u_int elementary_cell_field_length; // N2 desc Mosaic3 u_int cell_linkage_info; // conditional data !! (cell_linkage_info) u_int bouquet_id; u_int original_network_id; u_int transport_stream_id; u_int service_id; u_int event_id; } descMosaic2; typedef struct _descMosaic3 { u_int reserved_1; u_int elementary_cell_id; } descMosaic3; descMosaic d; descMosaic2 d2; descMosaic3 d3; int len1,len2; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.mosaic_entry_point = getBits (b, 0, 16, 1); d.number_of_horizontal_elementary_cells = getBits (b, 0, 17, 3); d.reserved_1 = getBits (b, 0, 20, 1); d.number_of_vertical_elementary_cells = getBits (b, 0, 21, 3); out_SB_NL (4,"Mosaic_entry_point: ",d.mosaic_entry_point); out_nl (4,"Number_of_horizontal_elementary_cells: %u (= %d cells)", d.number_of_horizontal_elementary_cells, d.number_of_horizontal_elementary_cells + 1); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_nl (4," Number_of_vertical_elementary_cells: %u (= %d cells)", d.number_of_vertical_elementary_cells, d.number_of_vertical_elementary_cells + 1); len1 = d.descriptor_length - 1; b += 3; indent(+1); while (len1 > 0) { d2.logical_cell_id = getBits (b, 0, 0, 6); d2.reserved_1 = getBits (b, 0, 6, 7); d2.logical_cell_presentation_info = getBits (b, 0, 13, 3); d2.elementary_cell_field_length = getBits (b, 0, 16, 8); out_NL (4); out_SB_NL (4,"Logical_cell_ID: ",d2.logical_cell_id); out_SB_NL (6,"reserved_1: ",d2.reserved_1); out_S2B_NL (4,"Logical_cell_presentation_info: ", d2.logical_cell_presentation_info, dvbstrLogCellPresInfo_TYPE(d2.logical_cell_presentation_info) ); out_SB_NL (5,"Elementary_cell_field_length: ", d2.elementary_cell_field_length); b += 3; len2 = d2.elementary_cell_field_length; len1 -= (len2 + 3); indent (+1); while (len2 > 0) { d3.reserved_1 = getBits (b, 0, 0, 2); d3.elementary_cell_id = getBits (b, 0, 2, 6); len2 -= 1; b += 1; out_NL (4); out_SB_NL (6,"reserved_1: ",d3.reserved_1); out_SB_NL (4,"Elementary_cell_ID: ",d3.elementary_cell_id); } //len2 indent (-1); d2.cell_linkage_info = getBits (b, 0, 0, 8); b += 1; len1 -= 1; out_S2B_NL (4,"Cell_linkage_info: ", d2.cell_linkage_info, dvbstrCellLinkageInfo_TYPE (d2.cell_linkage_info)); /* conditional fields!! */ switch (d2.cell_linkage_info) { case 0x01: d2.bouquet_id = getBits (b, 0, 0, 16); b += 2; len1 -= 2; out_S2W_NL (4,"bouquet_ID: ",d2.bouquet_id,dvbstrBouquetTable_ID(d2.bouquet_id)); break; case 0x02: case 0x03: case 0x04: d2.transport_stream_id = getBits (b, 0, 0, 16); d2.original_network_id = getBits (b, 0, 16, 16); d2.service_id = getBits (b, 0, 32, 16); b += 6; len1 -= 6; out_SW_NL (4,"transport_stream_ID: ",d2.transport_stream_id); out_S2W_NL (4,"original_network_ID: ",d2.original_network_id, dvbstrOriginalNetwork_ID(d2.original_network_id)); out_S2W_NL (4,"service_ID: ",d2.service_id, " --> refers to PMT program_number"); if (d2.cell_linkage_info == 0x03) out_nl (4," --> Service referce to mosaic service"); if (d2.cell_linkage_info == 0x04) { out_nl (4," --> Service referce to event"); d2.event_id = getBits (b, 0, 0, 16); b += 2; len1 -= 2; out_SW_NL (4,"Event_ID: ",d2.event_id); } break; } // switch } // while len1 indent(-1);}/* 0x52 Stream Identifier descriptor ETSI EN 300 468 6.2.xx -- checked v1.6.1*/void descriptorDVB_StreamIdent (u_char *b){ // tag = b[0]; // len = b[1]; outBit_Sx_NL (4,"component_tag: ", b, 16, 8);}/* 0x53 CA Identifier descriptor ETSI EN 300 468 6.2.xx -- checked v1.6.1*/void descriptorDVB_CAIdentifier (u_char *b){ int len; // tag = b[0]; len = b[1]; b += 2; indent (+1); while (len > 0) { outBit_S2x_NL (4,"CA_system_ID: ", b, 0, 16, (char *(*)(u_long)) dvbstrCASystem_ID ); b += 2; len -= 2; } indent (-1);}/* 0x54 Content descriptor ETSI EN 300 468 6.2.xx*/void descriptorDVB_Content (u_char *b){ typedef struct _descContent { u_int descriptor_tag; u_int descriptor_length; } descContent; typedef struct _descContent2 { u_int content_nibble_level_1; u_int content_nibble_level_2; u_int user_nibble_1; u_int user_nibble_2; } descContent2; descContent d; descContent2 d2; int len; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; len = d.descriptor_length; b += 2; indent (+1); while ( len > 0) { d2.content_nibble_level_1 = getBits (b,0, 0,4); d2.content_nibble_level_2 = getBits (b,0, 4,4); d2.user_nibble_1 = getBits (b,0, 8,4); d2.user_nibble_2 = getBits (b,0,12,4); b += 2; len -= 2; out_SB_NL (4,"Content_nibble_level_1: ", d2.content_nibble_level_1); out_SB_NL (4,"Content_nibble_level_2: ", d2.content_nibble_level_2); out_nl (4," [= %s]", dvbstrContentNibble_TYPE ( (d2.content_nibble_level_1 << 8) | d2.content_nibble_level_2) ); out_SB_NL (4,"User_nibble_1: ", d2.user_nibble_1); out_SB_NL (4,"User_nibble_2: ", d2.user_nibble_2); out_NL (4); } indent (-1);}/* 0x55 Parental Rating descriptor ETSI EN 300 468 6.2.xx*/void descriptorDVB_ParentalRating (u_char *b){ typedef struct _descParentalRating { u_int descriptor_tag; u_int descriptor_length; } descParentalRating; typedef struct _descParentalRating2 { u_char country_code[4]; u_int rating; } descParentalRating2; descParentalRating d; descParentalRating2 d2; int len; 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.rating = getBits (b,0,24,8); b += 4; len -= 4; out_nl (4,"Country_code: %3.3s", d2.country_code); out_S2B_NL (4,"Rating: ", d2.rating, dvbstrParentalRating_TYPE (d2.rating)); out_NL (4); } indent (-1); }/* -- 0x56 Teletext descriptor*/void descriptorDVB_Teletext (u_char *b){ /* ETSI EN 300 468 6.2.xx */ typedef struct _descTeletext { u_int descriptor_tag; u_int descriptor_length; // N TeleTextList desc } descTeletext; typedef struct _descTeletextList { u_char ISO_639_language_code[4]; u_int teletext_type; u_int teletext_magazine_number; u_int teletext_page_number; } descTeletextList; descTeletext d; descTeletextList 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.teletext_type = getBits (b,0,24,5); d2.teletext_magazine_number = getBits (b,0,29,3); d2.teletext_page_number = getBits (b,0,32,8); b += 5; len -= 5; out_nl (4,"ISO639_language_code: %3.3s", d2.ISO_639_language_code); out_S2B_NL (4,"Teletext_type: ", d2.teletext_type, dvbstrTeletext_TYPE (d2.teletext_type)); out_SB_NL (4,"Teletext_magazine_number: ",d2.teletext_magazine_number); out_SB_NL (4,"Teletext_page_number: ",d2.teletext_page_number); out_NL (4); } indent (-1);}/* 0x57 Telephone descriptor ETSI EN 300 468 6.2.xx*/void descriptorDVB_Telephone (u_char *b){ u_int country_prefix_len; u_int internat_area_code_len; u_int operator_code_len; u_int national_area_code_len; u_int core_number_len; // descriptor_tag = b[0]; // len = b[1]; outBit_Sx_NL (6,"reserved_1: ", b, 16, 2); outBit_Sx_NL (4,"foreign_availability: ", b, 18, 1); outBit_Sx_NL (4,"connection_type: ", b, 19, 5); outBit_Sx_NL (6,"reserved_2: ", b, 24, 1); country_prefix_len = outBit_Sx_NL (4,"country_prefix_length: ", b, 25, 2); internat_area_code_len= outBit_Sx_NL (4,"international_area_code_length: ", b, 27, 3); operator_code_len = outBit_Sx_NL (4,"operator_code_length: ", b, 30, 2); outBit_Sx_NL (6,"reserved_3: ", b, 32, 1); national_area_code_len= outBit_Sx_NL (4,"national_area_code_length: ",b, 33, 3); core_number_len = outBit_Sx_NL (4,"core_number_length: ", b, 36, 4); b += 5; out (4,"country_prefix: "); printasciiline_buf (4, b, country_prefix_len); b += country_prefix_len; out (4,"international_area_code_prefix: "); printasciiline_buf (4, b, internat_area_code_len); b += internat_area_code_len; out (4,"operator_code: "); printasciiline_buf (4, b, operator_code_len); b += operator_code_len; out (4,"national_area_code: "); printasciiline_buf (4, b, national_area_code_len); b += national_area_code_len; out (4,"core_number: "); printasciiline_buf (4, b, core_number_len); b += core_number_len;}/* 0x58 Local Time Offset descriptor ETSI EN 300 468 6.2.xx*/void descriptorDVB_LocalTimeOffset (u_char *b){ typedef struct _descLocalTimeOffset { u_int descriptor_tag; u_int descriptor_length; // N Descriptor } descLocalTimeOffset; typedef struct _descLocalTimeOffset2 { u_char country_code[4]; u_int country_region_id; u_int reserved_1; u_int local_time_offset_polarity; u_int local_time_offset; u_int time_of_change_MJD; u_int time_of_change_UTC; u_int next_time_offset; } descLocalTimeOffset2; descLocalTimeOffset d; descLocalTimeOffset2 d2; int len; 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -