📄 mpeg_descriptor.c
字号:
d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.horizontal_offset = getBits (b, 0, 16, 14); d.vertical_offset = getBits (b, 0, 30, 14); d.window_priority = getBits (b, 0, 44, 4); out_S2W_NL (4,"horizontal_offset: ",d.horizontal_offset,"pixel"); out_S2W_NL (4,"vertical_offset: ",d.vertical_offset,"pixel"); out_S2B_NL (4,"window_priority: ",d.window_priority,"(15 = highest)");}/* 0x09 CA descriptor (condition access)*/void descriptorMPEG_CA (u_char *b){ /* IS13818-1 2.6.1 */ typedef struct _descCA { u_int descriptor_tag; u_int descriptor_length; u_int CA_system_ID; u_int reserved; u_int CA_PID; // private data bytes } descCA; descCA d; int len; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.CA_system_ID = getBits (b, 0, 16, 16); d.reserved = getBits (b, 0, 32, 3); d.CA_PID = getBits (b, 0, 35, 13); store_PidToMem (d.CA_PID); out_S2W_NL (4,"CA_system_ID: ",d.CA_system_ID, dvbstrCASystem_ID(d.CA_system_ID)); out_SB_NL (6,"reserved: ",d.reserved); out_SW_NL (4,"CA_PID: ",d.CA_PID); len = d.descriptor_length-4; if (len > 0) { print_private_data (4, b+6,len); }}/* -- 0x0A ISO 639 Language descriptor*/void descriptorMPEG_ISO639_Lang (u_char *b){ /* ISO 13818-1 2.6.19 */ typedef struct _descISO639 { u_int descriptor_tag; u_int descriptor_length; // N ISO639 desc } descISO639; typedef struct _descISO639List { u_char ISO_639_language_code[4]; u_int audio_type; } descISO639List; descISO639 d; descISO639List 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.audio_type = getBits (b,0,24,8); b += 4; len -= 4; out_nl (4,"ISO639_language_code: %3.3s", d2.ISO_639_language_code); out_S2B_NL (4,"Audio_type: ", d2.audio_type, dvbstrAudio_TYPE (d2.audio_type)); out_NL(4); } indent (-1);}/* 0x0B System Clock descriptor ISO 13818-1 2.6.xx*/void descriptorMPEG_SystemClock (u_char *b){ typedef struct _descSysClock { u_int descriptor_tag; u_int descriptor_length; u_int external_clock_reference_indicator; u_int reserved_1; u_int clock_accuracy_integer; u_int clock_accuracy_exponent; u_int reserved_2; } descSysClock; descSysClock d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.external_clock_reference_indicator = getBits (b, 0, 16, 1); d.reserved_1 = getBits (b, 0, 17, 1); d.clock_accuracy_integer = getBits (b, 0, 18, 6); d.clock_accuracy_exponent = getBits (b, 0, 24, 3); d.reserved_2 = getBits (b, 0, 27, 5); out_SB_NL (4,"external_clock_reference_indicatior: ", d.external_clock_reference_indicator); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_SB_NL (4,"clock_accuracy_integer: ",d.clock_accuracy_integer); out_SB_NL (4,"clock_accuracy_exponent: ",d.clock_accuracy_exponent); out_nl (4," == : %u * 10^(-%u) ", d.clock_accuracy_integer,d.clock_accuracy_exponent); out_SB_NL (6,"reserved_2: ",d.reserved_2);}/* 0x0C Multiplex Buffer Utilization descriptor ISO 13818-1 2.6.xx*/void descriptorMPEG_MultiplexBufUtil (u_char *b){ typedef struct _descMBU { u_int descriptor_tag; u_int descriptor_length; u_int bound_valid_flag; u_int LTW_offset_lower_bound; u_int reserved_1; u_int LTW_offset_upper_bound; } descMBU; descMBU d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.bound_valid_flag = getBits (b, 0, 16, 1); d.LTW_offset_lower_bound = getBits (b, 0, 17, 15); d.reserved_1 = getBits (b, 0, 32, 1); d.LTW_offset_upper_bound = getBits (b, 0, 33, 15); out_SB_NL (4,"bound_valid_flag: ",d.bound_valid_flag); out_S2W_NL (4,"LTW_offset_lower_bound: ",d.LTW_offset_lower_bound, "(27 MHz/300 clock periods)"); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_S2W_NL (4,"LTW_offset_upper_bound: ",d.LTW_offset_upper_bound, "(27 MHz/300 clock periods)");}/* 0x0D Copyright descriptor ISO 13818-1 2.6.xx*/void descriptorMPEG_Copyright (u_char *b){ typedef struct _descCopyright { u_int descriptor_tag; u_int descriptor_length; u_long copyright_identifier; // add. info } descCopyright; descCopyright d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.copyright_identifier = getBits (b, 0, 16, 32); out_S2L_NL (4,"copyright_identifier: ",d.copyright_identifier,"see: SC29"); print_databytes (4,"add. info:", b+6, d.descriptor_length -4);}/* 0x0E Maximum Bitrate descriptor ISO 13818-1 2.6.xx*/void descriptorMPEG_MaxBitrate (u_char *b){ typedef struct _descMaxBitrate { u_int descriptor_tag; u_int descriptor_length; u_int reserved_1; u_long maximum_bitrate; } descMaxBitrate; descMaxBitrate d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.reserved_1 = getBits (b, 0, 16, 2); d.maximum_bitrate = getBits (b, 0, 18, 22); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_nl (4,"maximum_bitrate: %lu (0x%08lx) (= %lu Bytes/sec)", d.maximum_bitrate, d.maximum_bitrate, d.maximum_bitrate * 50);}/* 0x0F Private Data Indicator descriptor ISO 13818-1 2.6.x*/void descriptorMPEG_PrivateDataIndicator (u_char *b){ descriptor_any (b);}/* 0x10 Smoothing Buffer descriptor ISO 13818-1 2.6.30*/void descriptorMPEG_SmoothingBuf (u_char *b){ typedef struct _descSmoothingBuf { u_int descriptor_tag; u_int descriptor_length; u_int reserved_1; u_long sb_leak_rate; u_int reserved_2; u_long sb_size; } descSmoothingBuf; descSmoothingBuf d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.reserved_1 = getBits (b, 0, 16, 2); d.sb_leak_rate = getBits (b, 0, 18, 22); d.reserved_2 = getBits (b, 0, 40, 2); d.sb_size = getBits (b, 0, 42, 22); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_nl (4,"sb_leak_rate: %lu (= %lu bits/sec)", d.sb_leak_rate,d.sb_leak_rate/400); out_SB_NL (6,"reserved_2: ",d.reserved_2); out_nl (4,"sb_size: %lu bytes", d.sb_size);}/* 0x11 STD descriptor ISO 13818-1 2.6.32*/void descriptorMPEG_STD (u_char *b){ typedef struct _descSTD { u_int descriptor_tag; u_int descriptor_length; u_int reserved_1; u_int leak_valid_flag; } descSTD; descSTD d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.reserved_1 = getBits (b, 0, 16, 7); d.leak_valid_flag = getBits (b, 0, 23, 1); out_SB_NL (6,"reserved_1: ",d.reserved_1); out_SB_NL (4,"leak_valid_flag: ",d.leak_valid_flag);}/* 0x12 IBP descriptor ISO 13818-1 2.6.34*/void descriptorMPEG_IBP (u_char *b){ typedef struct _descIBP { u_int descriptor_tag; u_int descriptor_length; u_int closed_gop_flag; u_int identical_gop_flag; u_int max_gop_length; } descIBP; descIBP d; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.closed_gop_flag = getBits (b, 0, 16, 1); d.identical_gop_flag = getBits (b, 0, 17, 1); d.max_gop_length = getBits (b, 0, 18, 14); out_SB_NL (4,"Closed_gop_flag: ",d.closed_gop_flag); out_SB_NL (4,"Identical_gop_flag: ",d.identical_gop_flag); out_SW_NL (4,"Max_gop_length: ",d.max_gop_length);}/* * ------------------------------------------------------------ * * -- DSM-CC Descriptors ISO 13818-6 TR 102 006 * *//* 0x13 Carousel Identifier descriptor ISO 13818-6 / TR 102 006*/void descriptorMPEG_Carousel_Identifier (u_char *b){ typedef struct _descCarouselIdentifier { u_int descriptor_tag; u_int descriptor_length; u_long carousel_id; u_int format_id; // -- optional // FormatSpecifier u_int module_version; u_int module_id; u_int block_size; u_int module_size; u_long CompressionMethod; u_int original_size; u_long timeout; u_int object_key_length; // N... u_int object_key_data; // private data } descCarouselIdentifier; descCarouselIdentifier d; int len; d.descriptor_tag = b[0]; d.descriptor_length = b[1]; d.carousel_id = getBits (b, 0, 16, 32); d.format_id = getBits (b, 0, 48, 8); b += 7; len = d.descriptor_length - 5; out_SL_NL (4,"Carousel_id: ",d.carousel_id); out_SB_NL (4,"format_id: ",d.format_id); /* $$$$ ??? */ indent (+1); if (d.format_id == 0x01) { // -- TR 101 202 4.7.xx // -- FormatSpecifier
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -