📄 dvb_descriptor.c
字号:
} descTimeShiftedEvent; descTimeShiftedEvent d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.reference_service_id = getBits (b, 0, 16, 16); d.reference_event_id = getBits (b, 0, 32, 16); out_SW_NL (4,"Reference_service_id: ",d.reference_service_id); out_SW_NL (4,"Reference_event_id: ",d.reference_service_id);}/* 0x50 Component descriptor ETSI EN 300 468 6.2.xx*/void descriptorDVB_Component (u_char *b){ typedef struct _descComponent { u_int descriptor_tag; u_int descriptor_length; u_int reserved_1; u_int stream_content; u_int component_type; u_int component_tag; u_char ISO639_2_language_code[4]; // N2 char Text } descComponent; descComponent d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.reserved_1 = getBits (b, 0, 16, 4); d.stream_content = getBits (b, 0, 20, 4); 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_1: ",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_2_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 PMS 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*/void descriptorDVB_StreamIdent (u_char *b){ typedef struct _descStreamIdent { u_int descriptor_tag; u_int descriptor_length; u_int component_tag; } descStreamIdent; descStreamIdent d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.component_tag = getBits (b,0,16,8); out_SB_NL (4,"Component_tag: ",d.component_tag);}/* 0x53 CA Identifier descriptor ETSI EN 300 468 6.2.xx*/void descriptorDVB_CAIdentifier (u_char *b){ typedef struct _descCAIdent { u_int descriptor_tag; u_int descriptor_length; // N CA_SysIDs } descCAIdent; descCAIdent d; u_int CA_system_ID; int len; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; len = d.descriptor_length; b += 2; indent (+1); while (len > 0) { CA_system_ID = getBits (b,0,0,16); out_S2W_NL (4,"CA_system_ID: ",CA_system_ID, dvbstrCASystem_ID(CA_system_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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -