《视频解密》中文版(第四版)第十三章 MPEG-2(第二部分)
来源:互联网 发布:什么网络硬盘最好用 编辑:程序博客网 时间:2024/05/20 06:54
图13.5显示了视频比特流,一个7层的层次结构。从高到底的层是:
视频序列
序列头
图像组(GOP)
图像
分片
宏块(MB)
块
一些扩展可以被用来支持各种层次的能力。这些扩展是:
图13.5 MPEG-2视频比特流层次结构。标志和保留位没有显示
序列扩展
序列显示扩展
序列缩放扩展
图像编码扩展
量化矩阵扩展
图像显示扩展
图像时间缩放扩展
图像空间缩放扩展
如果视频序列的第一个序列头没有跟随一个扩展开始码(000001B5H),那么视频比特流必须符合MPEG-1视频比特流。
对于MPEG-2视频比特流,一个扩展开始码(000001B5H)和一个序列扩展必须跟随在每个序列头之后。
注意开始码(000001xxH)之前必须插入0~7个“0”以保证字节对齐。
视频序列
序列结束码
这个32-比特的字段的值是000001B7H,用于结束视频序列。
序列头
一个序列头应该每0.5秒出现一次。它的结构如图13.5所示。如果没有跟随一个序列扩展,那么比特流复合MPEG-1。
序列头码字
这个32-比特串的值是000001B3H,用于指示一个序列头的开始。
水平尺寸值
这是一个最低12有效位的宽度(采样点数),是图像可见部分的Y分量。14比特值的最高两位指示水平尺寸扩展。0值是不允许的。
垂直尺寸值
这是一个最低12有效位的高度(扫描行数),是图像可见部分的Y分量。14比特值的最高两位指示垂直尺寸扩展。0值是不允许的。
宽高比信息
这个4-比特的码字或者指示了采样宽高比(SAR)或显示宽高比(DAR),如表13.9所示。
如果seurence_display_extension不存在,那么SAR由如下确定:
SAR = DAR×(水平尺寸/垂直尺寸)
如果seurence_display_extension存在,那么SAR由如下确定:
SAR = DAR×(水平显示尺寸/垂直显示尺寸)
SAR
DAR
编码
禁止
禁止
0000
1.000
-
0001
-
3/4
0010
-
9/16
0011
-
1/2.21
0100
-
保留
0101
-
0110
-
0111
-
1000
-
1001
-
1010
-
1011
-
1100
-
1101
-
1110
1111
表13.9 MPEG-2宽高比信息码字
帧速率码
这个4-比特的码字或者指示了帧速率,如表13.10所示。
真实的帧速率由如下关系确定:
帧速率 = frame_rate_value×(frame_rate_extension_n + 1)/
(frame_rate_extension_d + 1)
当表13.10中的条目frame_rate_n和frame_rate_extension被指定为“00”时。如果progressive_sequence是“1”,那么解码器输出的两帧之间的时间是帧速率的倒数。如果progressive_sequence是“0”,那么解码器输出的两帧之间的时间是帧速率一半的倒数。
比特速率值
它是一个30-比特二进制数的低8个比特。12个高比特位是bit_rate_extension。这指示了比特流的比特率,以400bps为单位,向上舍入。0值是不允许的。对于ATSC标准,值必须 48500D(对于高数据率模式 97000D)。对于OpenCable?标准的64QAM系统,值必须 67500D(对于256QAM系统 97000D)。
帧/秒
编码
禁止
0000
24/1.001
0001
24
0010
25
0011
30/1.001
0100
30
0101
50
0110
60/1.001
0111
60
1000
保留
1001
1010
1011
1100
1101
1110
1111
表13.10 MPEG-2帧速率码码字
标志位
总是为“1”
Vbv_buffer_size_value
它是一个18比特二进制数的低10个有效位。8个高有效位用于vbv_buffer_size_extension。定义了解码序列所需的视频缓存校验的大小。它定义为:
B = 16×1024×vbv_buffer_size
对于ATSC和OpenCable?标准,值必须 488D。
Constrained_parameters_flag
由于在MPEG-2中没有意义,这个比特被设置成“0”。
Load_intr_quantizer_matrix
如果跟随一个intra_quantizer_matrix,那么这个比特置“1”。如果设置为“0”,那么接下来的默认值被用于帧内块(Y和CbCr),直到出现下一个序列头或quant_matrix_extension。
Intra_quantizer_matrix
一个可选的64个8比特值的列表替代当前的值。0值是不允许的。Intra_quant[0,0]的值总是8。这些值一直有效直到出现一个序列头或quant_matrix_extension为止。对于4:2:2和4:4:4数据格式,新的值同时用于Y和CbCr帧内矩阵,除非导入一个不同的CbCr帧内矩阵。
Load_non_intr_quantizer_matrix
如果跟随一个no_intra_quantizer_matrix,那么这个比特置“1”。如果设置为“0”,那么接下来的默认值被用于帧内块(Y和CbCr),直到出现下一个序列头或quant_matrix_extension。
Non_intra_quantizer_matrix
一个可选的64个8比特值的列表替代当前的值。0值是不允许的。这些值一直有效直到出现一个序列头或quant_matrix_extension为止。对于4:2:2和4:4:4数据格式,新的值同时用于Y和CbCr帧内矩阵,除非导入一个不同的CbCr帧内矩阵。
用户数据
User_data_start_code
这个可选的32-比特串000001B2H指示用户数据(user_data)的开始。用户数据持续到探测到另一个开始码。
User_data
仅当存在user_data_start_code时,这些n×8比特的数据才存在。用户数据(user_data)不能包括23个或以上的连续0比特。
序列扩展
一个序列扩展可能只在一个序列头后面出现。
Extension_start_code
这个32-比特的串000001B5H指示不同于MPEG-1的扩展数据的开始。
Extension_start_code_ID
这个4比特字段的值是“0001”,指示一个扩展序列的开始。对于MPEG-2视频码流,一个序列扩展必须跟随在每个序列头之后。
Profile_and_level_indication
这个8-比特的字段指定配置和级别,如表13.11所示。
比特7:逃逸比特
比特6~4:配置ID
比特3~0:级别ID
配置
配置ID码
级别
级别ID码
保留
000
保留
0000
高
001
保留
0001
空间可分级
010
保留
0010
SNR可分级
011
保留
0011
主
100
高
0100
简单
101
保留
0101
保留
110
高1440
0110
保留
111
保留
0111
主
1000
保留
1001
低
1010
保留
1011
保留
1100
保留
1101
保留
1110
保留
1111
表13.11 MPEG-2 profile_and_level_indication码字
Progressive_sequence
这个比特为“1”指示仅存在逐行扫描图像。“0”指示帧和场图像都可能存在,帧图像可能是逐行扫描或隔行扫描的。对于SVCD标准,这个值必须为“0”。
Chroma_format
这2-比特码字指示CbCr的格式,如表13.12所示。对于ATSC和OpenCable?标准,值必须是“01”。
色度格式
码字
保留
00
4:2:0
01
4:2:2
10
4:4:4
11
表13.12 MPEG-2色度格式码字
图13.6 MPEG-2扩展序列结构。标志位没有显示
Horizontal_size_extension
它是horizontal_size(水平尺寸)的最高两位。对于ATSC和OpenCable?标准,值必须是“00”。
Vertical_size_extension
它是verticall_size(垂直尺寸)的最高两位。对于ATSC和OpenCable?标准,值必须是“00”。
Bit_rate_extension
它是bit_rat(比特率)的高12位。对于ATSC和OpenCable?标准,值必须是“0000 0000 0000”。
Mark_bit
总是为“1”。
vbv_buffer_size_extension
它是vbv_buffer_size的高8比特。对于ATSC和OpenCable?标准,值必须是“0000 0000”。
Low_delay
这个比特为“1”指示不存在B图像,所以没有帧重排序延时。对于SVCD标准,这个值必须为“0”。
Frame_rate_extension_n
见frame_rate_code规定的这2比特二进制值。对于ATSC和OpenCable?标准,值必须是“00000”。
Frame_rate_extension_d
见frame_rate_code规定的这5比特二进制值。对于ATSC和OpenCable?标准,值必须是“00”。
序列显示扩展(Squence Display Extension)
这个可选的扩展可能仅出现在序列扩展之后。
Extension_start_code
这个32-比特串000001B5H指示一个新的扩展数据系列的开始。
Extension_start_code_ID
这个4-比特字段的值是“0010”,指示一个扩展显示序列的开始。这个扩展提供的信息不影响解码进程,可能会被忽略。它允许解码的图像显示的尽可能准确。
Video_format
这个3-比特的码字指示MPEG编码前图像源,如表13.13所示。对于ATSC和OpenCable?标准,值必须是“000”。
Color_description
这个比特为“1”指示比特流中存在color_primaries,transfer_characteristics和matrix_coefficients。
视频格式
码字
分量
000
PAL
001
NTSC
010
SECAM
011
MAC
100
未指定
101
保留
110
保留
111
表13.13 MPEG-2视频格式码字
Color_primaries
这个可选的8-bit码字指示原色的色度坐标,如表13.14所示。如果sequence_display_extension不存在或color_description =“0”,说明必须使用默认值。
这个信息可能被用于在MPEG-2解码之后补偿原色显示的颜色调整处理。
原色
码字
默认应用
禁止
0000 0000
BT.709,SMPTE 274M
0000 0001
MPEG-2,ATSC,DVB 25Hz HDTV,DVB 30Hz HDTV
未使用
0000 0010
保留
0000 0011
BT.470系统M
0000 0100
DVB-Video 30Hz
BT.470系统M,G,I
0000 0101
DVD-Video 25Hz,DVB 25Hz SDTV
SMPTE 170M
0000 0110
DVD-Video 30Hz,DVB 30Hz SDTV
SMPTE 240M
0000 0111
保留
0000 1000
:
:
:
保留
1111 1111
表13.14 MPEG-2原色码字
Transfer_characteristics
这个8-比特的码字描述源图像的光电变换特性,如表13.15所示。如果sequence_display_extension不存在或color_description =“0”,那么默认值必须被使用。
这个信息可能被用于MPEG-2解码之后补偿的显示伽马校正处理。
光-电转换特性
码字
默认应用
禁止
0000 0000
BT.709,SMPTE 274M
0000 0001
MPEG-2,ATSC,DVB 25Hz HDTV,DVB 30Hz HDTV
未使用
0000 0010
保留
0000 0011
BT.470系统M
0000 0100
DVB-Video 30Hz
BT.470系统M,G,I
0000 0101
DVD-Video 25Hz,DVB 25Hz SDTV
SMPTE 170M
0000 0110
DVD-Video 30Hz,DVB 30Hz SDTV
SMPTE 240M
0000 0111
线性
0000 1000
保留
0000 1001
:
:
:
保留
1111 1111
表13.15 MPEG-2变换特性码字
Matrix_coefficients
这个可选的8-比特码字描述用于从R’G’B’推导到YCbCr的系数,如表13.16所示。如果sequence_display_extension不存在或color_sescription =“0”,那么表示必须使用默认值。
如果需要,在MPEG-2解码之后,这个信息被用于选择适当的YCbCr-RGB矩阵。
Display_horizontal_size
见display_vertical_size指定的这14-比特二进制数。
Marker_bit
总是为“1”。
Display_vertical_size
这个14-比特二进制数,结合display_horizontal_size,定义了有效显示区域。如果显示区域比编码图像尺寸要小,那么仅显示图像的一部分。如果显示区域大于图像尺寸,那么图像只是显示的一部分。
原色
码字
默认应用
禁止
0000 0000
BT.709,SMPTE 274M
0000 0001
MPEG-2,ATSC,DVB 25Hz HDTV,DVB 30Hz HDTV
未使用
0000 0010
保留
0000 0011
FCC
0000 0100
BT.470系统M,G,I
0000 0101
DVD-Video 25Hz,DVB 25Hz SDTV
SMPTE 170M
0000 0110
DVD-Video 30Hz,DVB 30Hz SDTV
SMPTE 240M
0000 0111
保留
0000 1000
:
:
:
保留
1111 1111
表13.16 MPEG-2矩阵系数码字
图13.7 MPEG-2显示扩展序列结构。标志位没有显示
序列可分级扩展
这个可选的扩展可能仅在序列扩展之后出现。
Extension_start_code
这个32-比特的串000001B5H指示一套新的扩展数据的开始。
Extension_start_code_ID
这个4-比特字段的值是“0101”,指示可分级扩展序列的开始。这个扩展指定用于视频比特流的分级模式。如果sequence_scalable_extension在比特流中不存在,那么不使用可扩展性。一个基本层的可扩展层次结构没有sequence_scalable_extension,除了数据分区的情况之外。
图13.8 MPEG-2序列可分级扩展结构。标志位没有显示
Scalble_mode
这个2-比特的码字指示视频序列的可扩展类型,如表13.17所示。
可分级模式
码字
数据分区
00
空间可分级
01
SNR可分级
10
时间可分级
11
表13.17 MPEG-2可分级模式码字
Layer_ID
这个4-比特的二进制数指示可分级结构中的层。即本层的ID是“0000”。在数据分区中的layer_ID“0000”分配到分区层0,layer_ID“0001”分配到分区层1。
Lower_layer_prediction_horizontal_size
仅当scalable_mode =“01”时,这个可选的14-比特二进制数才存在。它指示较低层帧用于预测的水平尺寸。在较低层比特流中它包含了horizontal_size的值。
Marker_bit
它的值总是“1”。只有当scalable_mode = “01”时,它才存在。
Lower_layer_prediction_vertical_size
仅当scalable_mode =“01”时,这个可选的14-比特二进制数才存在。它指示较低层帧用于预测的垂直尺寸。在较低层比特流中它包含vertical_size的值。
Horizontal_subsampling_factor_m
仅当scalable_mode =“01”时,这个可选的5-比特二进制数才存在,并且影响空间上采样处理。“00000”值是不允许的。
Horizontal_subsampling_factor_n
仅当scalable_mode =“01”时,这个可选的5-比特二进制数才存在,并且影响空间上采样处理。“00000”值是不允许的。
Vertical_subsampling_factor_m
仅当scalable_mode =“01”时,这个可选的5-比特二进制数才存在,并且影响空间上采样处理。“00000”值是不允许的。
Vertical_subsampling_factor_n
仅当scalable_mode =“01”时,这个可选的5-比特二进制数才存在,并且影响空间上采样处理。“00000”值是不允许的。
Picture_mux_enable
仅当scalable_mode =“11”时,这个可选的1-比特二进制数才存在。如果置为“1”,那么picture_mux_order和picture_mux_factor参数用于显示前的再复用。
Mux_to_progressive_sequence
仅当scalable_mode =“11”和picture_mux_enable =“1”时,这个可选的1-比特二进制数才存在。如果置“1”,那么它指示为了显示解码的图片暂时混合生成逐行扫描的序列。当空间复用生成一个隔行扫描序列时,这个标志是“0”。
Picture_mux_order
仅当scalable_mode =“11”时,这个可选的1-比特二进制数才存在。它指示在第一个基本层图像之前的增强层图像数量。它用来帮助解码器在现实之前图片妥善再复用。
Picture_mux_factor
仅当scalable_mode =“11”时,这个可选的1-比特二进制数才存在。它表示连续基本层图像之间的增强层图像数量,并用来帮助解码器在现实之前图片妥善再复用。
图像组(GOP)层
一个GOP头应该每2秒出现一次。每个图像组的数据包括一个GOP头,其后跟随图像数据。其结构如图13.5所示。DVD标准在这一层使用用于封闭式字幕数据的用户数据扩展。
Group_start_code
这个32-比特的串000001B8H指示一个图像组的开始。
Time_code
这些25-比特值指示时间码信息,如表13.18所示。仅当帧速率是30/1.001(29.97)Hz时,Drop_frame_flag可以被置“1”。
时间码
值的范围
位数目
drop_frame_flag
1
time_code_hours
0~23
5
time_code_minutes
0~59
6
marker_bit
1
1
time_code_seconds
0~59
6
time_code_pictures
0~59
6
表13.18 MPEG-2时间码字段
Closed_gop
如果图像组在没有参考前一个图像组的运动向量已经被编码,那么这个标志置“1”。该位允许支持编辑压缩码流。
Broken_link
在编码期间这个1-比特的为置“1”。当一个图像组的B帧之后跟随第一个I帧而不能正确解码时,它被置“1”。
图像层
每个图像的数据包括一个图像头,后面跟随分片数据。它的结构在图13.5中显示。如果存在一个序列扩展,则每个图像头就跟随一个图像编码扩展。
在这一层中,一些实现在宽高比信息和用户扩展数据之间使能帧准确的切换。在ATSC标准中也在这一层使用EIA-708封闭字幕的用户数据。
Picture_start_code
这个32-比特的串的值是00000100H。
Temporal_reference
对于一个GOP的第一帧,10比特的二进制数temporal_reference为0。然后在显示顺序中的每一帧以模1024加1。当一帧编码成2场时,两个场的时间参考相同。
Picture_coding_type
这个3-比特的码字指示图像类型(I图像,P图像或B图像),如表13.19所示。
图像类型
码字
禁止
000
I图像
001
P图像
010
B图像
011
禁止
100
保留
101
保留
110
保留
111
表13.19 MPEG-2图像编码类型码字
Vbv_delay
对于固定比特速率,在开始解码一个图像时,这个16-比特的数设置解码缓存的最初大小以使它既不上溢也不下溢。对于ATSC和OpenCable?标准,除非vbv_delay的值是FFFFH,其值必须 45000D。
Full_pel_forward_vector
这个可选的1-比特字段在MPEG-2中不使用,所以它的值是“0”。它仅当picture_coding_type =“010”或“011”时才存在。
Forward_f_code
这个可选的3-比特字段在MPEG-2中不使用,所以它的值是“111”。它仅当picture_coding_type =“010”或“011”时才存在。
Full_pel_backward_vector
这个可选的1-比特字段在MPEG-2中不使用,所以它的值是“0”。它仅当picture_coding_type =“010”或“011”时才存在。
Backward_f_code
这个可选的3-比特字段在MPEG-2中不使用,所以它的值是“111”。它仅当picture_coding_type = “011”时才存在。
Extra_bit_picture
当这个比特置“1”时,表示跟随content_description_data。“0”表示没有content_description_data跟随。
Content_description_data
如果extra_bit_picture =“1”,那么这个可选的可变长字段存在,它的每个第9比特的值是“1”。
Extra_bit_picture
仅当content_description_data存在时,这个可选的值为“0”比特才存在。
描述数据的内容
这个可选的数据仅当图像头中的extra_bit_picture指示时才存在。
Data_type_upper
这个8-比特字段包括16-比特二进制data_type的最高8位,它定义描述数据内容的类型,如表13.20所示。
Marker_bit
总是为“1”。
Data_type_lower
这个8-比特字段包括16-比特二进制data_type的最低8位,它定义描述数据内容的类型,如表13.20所示。
数据类型
码字
保留
0000 0000 0000 0000
填充字节
0000 0000 0000 0001
捕获时间码
0000 0000 0000 0010
泛扫描参数
0000 0000 0000 0011
有效窗口区域
0000 0000 0000 0100
编码图像长度
0000 0000 0000 0101
保留
0000 0000 0000 0110
:
:
保留
1111 1111 1111 1111
表13.20 MPEG-2数据类型码字
Marker_bit
总是为“1”。
Data_length
这个8-比特二进制数指定跟随在它之后的数据数量,以9比特为单位。
注意:当“填充字节(padding bytes)”由data_type指定时,跟随的字段才存在。两个字段重复的次数由data_length字段指定。
Marker_bit
总是为“1”。
Padding_byte
这个8-比特字段的值是“0000 0000”。其它任何值被禁止。
注意:当data_type指示“capture timecode”时,跟随的字段才存在。它包含时间戳指示场或帧的源捕获时间或生成时间。它不取代任何存在于系统级的时间码。
Marker_bit
总是为“1”。
Timecode_type
这个2-比特的码字说明图片对应的时间码数量,如表13.21所示。
时间码类型
码字
一帧一个时间码
00
第一场或仅有的场一个时间码
01
第二场一个时间码
10
每一场一个时间码,供两个时间码
11
表13.21 MPEG-2时间码类型码字
Counting_type
这个可选的3-比特码字指示补偿n帧(nframes)技术参数的手段,以减小它的累积漂移。
Reserved_bit
总是为“0”。
Reserved_bit
总是为“0”。
Reserved_bit
总是为“0”。
Marker_bit
这个可选的比特总是为“1”。仅当counting_type “000”时这个字段才存在。
Nframe_conversion_code
这个可选的比特指定在确定由nframe指定的时间量的转换因子(1000 +nframes_conversion_code)。仅当counting_type “000”时这个字段才存在。
Clock_divisor
这个可选的7-比特二进制数指定对27MHz系统时钟的分频数,用于生成相等的时间戳。仅当counting_type “000”时这个字段才存在。
Marker_bit
这个可选的比特总是为“1”。仅当counting_type “000”时这个字段才存在。
Nframes_multiplier_upper
这个可选的8-比特值是16-比特值nframes_multiplier的最高8位。仅当counting_type “000”时这个字段才存在。
Marker_bit
这个可选的比特总是为“1”。仅当counting_type “000”时这个字段才存在。
Nframes_multiplier_lower
这个可选的8-比特值是16-比特值nframes_multiplier的最低8位。仅当counting_type “000”时这个字段才存在。
“场或帧的捕获时间戳”信息跟随其后。
Marker_bit
这个可选的比特总是为“1”。仅当counting_type “000”时这个字段才存在。
Nframes
这个可选的8-比特二进制数指定由每个相等时间戳之间推导得到的帧数量的增加值。仅当counting_type “000”时这个字段才存在。
Marker_bit
总是为“1”。
Time_discontinuity
这个1-比特标志为“1”时指示发生了时间码序列的不连续性。
Prior_count_dropped
这个1-比特标志指示是否一个或多个nframes的值下降了。
Time_offset_part_a
包含了time_offset的最高6个比特的值。Time_offset是一个30-比特的有符号数,指示从由其它时间戳参数指定的均等时间戳开始的时间到当前场或帧被捕获的时钟周期偏移数。
Marker_bit
总是为“1”。
Time_offset_part_b
这个值包含了time_offset的第二个最高8个比特的值。
Marker_bit
总是为“1”。
Time_offset_part_c
这个值包含了time_offset的第三个最高8个比特的值。
Marker_bit
总是为“1”。
Time_offset_part_c
这个值包含了time_offset的最低8个比特的值。
Marker_bit
总是为“1”。
Units_of_seconds
一个4-比特的二进制数指示时间戳的秒的个位值。它的值可能是“0000”~“1001”。
Ten_of_seconds
一个4-比特的二进制数指示时间戳的秒的十位值。它的值可能是“0000”~“0101”。
Marker_bit
总是为“1”。
Units_of_minutes
一个4-比特的二进制数指示时间戳的分的个位值。它的值可能是“0000”~“1001”。
Ten_of_minutes
一个4-比特的二进制数指示时间戳的分的十位值。它的值可能是“0000”~“0101”。
Marker_bit
总是为“1”。
Units_of_hours
一个4-比特的二进制数指示时间戳的小时的个位值。它的值可能是“0000”~“1001”。
Ten_of_hours
一个4-比特的二进制数指示时间戳的小时的十位值。它的值可能是“0000”~“0010”。
当timecode_type =“11”时,那么“场或帧捕获时间戳”字段再次存在传送第二个字段的信息。
注意:当由data_type指定“泛扫描参数”时跟随的字段才存在。这允许为一个有不同宽高比的显示传送额外的泛扫描信息。
Reserved_bit
总是为“0”。
Reserved_bit
总是为“0”。
Reserved_bit
总是为“0”。
Display_size_present
这个1-比特标志指示跟随的字段是display_horizontal_size还是display_vertical_size。
Marker_bit
总是为“1”。仅当display_size_present =“1”时,这个可选字段才存在。
Reserved_bit
总是为“0”。仅当display_size_present =“1”时,这个可选字段才存在。
Reserved_bit
总是为“0”。仅当display_size_present =“1”时,这个可选字段才存在。
Display_horizontal_size_upper
这些是display_horizontal_size的最高6比特。仅当display_size_present =“1”时,这个可选字段才存在。
Marker_bit
总是为“1”。仅当display_size_present =“1”时,这个可选字段才存在。
Display_horizontal_size_lower
这些是display_horizontal_size的最低8比特。仅当display_size_present =“1”时,这个可选字段才存在。
Marker_bit
总是为“1”。仅当display_size_present =“1”时,这个可选字段才存在。
Reserved_bit
总是为“0”。仅当display_size_present =“1”时,这个可选字段才存在。
Display_vertical_size_upper
这些是display_horizontal_size的最高6比特。仅当display_size_present =“1”时,这个可选字段才存在。
Marker_bit
总是为“1”。仅当display_size_present =“1”时,这个可选字段才存在。
Display_vertical_size_lower
这些是display_horizontal_size的最低8比特。仅当display_size_present =“1”时,这个可选字段才存在。
注意:帧中央的偏移存在时跟随的字段才存在。
Marker_bit
总是为“1”。
Frame_center_horizontal_offset_upper
这些是frame_center_horizontal_offset的最高有效8位比特。frame_center_horizontal_offset的定义在图像显示扩展中指定。
Marker_bit
总是为“1”。
Frame_center_horizontal_offset_upper
这些是frame_center_horizontal_offset的最低有效8位比特。
Marker_bit
总是为“1”。
Frame_center_vertical_offset_upper
这些是frame_center_vertical_offset的最高有效8位比特。frame_center_vertica _offset的定义在图像显示扩展中指定。
Marker_bit
总是为“1”。
Frame_center_ ertical_offset_upper
这些是frame_center_vertica_offset的最低有效8位比特。
注意:当有data_type指定“有效窗口区域”时,跟随的字段才存在。active_region_window定义了解码图像要显示的矩形。他不能大于由horizontal_size和vertical_size定义的区域大小。
Marker_bit
总是为“1”。
Top_left_x_upper
这个8-比特是16-比特的top_left_x的最高8位。Top_left_x定义的Y采样点数量和top_left_y,定义了左上角的active_region_window矩形。
Marker_bit
总是为“1”。
Top_left_x_upper
这个8-比特是16-比特的top_left_x的最低8位。
Marker_bit
总是为“1”。
Top_left_y_upper
这个8-比特是16-比特的top_left_y的最高8位。Top_left_y定义的Y的行数和top_left_x,定义了左上角的active_region_window矩形。
Marker_bit
总是为“1”。
Top_left_y_upper
这个8-比特是16-比特的top_left_y的最低8位。
Marker_bit
总是为“1”。
Active_region_horizontal_size_upper
这个8-比特字段是16-比特active_region_horizontal_size值的最高8位。active_region_horizontal_size,和active_region_vertical _size一起,定义了矩形active_region_window的右下角。active_region_horizontal_size值0000H表示尺寸未知。
Marker_bit
总是为“1”。
Active_region_horizontal_size_lower
这个8-比特字段是16-比特active_region_horizontal_size值的最低8位。
Marker_bit
总是为“1”。
Active_region_vertical_size_upper
这个8-比特字段是16-比特active_region_vertica _size值的最高8位。active_region_vertical_size,和active_region_horizontal_size一起,定义了矩形active_region_window的右下角。active_region_vertical_size值0000H表示尺寸未知。
Marker_bit
总是为“1”。
Active_region_vertical_size_lower
这个8-比特字段是16-比特active_region_vertical_size值的最低8位。
Marker_bit
总是为“1”。
Picture_byte_count_part_a
这个8比特字段是32-比特值picture_byte_count中的最高8位。Picture_byte_count指示当前图像第一个slice_start_code的第一个字节到画面左后一个宏块之后的起始码前缀的字节数。值0000H表示长度未知。
Marker_bit
总是为“1”。
Picture_byte_count_part_b
这个8比特字段是32-比特值picture_byte_count中的第二个最高8位。
Marker_bit
总是为“1”。
Picture_byte_count_part_c
这个8比特字段是32-比特值picture_byte_count中的第三个最高8位。
Marker_bit
总是为“1”。
Picture_byte_count_part_c
这个8比特字段是32-比特值picture_byte_count中的最低8位。
注意:当data_type指定的其他数据都不存在时,跟随的字段才存在。Data_length字段指示了这两个字段重复的时间数。
Marker_bit
总是为“1”。
Reserved_content_description_data
这个8-比特字段为保留字段。
图像编码扩展
一个图像编码扩展仅可能出现在一个图像头之后。
Extension_start_code
这个32-比特的串000001B5H指示一组新的扩展数据的开始。
Extension_start_code_ID
这个4-比特字段的值是“1000”,指示一个图像编码扩展的开始。
f_code[0,0]
一个4-比特的二进制数,范围为“0001”~“1001”,被用于解码前向水平运动向量。“0000”值被禁止;值“1111”指示这个字段被忽略。
f_code[0,1]
一个4-比特的二进制数,范围为“0001”~“1001”,被用于解码前向垂直运动向量。“0000”值被禁止;值“1111”指示这个参数被忽略。
f_code[1,0]
一个4-比特的二进制数,范围为“0001”~“1001”,被用于解码后向水平运动向量。“0000”值被禁止;值“1111”指示这个参数被忽略。
f_code[1,1]
一个4-比特的二进制数,范围为“0001”~“1001”,被用于解码后向垂直运动向量。“0000”值被禁止;值“1111”指示这个参数被忽略。
Intra_dc_precision
这个2-比特码字指示帧内DC精度,如表13.22所示。
Picture_structure
这个2-比特的码字指示指示图像的结构,如表13.23所示。
帧内DC精度(比特数)
码字
8
00
9
01
10
10
11
11
表13.22 MPEG-2帧内DC精度码字
图像结构
码字
保留
00
顶场
01
底场
10
帧图像
11
表13.23 MPEG-2图像结构码字
图13.9 MPEG-2图像编码扩展结构(不包括标志比特)
Top_field_first
如果progressive_sequence =“0”,那么这个比特指示解码器首先输出那一场。在一场中,这个比特的值是“0”。在一个帧中,“1”指示解码的帧的第一场是顶场。“0”指示第一场是底场。
如果progressive_sequence =“1”,并且repeat_first_field =“0”,那么这个比特是“0”,解码器产生一个逐行扫描的帧。
如果progressive_sequence =“1”, repeat_first_field =“1”,并且这个比特为“0”,那么解码器产生两个相同的逐行扫描的帧。
如果progressive_sequence =“1”, repeat_first_field =“1”,并且这个比特为“1”,那么解码器产生三个相同的逐行扫描的帧。
Frame_pred_frame_dct
如果这个比特是“1”,只有帧-DCT和帧精度被使用。对于场图像,它的值总是为“0”。如果progressive_frame是“1”,那么这个参数为“1”。
Concealment_motion_vectores
如果这个比特是“1”,那么它指示运动向量由帧内宏块编码。
Q_scal_type
这个比特指示解码器在quantizer_scale_code和quantizer_scale之间使用哪种映射。
Intra_vlc_format
它指示哪个表格被用于帧内块的DCT系数。当intra_vlc_format =“0”时,使用表13.37。当intra_vlc_format =“1”时,使用表13.38。对于非帧内块,使用表13.37,而不管intra_vlc_format的值。
Alternate_scan
这个比特指示传输参数数据所采用的扫描模式。“0”= 图7.59;“1”=图7.60。
Repeat_first_field
见top_field_first中使用的这个比特。对于场图像,它的值是“0”。
Chroma_420_type
如果chroma_format是4:2:0,那么这个比特如progressive_frame一样。否则它为“0”。
Progressive_frame
如果是“0”,这个比特指示帧中的两个场是隔行扫描场,他们之间有一个隔行扫描时间。如果是“1”,帧中的两个场来自同一时间。
Composite_display_flag
这个比特指示在码流中是否存在v_axis,field_sequence,sub_carrier,burst_amplitude和sub_carrier_phase。
V_axis
仅当composite_display_flag =“1”时,这个比特才存在。当原始源为PAL视频信号时它才被使用。当V为正号时v_axis =“1”,否则为“0”。
这个信息可以从由MPEG-2编码器驱动的PAL解码器获得。它可以被用来使能一个MPEG-2解码器来置一个PAL编码器的V开关和原来的一样。
Field_sequence
仅当composite_display_flag =“1”时,这个3比特码字才存在。它指示原始4-或8-场序列的场的数量,如表13.24所示。
这个信息可以从由MPEG-2编码器驱动的NTSC/PAL解码器获得。它可以被用来使能一个MPEG-2解码器来置一个NTSC/PAL编码器场序列和原来的一样。
Sub_carrier
仅当composite_display_flag =“1”时,这个比特才存在。“0”指示原始副载波到行频关系被校正。
这个信息可以从由MPEG-2编码器驱动的NTSC/PAL解码器获得。
帧序列
场序列
码字
1
1
000
1
2
001
2
3
010
2
4
011
3
5
100
3
6
101
4
7
110
4
8
111
表13.24 MPEG-2 field_sequence码字
Burst_amplitude
仅当composite_display_flag =“1”时,这个7比特的二进制数才存在。它指示当量化每个BT.601(忽略MSB)时的原始PAL或NTSC同步幅度。
这个信息可以从由MPEG-2编码器驱动的NTSC/PAL解码器获得。它可以被用来使能一个MPEG-2解码器来置一个NTSC/PAL编码器的色彩同步幅度和原来的一样。
Sub_carrier_phase
仅当composite_display_flag =“1”时,这个8-比特的二进制数才存在。它指示由BT.470定义的原始PAL或NTSC副载波相位。值定义为:(360o/256)×sub_carrier_phase。
这个信息可以从由MPEG-2编码器驱动的NTSC/PAL解码器获得。它可以被用来使能一个MPEG-2解码器来置一个NTSC/PAL编码器的色彩副载波相位和原来的一样。
量化矩阵扩展
每个量化矩阵有其默认值。当一个序列头被解码时,所有矩阵被复位到它们的默认值。用户定义的矩阵可以在序列头或使用这个扩展期间装载。这个可选的扩展能在图像编码扩展后发生。
Extension_start_code
这个32-比特的串000001B5H指示一组新的扩展数据的开始。
Extension_start_code_ID
这个4-比特串的值是“0011”指示一个quant_matrix_extension的开始。这个扩展也允许量化矩阵传送4:2:2和4:4:4的色度格式。
Load_intra_quantizer_matrix
如果跟随一个intra_quantizer_matrix,那么这个比特被设置为“1”。如果设置为“0”,那么下面的默认值被用于帧内块,直到发生下一个序列头或quant_matrix_extension。
Intra_quantizer_matrix
一个可选的64个8-比特值的列表可以替代上面的默认值。“0”值是不允许的。intra_quant[0,0]的值总是8。直到下一个序列头或quant_matrix_extension出现为止,这些值都有效。它的顺序如图7.59所示。
对于4:2:2和4:4:4的数据格式,新值被同时用于Y和CbCr帧内矩阵,除非载入了不同的CbCr帧内矩阵。
Load_non_intra_quantizer_matrix
如果跟随一个intra_non_quantizer_matrix,那么这个比特被设置为“1”。如果设置为“0”,那么下面的默认值被用于帧内块,直到发生下一个序列头或quant_matrix_extension。
图13.10 MPEG-2量化扩展矩阵结构(标志位没有显示)
Non-intra_quantizer_matrix
一个可选的64个8-比特值的列表可以替代上面的默认值。“0”值是不允许的。直到下一个序列头或quant_matrix_extension出现为止,这些值都有效。它的顺序如图7.59所示。
对于4:2:2和4:4:4的数据格式,新值被同时用于Y和CbCr帧内矩阵,除非载入了不同的CbCr帧内矩阵。
Load_chroma_intra_quantizer_matrix
如果跟随一个chroma_intra_quantizer_matrix,那么这个比特被设置为“1”。如果设置为“0”,那么使用的值不改变。如果chroma_format是4:2:0,那么这个比特的值是“0”。
Chroma_non_intra_quantizer_matrix
一个可选的64个8-比特值的列表可以替代用于CbCr前面的或默认值。“0”值是不允许的。chroma_intra_quant[0,0]的值总是8。直到下一个序列头或quant_matrix_extension出现为止,这些值都有效。它的顺序如图7.59所示。
Load_chroma_non_intra_quantizer_matrix
如果跟随一个chroma_intra_non_quantizer_matrix,那么这个比特被设置为“1”。如果设置为“0”,那么使用的值不改变。如果chroma_format是4:2:0,那么这个比特的值是“0”。
Chroma_intra_quantizer_matrix
一个可选的64个8-比特值的列表可以替代用于CbCr前面的或默认值。“0”值是不允许的。直到下一个序列头或quant_matrix_extension出现为止,这些值都有效。它的顺序如图7.59所示。
图像显示扩展
这个扩展允许显示矩形在图像基之间移动位置。一个典型的应用可能是平移-扫描。这个可选的扩展可能仅在图像编码扩展后出现。
Extension_start_code
这个32-比特的串000001B5H指示一组新的扩展数据的开始。
图13.11 MPEG-2图像显示扩展结构(标志位没有显示)
Extension_start_code_ID
这个4-比特字段的值是“0111”指示一个图像显示扩展的开始。
对于在一个隔行扫描序列的情况下,一个图像可能对应1,2或3个解码场。所以,在比特流中最多可能跟随3种4场的存在。
Frame_center_horizontal_offset
这个16-比特2的补码数字指示单位为1/16个采样点的水平偏移。一个正值的显示图像中心的位置位于解码图像中心的右侧。
Marker_bit
总是为“1”。
Frame_center_vertical_offset
这个16-比特2的补码数字指示单位为1/16个扫描行的垂直偏移。一个正值的显示图像中心的位置位于解码图像中心的下方。
Marker_bit
总是为“1”。
图像时间可伸缩扩展
这个可选的扩展可能仅在图像编码扩展后出现。
图13.12 MPEG-2图像时间可伸缩扩展结构(标志位不显示)
Extension_start_code
这个32-比特的串000001B5H指示一组新的扩展数据的开始。
Extension_start_code_ID
这个4-比特字段的值是“1010”指示一个图像时间可伸缩扩展的开始。
Reference_select_code
这个2-比特的码字标识进行预测的参考帧或场。
Forward_temporal_reference
这个10-比特的二进制数指示较低层用于提供前向预测的时间参考。如果需要大于10比特来指定时间参考,那么仅使用最低10比特。
Marker_bit
总是为“1”。
Backward_temporal_reference
这个10-比特的二进制数指示较低层用于提供后向预测的时间参考。如果需要大于10比特来指定时间参考,那么仅使用最低10比特。
图像时间可伸缩扩展
这个可选的扩展可能仅在图像编码扩展后出现。
图13.13 MPEG-2图像空间可伸缩扩展结构(标志位不显示)
Extension_start_code
这个32-比特的串000001B5H指示一组新的扩展数据的开始。
下层隔行扫描场选择
下层逐行扫描帧
逐行扫描帧
应用隔行扫描处理
用于预测
0
0
1
是
顶场
1
0
1
是
底场
1
1
1
否
帧
1
1
0
否
帧
1
0
0
是
两场
表13.25 MPEG-2图像空间可扩展上采样处理
Extension_start_code_ID
这个4-比特字段的值是“1001”指示一个图像空间可伸缩扩展的开始。
Lower_layer_temporal_reference
这个10-比特的二进制数指示低层用于提供预测的时间参考。如果需要大于10比特来指定时间参考,那么仅使用最低10比特。
Marker_bit
总是为“1”。
Lower_layer_horizontal_offset
这个15-比特的2的补码数指示上采样底层图像对应的增强层图像对于左上角的水平偏移。对于4:2:0和4:2:2格式,这个参数必须是偶数。
Marker_bit
总是为“1”。
Lower_layer_vertical_offset
这个15-比特的2的补码数指示上采样底层图像对应的增强层图像对于左上角的垂直偏移。对于4:2:0格式,这个参数必须是偶数。
Lower_layer_progressive_frame
如果低层图像是逐行扫描的,那么这个比特是“1”。
Lower_layer_deinterlaced_field_select
这个参数连同其它参数一起使用以帮助解码器。见表13.25。
版权扩展
这个可选的扩展可能仅在图像编码扩展后出现。
Extension_start_code
这个32-比特的串000001B5H指示一组新的扩展数据的开始。
Extension_start_code_ID
这个4-比特字段的值是“0100”指示一个版权扩展的开始。
Copyright_flag
这个比特为“1”表示跟随视频的内容是版权保护的,直到下一个版权扩展。“0”不指示跟随的视频内容是否版权保护。
Copyright_identifier
这个8-比特的二进制数指示版权所有人。置“0000 0000”表示信息不存在。当copyright_flag =“0”时,copyright_identifier必须为“0000 0000”。
Original_or_copy
这个比特为“1”表示原始材料,“0”表示它是一个拷贝。
Reserved
这7个比特总是“000 0000”。
Marker_bit
总是为“1”。
Copyright_number_1
这些20比特的值表示版权数据的44~63位。
Marker_bit
总是为“1”。
Copyright_number_2
这些22比特的值表示版权数据的22~43位。
Marker_bit
总是为“1”。
Copyright_number_3
这些22比特的值表示版权数据的0~21位。64-比特的copyright_number统一标识版权内容。当coypright_identifier =“0000 0000”,或copyright_flag =“0”时,copyright_number必须为0。
摄相机参数扩展
这个可选的扩展可能仅在图像编码扩展后出现。
在32比特的extension_start_code 000001B5H和4-比特的extension_stard_code_ID “1011”之后,有7个字段指定所使用摄像机的位置和特性。
ITU-T ext.D扩展
这个可选的扩展可能仅在图像编码扩展后出现。
在32比特的extension_start_code 000001B5H和4-比特的extension_stard_code_ID “1100”之后,有1比特的数据。这个扩展的使用在ITU-T H.320附录A中定义。
有效格式描述(AFD)
AFD(ATSC A/53和ETSI TR 101 154的一部分)描述图像“感兴趣的区域”,使观众接收最佳的时尚图片。AFD的功能类似于第8章中描述的宽屏信号(WSS)。
AFD可选承载于基本视频比特流视频序列扩展,GOP头和/或图像编码扩展的用户数据中。解码器可选支持AFD数据。
User_data_start_code
这个32-比特串000001B2H指示user_data的开始。
AFD_identifer
这个32-比特串44544731H指示用户数据的AFD语法。
Reserved_bit
总是为“1”。
Active_format_flag
如果被置为“1”,那么这个数据结构中描述了一个有效的格式。
Reserved_bits
总是为“00 0001”。
Reserved_bits
这些可选的比特总是为“1111”。如果active_format_flag =“1”,那么它们存在。
Active_format
这些可选的比特指示了感兴趣的区域,如表13.26所示。如果active_format_flag =“1”,那么它们存在。
AFD有效格式值
WSS比特b3,b3,b2,b1,b0
感兴趣的宽高比区域
4:3显示器上的位置
有效行
480-行系统
576-行系统
0000-0001
保留
0010
0100
0011
0010
0100
1101
0101-0111
保留
1000
类似编码帧的有效格式
1001
1000
1010
1011
16:9
信箱,中部
360
430
1011
0001
14:9
信箱,中部
420
504
1100
保留
1101
1110
4:3
-
480
576
1110
-
16:9
信箱,中部
480
576
1111
-
16:9
信箱,中部
480
576
表13.26 AFD active_format值
分片层
每个分片层的数据包括一个分片头,跟随其后的是宏块数据。它的结构如图13.5所示。
Slice_start_code
开始的24-比特的值是000001H。最后的8比特是slice_vertical_position,值是01H~AFH。
slice_vertical_position指定分片中第一个宏块中的在宏块垂直位置。宏块的slice_vertical_position的第一行是1。
Slice_vertical_position_extension
如果帧的垂直尺寸>2800行,那么这个可选的3-比特二进制数表示11-比特slice_vertical_position值的最高3位。如果真的尺寸 2800行,那么这个字段不存在。
Priority_breakpoint
当sequence_scalable_extension存在于比特流中,并且scalable_mode =分区数据时,这个可选的7-比特二进制数存在。它指示比特流中分区的位置。
Quantizer_scale_code
这个5-比特的二进制数的值是1~31(0被禁止)。它指示接收的DCT系数的重构层的缩放因子。解码器一直使用这个值直到另一个不管是分片层或宏块层的quantizer_scale_code接收到。
Slice_extension_flag
如果这个可选比特被置“1”,那么跟随intra_slice,slice_picture_ID_enable和slice_picture_ID。
Intra_slice
仅当slice_extension_flag =“1”时,这个可选的比特才存在。如果分片中的任何宏块是非帧内宏块,那么它必须置“0”。
Slice_picture_ID_enable
仅当slice_extension_flag =“1”时,这个可选的比特才存在。值“1”指示slice_picture_ID被使用。
Slice_picture_ID
这些可选的6比特旨在帮助恢复服务错误。Slice_picture_ID对于一个图像的所有分片必须有相同的值。仅当slice_extension_flag =“1”时,这个字段才存在。如果slice_picture_ID_enable =“0”,那么这些比特必须是“00 0000”。
Extra_bit_slice
这个比特,当置“1”时,指示后面跟随extra_information_slice。“0”表示这个字段后面没有数据。
Extra_information_slice
如果extra_bit_slice =“1”,那么这9个跟随的比特包括8比特的数据(extra_information_slice)和另一个extra_bit_slice来指示是否还有另外的9比特跟随,以此类推。
宏块层
每个宏块的数据包括一个宏块头,跟随其后的是运动向量和块数据,如图13.5所示。
Macroblock_escape
这个可选的11-比特字段有一固定的比特串“0000 0001 000”,当本宏块地址和前一宏块地址相差33以上时才被使用。它强制macroblock_address_increment值增量为33。任何连续数量的nacroblock_escape字段可以被使用。
Macroblock_address_increment
这是一个可变长的码字,指示当前宏块地址和前一个宏块地址的差异。它的最大值是33。大于33的值使用macroblock_escape来编码。可变长编码列举于表13.27中。
增量值
码字
增量值
码字
1
1
17
0000 0101 10
2
011
18
0000 0101 11
3
010
19
0000 0101 00
4
0011
20
0000 0100 11
5
0010
21
0000 0100 10
6
0001 1
22
0000 0100 011
7
0001 0
23
0000 0100 010
8
0000 111
24
0000 0100 001
9
0000 110
25
0000 0100 000
10
0000 1011
26
0000 0011 111
11
0000 1010
27
0000 0011 110
12
0000 1001
28
0000 0011 101
13
0000 1000
29
0000 0011 100
14
0000 0111
30
0000 0011 011
15
0000 0110
31
0000 0011 010
16
0000 0101 11
32
0000 0011 001
33
0000 0011 000
macroblock_escape
0000 0001 000
表13.27 MPEG-2宏块地址增量可变长码字表
Macroblock_type
如表13.28~13.30所示,这个可变长的码字指示编码方法和宏块的内容。
Spatial_temporal_weight_code
这个可选的2-比特码字在空间可伸缩情况下指示宏块空间和时间预测的混合预测。仅当表13.28,13.29,和13.30中的[时空权重类] = 1,和spatial_temporal_weight_code_table_index “00”时才存在。
类型
宏块量化
前向运动
后向运动
编码组
帧内宏块
时空权重码标志
允许时空权重类
码字
帧内
0
0
0
0
1
0
0
1
帧内,量化
1
0
0
0
1
0
0
01
时空伸缩的I图像
编码,兼容
0
0
0
1
0
0
4
1
编码,兼容,量化
1
0
0
1
0
0
4
01
帧内
0
0
0
0
1
0
0
0011
帧内,量化
1
0
0
0
1
0
0
0100
非编码,兼容
0
0
0
0
0
0
4
0001
SNR可伸缩的I图像
编码
0
0
0
1
0
0
0
1
编码,量化
1
0
0
1
0
0
0
01
非编码
0
0
0
0
0
0
0
001
表13.28 MPEG-2 I帧红快类型的可变长码字表
类型
宏块量化
前向运动
后向运动
编码组
帧内宏块
时空权重码标志
允许时空权重类
码字
mc,帧内
0
1
0
1
0
0
0
1
非mc,量化
0
0
0
1
0
0
0
01
mc,非编码
0
1
0
0
0
0
0
001
帧内
0
0
0
0
1
0
0
0001 1
mc,编码,量化
1
1
0
1
0
0
0
0001 0
非mc,编码,量化
1
0
0
1
0
0
0
0000 1
帧内,量化
1
0
0
0
1
0
0
0000 01
SNR可伸缩的P图像
编码
0
0
0
1
0
0
0
1
编码,量化
1
0
0
1
0
0
0
01
非编码
0
0
0
0
0
0
0
001
表13.29a MPEG-2 P图像帧宏块类型可变长编码表
类型
宏块量化
前向运动
后向运动
编码组
帧内宏块
时空权重码标志
允许时空权重类
码字
空间可伸缩的P图像
mc,编码
0
1
0
1
0
0
0
10
mc,编码,兼容
0
1
0
1
0
1
1,2,3
011
非mc,编码
0
0
0
1
0
0
0
0000 100
非mc,编码,兼容
0
0
0
1
0
1
1,2,3
0001 11
mc,非编码
0
1
0
0
0
0
0
0010
帧内
0
0
0
0
1
0
0
0000 111
mc,非编码,兼容
0
1
0
0
0
1
1,2,3
0011
mc,编码,量化
1
1
0
1
0
0
0
010
非mc,编码,量化
1
0
0
1
0
0
0
0001 00
帧内,量化
1
0
0
0
1
0
0
0000 110
mc,编码,兼容,量化
1
1
0
1
0
1
1,2,3
11
非mc,编码,兼容,量化
1
0
0
1
0
1
1,2,3
0001 01
非mc,非编码,兼容
0
0
0
0
0
1
1,2,3
0000 10
编码,兼容
0
0
0
1
0
0
4
0000 101
编码,兼容,量化
1
0
0
1
0
0
4
000 010
非编码,兼容
0
0
0
0
0
0
4
0000 0011
表13.29b MPEG-2 P图像帧宏块类型可变长编码表
Frame_motion_type
这个可选的2-比特码字指示宏块运动的预测,如表13.31所示。仅当picture_structure = 帧,frame_pred_frame_dct =“0”和表13.28,13.29和13.30中的[前项运动]或[后项运动] =“1”时,才存在。
Field_motion_type
这个可选的2-比特码字指示宏块运动预测,如表13.32所示。它仅当表13.28,13.29和13.30中的[前项运动]或[后项运动] =“1”和frame_motion_type场不存在时才存在。
类型
宏块量化
前向运动
后向运动
编码组
帧内宏块
时空权重码标志
允许时空权重类
码字
interp,非编码
0
1
1
0
0
0
0
10
interp,编码
0
1
1
1
0
0
0
11
bwd,非编码
0
0
1
0
0
0
0
010
bwd,编码
0
0
1
1
0
0
0
011
fwd,非编码
0
1
0
0
0
0
0
0010
fwd,编码
0
1
0
1
0
0
0
0011
帧内
0
0
0
0
1
0
0
0001 1
interp,编码,量化
1
1
1
1
0
0
0
0001 0
fwd,编码,量化
1
1
0
1
0
0
0
0000 11
bwd,编码,量化
1
0
1
1
0
0
0
0000 10
帧内,量化
1
0
0
0
1
0
0
0000 01
空间可伸缩B图像
interp,非编码
0
1
1
0
0
0
0
10
interp,编码
0
1
1
1
0
0
0
11
bwd,非编码
0
0
1
0
0
0
0
010
bwd,编码
0
0
1
1
0
0
0
011
fwd,非编码
0
1
0
0
0
0
0
0010
fwd,编码
0
1
0
1
0
0
0
0011
bwd,非编码,兼容
0
0
1
0
0
1
1,2,3
0001 10
bwd,编码,兼容
0
0
1
1
0
1
1,2,3
0001 11
fwd,非编码,兼容
0
1
0
0
0
1
1,2,3
0001 00
fwd,编码,兼容
0
1
0
1
0
1
1,2,3
0001 01
帧内
0
0
0
0
1
0
0
0000 110
表13.30a MPEG-2 B图像帧宏块类型可变长编码表
Dct_type
这个可选的比特指示宏块是帧或场的DCT编码。“1”= 场,“0”= 帧。仅当picture_structure =“11”,frame_pred_frame_dct =“0”,和表13.28,13.29和13.30中的[帧内宏块]或[编码组] =“1”时他才存在。
Quantizer_scale_code
这个可选的二进制数的值范围是1~31(0值被禁止)。它指示接收到的DCT系数的重构缩放因子。解码器一直使用这个值直到接收到另一个quantizer_scale_ code值。仅当表13.28,13.29和13.30中的[宏块量化] =“1”时,这个字段才存在。
类型
宏块量化
前向运动
后向运动
编码组
帧内宏块
时空权重码标志
允许时空权重类
码字
空间可伸缩B图像(接续)
interp,编码,量化
1
1
1
1
0
0
0
0000 111
fwd,编码,量化
1
1
0
1
0
0
0
0000 100
bwd,编码,量化
1
0
1
1
0
0
0
0000 101
帧内,量化
1
0
0
0
1
0
0
0000 0100
fwd,编码,兼容,量化
1
1
0
1
0
1
1,2,3
0000 0101
bwd,编码,兼容,量化
1
0
1
1
0
1
1,2,3
0000 0110 0
非编码,兼容
0
0
0
0
0
0
4
0000 0001 0
编码,量化,兼容
1
0
0
1
0
0
4
0000 0110 1
编码兼容
0
0
0
1
0
0
4
0000 0111 1
SNR可伸缩B图像
编码
0
0
0
1
0
0
0
1
编码,量化
1
0
0
1
0
0
0
01
非编码
0
0
0
0
0
0
0
001
表13.30b MPEG-2 B图像帧宏块类型可变长编码表
时空权重类
预测类型
运动向量计数
运动向量格式
编码
保留
00
0,1
场
2
场
01
2,3
场
1
场
01
0,1,2,3
帧
1
帧
10
0,2,3
双基
1
场
11
表13.31 MPEG-2帧运动类型码字
时空权重类
预测类型
运动向量计数
运动向量格式
编码
保留
00
0,1
场
1
场
01
0,1
16×18mc
2
场
10
0
双基
1
场
11
表13.32 MPEG-2场运动类型码字
可选运动向量
Marker_bit
它的通常值是“1”。仅当concealment_motion_vectors =“1”和表13.28,13.29和13.30中的[帧内宏块] =“1”时,他才存在。
Coded_block_pattern_420
这个可选的可变字长的码字被用来推导4:2:0编码块对(CBP)如表13.33所示。它仅当表13.28,13.29和13.30中的[编码对] =“1”时才存在,用来指示宏块中的哪个块有至少一个变换系数传送。编码块对数表示为:
P1P2P3P4P5P6
这儿对于任何存在参数的块[n] Pn =“1”,否则Pn =“0”。块编号(十进制格式)如图13.2所示。
Coded_block_pattern_1
它仅当chroma_format = 4:2:2和表13.28,13.29和13.30中的[编码对] =“1”时才存在。这个可选的2-位字段被用来扩展编码块对。
Coded_block_pattern_2
它仅当chroma_format = 4:4:4和表13.28,13.29和13.30中的[编码对] =“1”时才存在。这个可选的6-位字段被用来扩展编码块对。
CBP
编码
CBP
编码
60
111
62
0100
0
4
1101
24
0011
11
8
1100
36
0011
10
16
1011
3
0011
01
32
1010
63
0011
00
12
1001
1
5
0010
111
48
1001
0
9
0010
110
20
1000
1
17
0010
101
40
1000
0
33
0010
100
28
0111
1
6
0010
011
44
0111
0
10
0010
010
52
0110
1
18
0010
001
56
0110
0
34
0010
000
1
0101
1
7
0001
1111
61
0101
0
11
0001
1110
2
0100
1
19
0001
1101
35
0001
1100
38
0000
1100
13
0001
1011
29
0000
1011
49
0001
1010
45
0000
1010
21
0001
1001
53
0000
1001
41
0001
1000
57
0000
1000
14
0001
0111
30
0000
0111
50
0001
0110
46
0000
0110
22
0001
0101
54
0000
0101
42
0001
0100
58
0000
0100
15
0001
0011
31
0000
0011
1
51
0001
0010
57
0000
0011
0
23
0001
0001
55
0000
0010
1
43
0001
0000
59
0000
0010
0
25
0000
1111
27
0000
0001
1
37
0000
1110
39
0000
0001
0
26
0000
1101
0*
0000
0000
1
*4:2:0色度结构中不使用
表13.33 MPEG-2的coded_block_pattern_420可变长码表
块层
每个块层的数据包括系数数据。它的结构如图13.5所示。
Dct_dc_size_luminance
这个可选的可变长编码仅存在于Y帧内编码块中,指示跟随其后的dct_dc_differential的比特数。它的值如表13.34所示。
Dct_dc_differential
如果dct_dc_size_luminance 0,那么这个可选的可变长编码存在。它的值如表13.36所示。
Dct_dc_size_chrominance
这个可选的可变长编码仅存在于CbCr帧内编码块中,指示跟随其后的dct_dc_differential的比特数。它的值如表13.35所示。
Dct_dc_differential
如果dct_dc_size_chrominance 0,那么这个可选的可变长编码存在。它的值如表13.36所示。
Dct_coefficient_first
这个可选的可变长码字被用于非帧内编码块的第一个DCT系数,定义于表13.37,13.38,13.39和13.40中。
Dct_coefficient_next
最多63个可选的可变长码字,仅存在于I,P和B帧中。它们是跟随在第一个DCT系数之后的DCT系数,定义于表13.37,13.38,13.39和13.40中。
End_of_block
这个2-比特或4-比特值被用于指示没有额外非0的系数存在了。这个参数的值是“10”或“0110”。
DCT DC尺寸 亮度
码字
DCT DC尺寸 亮度
码字
0
100
6
1111 0
1
00
7
1111 10
2
01
8
1111 110
3
101
9
1111 1110
4
110
10
1111 1111 0
5
1110
11
1111 1111 1
表13.34 MPEG-2的dct_dc_size_luminance可变长码字表
DCT DC尺寸 色度
码字
DCT DC尺寸 色度
码字
0
00
6
1111 10
1
01
7
1111 110
2
10
8
1111 1110
3
110
9
1111 1111 0
4
1110
10
1111 1111 10
5
1111 0
11
1111 1111 11
表13.35 MPEG-2的dct_dc_size_chrominance可变长码字表
运动补偿
图13.14显示了基本运动补偿处理。运动补偿形式从前面解码的图像预测,它顺序从IDCT变换中融合系数数据(误差项)。
图13.14最简单的运动补偿处理
场预测
P图像的预测由两个最近的解码参考场而来。最简单的情况如图13.15所示,当预测一帧的第一个图像或当使用一帧中的场预测而使用。
预测一帧中的第二场也需要最近两场解码的参考场。如图13.16所示是第二个图像是底场,图13.17所示是第二个图像是顶场。
B图像的场预测是从最近两帧的两场而来的,如图13.18所示。
DCT DC 范围
DCT DC位数
码字(Y)
码字(CbCr)
额外码字
-2048~-1024
11
111111111
1111111111
00000000000~01111111111
-1023~-512
10
111111110
1111111110
0000000000~0111111111
-511~-256
9
11111110
111111110
000000000~011111111
-255~-128
8
1111110
11111110
00000000~01111111
-127~-64
7
111110
1111110
0000000~0111111
-63~-32
6
11110
111110
000000~011111
-31~-16
5
1110
11110
00000~01111
-15~-8
4
110
1110
0000~0111
-7~-4
3
101
110
000~011
-3~-2
2
01
10
00~01
-1
1
00
01
0
0
0
100
00
1
1
00
01
1
2~3
2
01
10
10~11
4~7
3
101
110
100~111
8~15
4
110
1110
1000~1111
16~31
5
1110
11110
10000~11111
32~63
6
11110
111110
100000~111111
64~127
7
111110
1111110
1000000~1111111
128~255
8
1111110
11111110
10000000~1111111
256~511
9
11111110
111111110
100000000~111111111
512~1023
10
111111110
1111111110
1000000000~1111111111
1024~2047
11
111111111
1111111111
10000000000~11111111111
表13.36 MPEG-2的dct_dc_differential可变长码字表
游程
级别
码字
EOB
10
0
1
1s
如果第一个系数
0
1
11s
不是第一个系数
0
2
0100
s
0
3
0010
1s
0
4
0000
110s
0
5
0010
0110
s
0
6
0010
0001
s
0
7
0000
0010
10s
0
8
0000
0001
1101
s
0
9
0000
0001
1000
s
0
10
0000
0001
0011
s
0
11
0000
0001
0000
s
0
12
0000
0000
1101
0s
0
13
0000
0000
1100
1s
0
14
0000
0000
1100
0s
0
15
0000
0000
1011
1s
0
16
0000
0000
0111
11s
0
17
0000
0000
0111
10s
0
18
0000
0000
0111
01s
0
19
0000
0000
0111
00s
0
20
0000
0000
0110
11s
0
21
0000
0000
0110
10s
0
22
0000
0000
0110
01s
0
23
0000
0000
0110
11s
0
24
0000
0000
0101
11s
0
25
0000
0000
0101
10s
0
26
0000
0000
0101
01s
0
27
0000
0000
0101
00s
0
28
0000
0000
0100
11s
0
29
0000
0000
0100
10s
0
30
0000
0000
0100
01s
注:
1.s = 级别的符号;“0”是正;s =“1”是负。
表13.37a MPEG-2的dct_coefficient_first和dct_coefficient_next为0的可变长码字表
游程
级别
码字
0
31
0000
0000
0100
00s
0
32
0000
0000
0011
000s
0
33
0000
0000
0010
111s
0
34
0000
0000
0010
110s
0
35
0000
0000
0010
101s
0
36
0000
0000
0010
100s
0
37
0000
0000
0010
011s
0
38
0000
0000
0010
010s
0
39
0000
0000
0010
001s
1
40
0000
0000
0010
000s
1
1
011s
1
2
0001
10s
1
3
0010
0101
s
1
4
0000
0011
00s
1
5
0000
0001
1011
s
1
6
0000
0000
1011
0s
1
7
0000
0000
1010
1s
1
8
0000
0000
0011
111s
1
9
0000
0000
0011
110s
1
10
0000
0000
0011
101s
1
11
0000
0000
0011
100s
1
12
0000
0000
0011
011s
1
13
0000
0000
0011
010s
1
14
0000
0000
0011
001s
1
15
0000
0000
0001
0011s
1
16
0000
0000
0001
0010s
1
17
0000
0000
0001
0001s
1
18
0000
0000
0001
0000s
2
1
0101
s
2
2
0000
100s
2
3
0000
0010
11s
2
4
0000
0001
0100
s
注:
1.s = 级别的符号;“0”是正;s =“1”是负。
表13.37b MPEG-2的dct_coefficient_first和dct_coefficient_next为0的可变长码字表
游程
级别
码字
2
5
0000
0000
0110
0s
3
1
0011
1s
3
2
0010
0100
s
3
3
0000
0001
1100
s
3
4
1111
0000
1001
1s
4
1
0011
0s
4
2
0000
0011
11s
4
3
1111
0001
0010
s
5
1
0001
11s
5
2
0000
0010
01s
5
3
0000
0000
1001
0s
6
1
0001
01s
6
2
0000
0001
1110
s
6
3
0000
0000
0001
0100s
7
1
0001
00s
7
2
0000
0001
0001
s
8
1
0000
111s
8
2
0000
0001
0001
s
9
1
0000
101s
9
2
0000
0000
1000
1s
10
1
0010
0111
s
10
2
0000
0000
1000
0s
11
1
0010
0011
s
11
2
0000
0000
0001
1001s
12
1
0010
0010
s
12
2
0000
0000
0001
1001s
13
1
0100
0000
s
13
2
0000
0000
0001
1000s
14
1
0000
0011
10s
14
2
0000
0000
0001
0111s
15
1
0000
0011
01s
15
2
0000
0000
0001
0110s
注:
1.s = 级别的符号;“0”是正;s =“1”是负。
表13.37c MPEG-2的dct_coefficient_first和dct_coefficient_next为0的可变长码字表
游程
级别
码字
16
1
0000
0010
00s
16
2
0000
0000
0001
0101s
17
1
0000
0001
1111
s
18
1
0000
0001
1010
s
19
1
0000
0001
1001
s
20
1
0000
0001
0111
s
21
1
0000
0001
0110
s
22
1
0000
0000
1111
1s
23
1
0000
0000
1111
0s
24
1
0000
0000
1110
1s
25
1
0000
0000
1110
0s
26
1
0000
0000
1101
1s
27
1
0000
0000
0001
1111s
28
1
0000
0000
0001
1110s
29
1
0000
0000
0001
1101s
30
1
0000
0000
0001
1100s
31
1
0000
0000
0001
1011s
ESC
0000
01
注: 1.s = 级别的符号;“0”是正;s =“1”是负。
表13.37d MPEG-2的dct_coefficient_first和dct_coefficient_next为0的可变长码字表
游程
级别
码字
EOB
0110
0
1
10s
0
2
110s
0
3
0111
s
0
4
1110
0s
0
5
1110
1s
0
6
0001
01s
0
7
0001
00s
0
8
1111
011s
0
9
1111
100s
0
10
0010
0011
s
0
11
0010
0010
s
0
12
1111
1010
s
0
13
1111
1011
s
0
14
1111
1110
s
注:1.s = 级别的符号;“0”是正;s =“1”是负。
表13.38a MPEG-2的dct_coefficient_first和dct_coefficient_next为1的可变长码字表
游程
级别
码字
0
15
1111
1111
s
0
16
0000
0000
0111
11s
0
17
0000
0000
0111
10s
0
18
0000
0000
0111
01s
0
19
0000
0000
0111
00s
0
20
0000
0000
0110
11s
0
21
0000
0000
0110
10s
0
22
0000
0000
0110
01s
0
23
0000
0000
0110
00s
0
24
0000
0000
0101
11s
0
25
0000
0000
0101
10s
0
26
0000
0000
0101
01s
0
27
0000
0000
0101
00s
0
28
0000
0000
0100
11s
0
29
0000
0000
0100
10s
0
30
0000
0000
0100
01s
0
31
0000
0000
0100
00s
0
32
0000
0000
0011
000s
0
33
0000
0000
0100
111s
0
34
0000
0000
0100
110s
0
35
0000
0000
0100
101s
0
36
0000
0000
0100
100s
0
37
0000
0000
0100
011s
0
38
0000
0000
0100
010s
0
39
0000
0000
0100
001s
0
40
0000
0000
0100
000s
1
1
010s
1
2
0011
1s
1
3
1111
001s
1
4
0010
0111
s
1
5
0010
0000
s
1
6
0000
0000
1011
s
注:
1.s = 级别的符号;“0”是正;s =“1”是负。
表13.38b MPEG-2的dct_coefficient_first和dct_coefficient_next为1的可变长码字表
游程
级别
码字
1
7
1111
1111
1010
1s
1
8
0000
0000
0011
111s
1
9
0000
0000
0011
110s
1
10
0000
0000
0011
101s
1
11
0000
0000
0011
100s
1
12
0000
0000
0011
011s
1
13
0000
0000
0011
010s
1
14
0000
0000
0011
001s
1
15
0000
0000
0001
0011s
1
16
0000
0000
0001
0010s
1
17
0000
0000
0001
0001s
1
18
0000
0000
0001
0000s
2
1
0010
1s
2
2
0000
111s
2
3
1111
1100
s
2
4
0000
0011
00s
2
5
0000
0000
1010
0s
3
1
0011
1s
3
2
0010
0110
s
3
3
0000
0001
1100
s
3
4
0000
0000
1001
1s
4
1
0001
10s
4
2
1111
1101
s
4
3
0000
0001
0010
s
5
1
0001
11s
5
2
0000
0010
0s
5
3
0000
0000
1001
0s
6
1
0000
110s
6
2
0000
0001
1110
s
6
3
0000
0000
0001
0100s
7
1
0000
100s
7
2
0000
0001
0101
s
注:
1.s = 级别的符号;“0”是正;s =“1”是负。
表13.38c MPEG-2的dct_coefficient_first和dct_coefficient_next为1的可变长码字表
游程
级别
码字
8
1
0000
101s
8
2
0000
0001
00001
s
9
1
1111
000s
9
2
0000
0000
1000
1s
10
1
1111
010s
10
2
0000
0000
1000
0s
11
1
0010
0001
s
11
2
0000
0000
0001
1010s
12
1
0010
0101
s
12
2
0000
0000
0001
1001s
13
1
0010
0100
s
13
2
0000
0000
0001
1000s
14
1
0000
0010
1s
14
2
0000
0000
0001
0111s
15
1
0000
0011
1s
15
2
0000
0000
0001
0110s
16
1
0000
0011
01s
16
1
0000
0000
0001
0101s
17
1
0000
0001
1111
s
18
1
0000
0001
1010
s
19
1
0000
0001
1001
s
20
1
0000
0001
0111
s
21
1
0000
0001
0110
s
22
1
0000
0000
1111
1s
23
1
0000
0000
1111
0s
24
1
0000
0000
1110
1s
25
1
0000
0000
1110
0s
26
1
0000
0000
1101
1s
27
1
0000
0000
0001
1111s
28
1
0000
0000
0001
1110s
29
1
0000
0000
0001
1101s
30
1
0000
0000
0001
1100s
31
1
0000
0000
0001
1011s
ESC
0000
01
注:
1.s = 级别的符号;“0”是正;s =“1”是负。
表13.38d MPEG-2的dct_coefficient_first和dct_coefficient_next为1的可变长码字表
游程长度
码字
0
0000
00
1
0000
01
2
0000
10
∶
∶
∶
62
1111
10
63
1111
11
表13.39 dct_coefficient_first和dct_coefficient_next的跟随一个逃逸码的游程编码
电平
码字
-2047
1000
0000
0001
-2046
1000
0000
0010
∶
-1
1111
1111
1111
禁止
0000
0000
0000
1
0000
0000
0001
∶
2047
0111
1111
1111
表13.40 dct_coefficient_first和dct_coefficient_next的跟随一个逃逸码的电平编码
图13.15一帧图像中的第一场或预测场的P帧预测
图13.16第二场(底场)图像的P帧预测
图13.17第二场(顶场)图像的P帧预测
帧预测
P帧的预测是由最近的解码图像而来,如图13.19所示。参考图像可能已经编码成或者两个场或者一个帧。
B图像的预测是由两个最近的参考帧而来,如图13.20所示。每个参考帧可能已经编码成或者两个场或者一个帧。
图13.18 B场或B帧的场预测
图13.19 P图像的帧预测
图19.20 B图像的帧预测
- 《视频解密》中文版(第四版)第十三章 MPEG-2(第二部分)
- 《视频解密》中文版(第四版)第十二章 MPEG-1
- 《视频解密》中文版(第四版) 第六章 数字视频接口(第二部分)
- 《视频解密》中文版(第四版) 第七章 数字视频处理(第二部分)
- 《视频解密》中文版(第四版)第八章 NTSC,PAL和SECAM概述(第二部分)
- 《视频解密》中文版(第四版)第十章 H.261和H.263(第二部分)
- 《视频解密》中文版(第四版) 第二章
- 《视频解密》中文版(第四版)第九章NTSC和PAL数字编码和解码(第二部分)
- 《视频解密》中文版(第四版)第八章 NTSC,PAL和SECAM概述(第四部分)
- 《视频解密》中文版(第四版) 第四章 视频信号概述
- 《视频解密》中文版(第四版) 第六章 数字视频接口(第一部分)
- 《视频解密》中文版(第四版) 第六章 数字视频接口(第三部分)
- 《视频解密》中文版(第四版) 第七章 数字视频处理(第一部分)
- 《视频解密》中文版(第四版)第八章 NTSC,PAL和SECAM概述(第一部分)
- 《视频解密》中文版(第四版)第八章 NTSC,PAL和SECAM概述(第三部分)
- 《视频解密》中文版(第四版)第十章 H.261和H.263(第一部分)
- 第十三章 MPEG-2(第一部分)
- 《视频解密》中文版(第四版) 第一章
- 2013.12.21网站更新记录
- 动态规划之01背包问题
- TextureCache SpriteFrameCache
- Verilog的块语句
- NSRange 使用方法
- 《视频解密》中文版(第四版)第十三章 MPEG-2(第二部分)
- Lua 临时博文
- JAVA采用JDBC连接操作数据库详解
- 关于org.apache.catalina.session.StandardManager doLoad错误的解决
- fzuoj 2149 Reverse Game
- 五种常见的ASP.NET应用程序安全缺陷
- hadoop2.2.0 边角料(二)
- android中异步加载网络图片
- 手机号码归属地查询接口大全(七种)