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

📄 dvb_descriptor.c

📁 dvbsnoop is a DVB/MPEG stream analyzer program. The program can be used to sniff, monitor, debug, d
💻 C
📖 第 1 页 / 共 5 页
字号:
 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 + -