转载:

第 26 页共 99页
marker_bit 1 bslbf
vop_time_increment 1-16 bslbf
marker_bit 1 bslbf
vop_coding_type 2 uimsbf
intra_dc_vlc_thr 3 uimsbf
if (vop_coding_type != “I”)
vop_fcode_forward 3 uimsbf
if (vop_coding_type == “B”)
vop_fcode_backward 3 uimsbf
}
}
Motion Shape Texture
motion_shape_texture() { No. of bits Mnemonic
combined_motion_shape_texture()
}
combined_motion_shape_texture() { No. of bits Mnemonic
do{
macroblock()
} while (nextbits_bytealigned() != resync_marker &&
nextbits_bytealigned()
!= ‘000 0000 0000 0000 0000 0000’)
}
3.2.5 Macroblock
macroblock() { No. of bits Mnemonic
if (vop_coding_type != “B”) {
if (vop_coding_type == “P”)
not_coded 1 bslbf
if (!not_coded || vop_coding_type == “I)
mcbpc 1-9 vlclbf
if (!not_coded || vop_coding_type == “I”) {
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 27 页共 99页
if (!short_video_header &&
(derived_mb_type == 3 ||
derived_mb_type == 4))
ac_pred_flag 1 bslbf
if (derived_mb_type != “stuffing”)
cbpy 1-6 vlclbf
else
return()
if (derived_mb_type == 1 ||
derived_mb_type == 4)
dquant 2 bslbf
if (interlaced)
interlaced_information()
if ((derived_mb_type == 0 || derived_mb_type == 1)
&& (vop_coding_type == “P”)) {
motion_vector(“forward”)
if (interlaced && field_prediction)
motion_vector(“forward”)
}
if (derived_mb_type == 2) {
for (j=0; j < 4; j++)
motion_vector(“forward”)
}
for (i = 0; i < block_count; i++)
block(i)
}
}
else {
if (co_located_not_coded != 1) {
modb 1-2 vlclbf
if (modb != ‘1’) {
mb_type 1-4 vlclbf
if (modb == ‘00’)
cbpb 6 vlclbf
if (mb_type != “1” && cbpb!=0)
dbquant 1-2 vlclbf
if (interlaced)
interlaced_information()
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 28 页共 99页
if (mb_type == ‘01’ ||
mb_type == ‘0001’) {
motion_vector(“forward”)
if (interlaced && field_prediction)
motion_vector(“forward”)
}
if (mb_type == ‘01’ || mb_type == ‘001’) {
motion_vector(“backward”)
if (interlaced && field_prediction)
motion_vector(“backward”)
if (mb_type == “1”)
motion_vector(“direct”)
for (i = 0; i < block_count; i++)
block(i)
}
}
}
NOTE: The value of block_count is 6 in the 4:2:0 format.
Motion vector
motion_vector ( mode ) { No. of bits Mnemonic
if ( mode == ?direct“ ) {
horizontal_mv_data 1-13 vlclbf
vertical_mv_data 1-13 vlclbf
}
else if ( mode == ?forward“ ) {
horizontal_mv_data 1-13 vlclbf
if ((vop_fcode_forward != 1) && (horizontal_mv_data != 0))
horizontal_mv_residual 1-6 uimsbf
vertical_mv_data 1-13 vlclbf
if ((vop_fcode_forward != 1) && (vertical_mv_data != 0))
vertical_mv_residual 1-6 uimsbf
}
else if ( mode == ?backward“ ) {
horizontal_mv_data 1-13 vlclbf
if ((vop_fcode_backward != 1) && (horizontal_mv_data != 0))
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 29 页共 99页
horizontal_mv_residual 1-6 uimsbf
vertical_mv_data 1-13 vlclbf
if ((vop_fcode_backward != 1) && (vertical_mv_data != 0))
vertical_mv_residual 1-6 uimsbf
}
}
Interlaced Information
interlaced_information( ) { No. of bits Mnemonic
if ((derived_mb_type == 3) || (derived_mb_type == 4) ||
(cbp != 0) )
dct_type 1 bslbf
if ( ((vop_coding_type == “P”) &&
((derived_mb_type == 0) || (derived_mb_type == 1)) ) ||
((vop_coding_type == “B”) && (mb_type != “1”)) ) {
field_prediction 1 bslbf
if (field_prediction) {
if (vop_coding_type == “P” ||
(vop_coding_type == “B” &&
mb_type != “001”) ) {
forward_top_field_reference 1 bslbf
forward_bottom_field_reference 1 bslbf
}
if ((vop_coding_type == “B”) &&
(mb_type != “0001”) ) {
backward_top_field_reference 1 bslbf
backward_bottom_field_reference 1 bslbf
}
}
}
}
3.2.6 Block
The detailed syntax for the term “DCT coefficient” is fully described in clause 7.
block( i ) { No. of bits Mnemonic
last = 0
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 30 页共 99页
if(derived_mb_type == 3 || derived_mb_type == 4) {
if(short_video_header == 1)
intra_dc_coefficient 8 uimsbf
else if (use_intra_dc_vlc == 1) {
if ( i<4 ) {
dct_dc_size_luminance 2-11 vlclbf
if(dct_dc_size_luminance != 0)
dct_dc_differential 1-12 vlclbf
if (dct_dc_size_luminance > 8)
marker_bit 1 bslbf
} else {
dct_dc_size_chrominance 2-12 vlclbf
if(dct_dc_size_chrominance !=0)
dct_dc_differential 1-12 vlclbf
if (dct_dc_size_chrominance > 8)
marker_bit 1 bslbf
}
}
}
if ( pattern_code[i] )
while ( ! last )
DCT coefficient 3-24 vlclbf
}
NOTE : “last” is defined to be the LAST flag resulting from reading the most recent DCT coefficient.
3.3. 语义
3.3.1 Visual Object Sequence 和Visual Object
Visual_object_sequence_start_code:00 00 01 B0。
Profile_and_level_indication:8 比特整数,用来指示profile和level信息。如表3-2 所示:
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 31 页共 99页
我们只给出我们需要的部分,如果码流中解出的profile和level信息不符合我们解码器的要
求,将会停止解码。
表 3-2 profile和level信息的码表
Profile/Level Code
Simple Profile/Level 1 00000001
Simple Profile/Level 2 00000010
Simple Profile/Level 3 00000011
Simple Profile/Level 0 00001000
Advanced Simple Profile/Level 0 11110000
Advanced Simple Profile/Level 1 11110001
Advanced Simple Profile/Level 2 11110010
Advanced Simple Profile/Level 3 11110011
Advanced Simple Profile/Level 4 11110100
Advanced Simple Profile/Level 5 11110101
Reserved for Escape 11111111
Visual_object_sequence_end_code:00 00 01 B1
is_visual_object_identifier:这是一个1 比特码,当它被置为1 时,表明码流后面有版本和优
先级信息;当它被置为0 时,没有版本和优先级信息。
Visual_object_verid:这是一个4 比特码,用来指示视觉对象(visual object)的版本号,它的含
义见表3-3,如果这个码字不存在,visual_object_verid的值为‘0001’。
一个版本号对应了在某个表格中所定义的对象类型。例如版本号为’0001’就对应表9-1 中
所定义的对象类型,包括simple,core,main等;我们的Advanced Simple Profile支持simple
object和Advanced Simple Object两种类型,对应的版本号分别为‘0001’和‘0101’,即在
表9-1 中定义了simple object,在表AMD4-13 中定义了Advanced Simple Object。所以我们
遇到的版本号只可能是这两种,如果不是,则要么该码流我们不可解,要么码流发生错误,
我们只能停止解码。
对其他几个版本号对应的表格定义了哪些对象类型这里就不再给出了。
表 3-3 视觉对象版本的含义
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 32 页共 99页
Visual_object_verid Meaning
0000 reserved
0001 object type listed in Table 9-1
0010 object type listed in Table V2-39
0011 reserved
0100 object type listed in Table AMD3-40
0101 object type listed in Table AMD4-13
0110 - 1111 reserved
Visual_object_priority:这是一个3 比特码,用来指示视觉对象的优先级。我们可以忽略这个
码字。
Visual_object_type:这是一个4 比特码,用来指示视觉对象的类型,如表3-4 所示:我们
只用到video ID,遇到视频类型,我们就不继续解码。
表 3-4 视觉对象类型的含义
code visual object type
0000 reserved
0001 video ID
0010 still texture ID
0011 mesh ID
0100 FBA ID
0101 3D mesh ID
01101 reserved
: :
: :
1111 reserved
Video_object_start_code:这是一个32 比特的起始码字,前27 位是‘0000 0000 0000 0000 0000
0001 000’,剩下的5 个比特从‘00000’到‘11111’。本来剩下的5 个比特用来给视频对象
做标记用的,这里我们用不上。因此我们寻找video_object_start_code 时,可以把最后5 个
比特首先置为0,再去判断,这样这个起始码字就唯一了,我们就可以把它看成一个取值唯
一的起始码字。
Video_signal_type:当此标志设为1,指示了视频信号类型的存在。这些信息是在做格式转
换的时候用的。
Video_format:这是一个3 比特整数,它指示了图像在被编码前的格式。它的含义见下表。
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 33 页共 99页
如果 video_signal_type()不存在,则视频格式被假定为“unspecified video format”。
Video_format的含义
video_format Meaning
000 Component
001 PAL
010 NTSC
011 SECAM
100 MAC
101 Unspecified video format
110 Reserved
111 Reserved
Video_range:这是一个1 比特标志,用来指示黑色的值和亮度以及色差信号的范围。
Colour_description:这是一个1 比特标志,置为1 时指示了colour_primaries,
transfer_charateristics 和matrix_coefficients在码流中存在。
Colour_primaries:这是一个8 比特整数,定义了源图像基色(source primaries)的色度坐标
(chromaticity coordinates)。如下表所示:
Colour Primaries
Value Primaries
0 (forbidden)
1 ITU-R Recommendation BT.709
primary x y
green 0,300 0,600
blue 0,150 0,060
red 0,640 0,330
white D65 0,3127 0,3290
2 Unspecified Video
Image characteristics are unknown.
3 Reserved
4 ITU-R Recommendation BT.470-2 System M
primary x y
green 0,21 0,71
blue 0,14 0,08
red 0,67 0,33
white C 0,310 0,316
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 34 页共 99页
5 ITU-R Recommendation BT.470-2 System B, G
primary x y
green 0,29 0,60
blue 0,15 0,06
red 0,64 0,33
white D65 0,3127 0,3290
6 SMPTE 170M
primary x y
green 0,310 0,595
blue 0,155 0,070
red 0,630 0,340
white D65 0,3127 0,3290
7 SMPTE 240M (1987)
primary x y
green 0,310 0,595
blue 0,155 0,070
red 0,630 0,340
white D65 0,3127 0,3290
8 Generic film (colour filters using Illuminant C)
primary x y
green 0,243 0,692 (Wratten 58)
blue 0,145 0,049 (Wratten 47)
red 0,681 0,319 (Wratten 25)
9-255 Reserved
如果码流中不存在video_signal_type()或者color_description 是0,那么色度坐标被假设为与
colour_primaries 等于1 时一致。
Transfer_characteristics:这个8 比特整数描述了源图象的变换特征,见下表。
变换特征
Value Transfer Characteristic
0 (forbidden)
1 ITU-R Recommendation BT.709
V = 1,099 Lc0,45 - 0,099
for 1? Lc ? 0,018
V = 4,500 Lc
for 0,018> Lc ? 0
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 35 页共 99页
2 Unspecified Video
Image characteristics are unknown.
3 reserved
4 ITU-R Recommendation BT.470-2 System M
Assumed display gamma 2,2
5 ITU-R Recommendation BT.470-2 System B, G
Assumed display gamma 2,8
6 SMPTE 170M
V = 1,099 Lc0,45 - 0,099
for 1? Lc ? 0,018
V = 4,500 Lc
for 0,018> Lc ? 0
7 SMPTE 240M (1987)
V = 1,1115 Lc0,45 - 0,1115
for Lc? 0,0228
V = 4,0 Lc
for 0,0228> Lc
8 Linear transfer characteristics
i.e. V = Lc
9 Logarithmic transfer characteristic (100:1 range)
V = 1.0-Log10(Lc)/2
for 1= Lc = 0.01
V= 0.0
for 0.01> Lc
10 Logarithmic transfer characteristic (316.22777:1 range)
V = 1.0-Log10(Lc)/2.5
for 1= Lc = 0.0031622777
V= 0.0
for 0.0031622777> Lc
11-255 reserved
当码流中不存在video_signal_type()或者colour_description 为0 时,变换特征假定为同
transfer_charateristics 等于1 时一致。
Matrix_coefficients:这个8 比特整数描述了从红、绿、蓝三原色产生亮度和色度信号时使用
的矩阵系数,它的定义见下表:
在这个表中:
E’Y 是一个 0~1之间的模拟量;
E’PB 和 E’PR 是-0.5~0.5之间的模拟量;
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 36 页共 99页
E’R, E’G和 E’B 是0~1之间的模拟量;
白色定义为 E’y=1, E’PB=0, E’PR=0; E’R =E’G =E’B=1.
Y, Cb 和Cr 同 E’Y, E’PB和E’PR 的相关性用下面的式子计算:
对 n比特视频:
如果video_range=0:
Y = ( 219 * 2n-8 * E’Y ) + 2n-4.
Cb = ( 224 * 2n-8 * E’PB ) + 2n-1
Cr = ( 224 * 2n-8 * E’PR ) + 2n-1
如果 video_range=1:
Y = ((2n -1) * E’Y )
Cb = ((2n -1) * E’PB ) + 2n-1
Cr = ((2n -1) * E’PR ) + 2n-1
以8比特视频为例:
video_range=0 给出Y的范围为16到235,Cb和Cr 的范围从16到240;
video_range=1 给出Y的范围为0到255,Cb和Cr 的范围从06到255。
矩阵系数
Value Matrix
0 (forbidden)
1 ITU-R Recommendation BT.709
E’Y = 0,7152 E’G + 0,0722 E’B + 0,2126 E’R
E’PB = -0,386 E’G + 0,500 E’B -0,115 E’R
E’PR = -0,454 E’G - 0,046 E’B + 0,500 E’R
2 Unspecified Video
Image characteristics are unknown.
3 reserved
4 FCC
E’Y = 0,59 E’G + 0,11 E’B + 0,30 E’R
E’PB = -0,331 E’G + 0,500 E’B -0,169 E’R
E’PR = -0,421 E’G - 0,079 E’B + 0,500 E’R
5 ITU-R Recommendation BT.470-2 System B, G
E’Y = 0,587 E’G + 0,114 E’B + 0,299 E’R
E’PB = -0,331 E’G + 0,500 E’B -0,169 E’R
E’PR = -0,419 E’G - 0,081 E’B + 0,500 E’R
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
第 37 页共 99页
6 SMPTE 170M
E’Y = 0,587 E’G + 0,114 E’B + 0,299 E’R
E’PB = -0,331 E’G + 0,500 E’B -0,169 E’R
E’PR = -0,419 E’G - 0,081 E’B + 0,500 E’R
7 SMPTE 240M (1987)
E’Y = 0,701 E’G + 0,087 E’B + 0,212 E’R
E’PB = -0,384 E’G + 0,500 E’B -0,116 E’R
E’PR = -0,445 E’G - 0,055 E’B + 0,500 E’R
8-255 reserved
当码流中不存在video_signal_type()或者colour_description 为0,矩阵系数被假设为与
matrix_coefficient 等于1 时一样;
当 video_signal_type()在码流中不存在时,video_range 被假设为0(对8 比特视频,Y 从16
到235)。
对于上面的和video_signal_type相关的信号,我只是按照标准翻译,它的具体含义我现在也
不明白,大概与显示有关系,当以后需要涉及到显示的时候,可以进一步加深理解。
User_data_start_code:32 比特的起始码字‘00 00 01 B2’。它指示了用户数据的开始,用户
数据持续到出现下一个起始码字为止。
User_data:这个8 比特整数可以为任意值。用户数据由用户定义,用来指明某种特殊应用,
对我们来说,除非是我们自己定义的信息,否则直接扔掉,对解码不会有影响。
3.3.2 Video Object Layer
video_object_layer_start_code:这是一个32 比特的码字,前28 个比特为‘0000 0000 0000 0000
0000 0001 0010’,后4 个比特从‘0000’到‘1111’,后面4 个比特用来标识一个视频层。
我们不管那么多,我们把后面四位全部认为是0 好了,在码流解析的时候,从码流中读取
32 比特码字,在判断它是不是video_object_layer_start_code之前,首先把它的最后四位全部
置为0,再去同我们定义的起始码字进行比较。
Short_video_header:这个码字在码流中是不存在的,我们只能通过起始码字来判断,如果我
们搜索到起始码字为video_object_layer_start_code,那就表明当前码流不是短头格式的码流,
short_video_header 码字为1。短头格式是为了兼容263 编码的,它的详细内容在后面再给出。
Video_plane_with_short_header():这是一个压缩视频平面的语法层,它只包含使用短头格式
时所能使用的有限的语法子集,这个在后面再详细给出。
Random_accessible_vol:这个标志为1 用来指示vol 中每一个vop 都是可以单独解码的。如
果vol中所有的vop都是内部编码的vop,那么上述条件可以满足,于是random_accessible_vol
就可以被设置为1。Random_accessible_vol对解码过程没有帮助,我们把它直接扔掉即可。
这个码字为了协助随机访问和编辑而特意设计的。如果vol中任何一个vop不是内部编码的,
或者其他一些条件不能满足,那么此标志必须设置为0。
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc

MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-03-2章相关推荐

  1. MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-03-1章

    转载: 第 13 页共 99页 第三章 ASP码流语法和语义 3.1. 准备知识 3.1.1 MPEG4码流中的术语和函数 bslbf:Bit string, left bit first.比特串,左 ...

  2. MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-03-3章

    转载: 第 38 页共 99页 Video_object_type_indication:指示当前码流所使用的对象类型,它决定了后面的码流所能使 用的工具,见表3-5: 表 3-5 视频对类象型指示 ...

  3. MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-04-1章

    转载: 第四章 解码流程 这一章对MPEG4 ASP的解码流程作一个完整的介绍.首先给出解码框图,然后按照解 码的先后顺序对每一个功能模块进行详细的说明. 4.1. 解码框图 码 流 解 析 运动向量 ...

  4. MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-03-4章

    转载: 第 50 页共 99页 表 3-19 I-VOP和P-VOP中cbpy的变长码表 Code cbpy(intra-MB) (12 34) cbpy(inter-MB), (12 34) 001 ...

  5. mpeg4标准包含{xvid\divx,h264\avc}

    "MPEG-4由一系列的子标准组成,被称为部..... ............................ 第二部(ISO/IEC 14496-2):视讯:定义了一个对各种视觉信息(包 ...

  6. 【Codecs系列】mpeg1、mpeg2和mpeg4标准对比分析和总结

    Date: 2018.11.2 mpeg1.mpeg2和mpeg4标准对比 0.参考 (1). MPEG2.MPEG4.H264的差异和简介 (2). MPEG-2标准总结文档 (3). mpeg1. ...

  7. MPEG1、MPEG2、MPEG4标准比较

    MPEG1的标准制定于1992年左右,它是将视频数据压缩成1-2MB/S的标准数据流,对于动作不激烈的视频信号能获得较好的图像质量.但如果图像对象动作激烈时,图像有可能产生马赛克现象,此种标准没有定义 ...

  8. 【Android FFMPEG 开发】音视频基础 和 FFMPEG 编译 ( 音视频基础 | MPEG-4 标准 | Android 开发环境 | FFMPEG 交叉编译 | 安卓项目导入配置 )

    本篇博客代码及资源下载 : https://download.csdn.net/download/han1202012/10382762 文章目录 一. 音视频基础 1. 音频基础 (1) 声音要素 ...

  9. 利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包

    原文:利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包 因为业务需要,项目中需要把asp.netmvc项目打包成exe安装程序给客户 ...

最新文章

  1. C 语言编程 — 结构体的数据类型转换
  2. weblogic ssrf漏洞复现
  3. 鼻塞用鼻喷剂-调研(成分+刺激性)
  4. JUnit4学习笔记(二):参数化测试与假定(Assumption)
  5. ShardedJedisPool 中可用连接数的小bug
  6. HDU2050 折线分割平面【组合】
  7. PIL Error, TypeError: Cannot handle this data type:(1, 1), <i8
  8. Vulkan教程 - 18 阶段性总结
  9. 夜间灯光数据dn值_探讨DMSPOLS夜间灯光数据的校正
  10. LV4500二维码扫描器对接到安卓访客一体机系统应用-拓展扫描二维码登记访客功能
  11. flex实现四个元素分布在盒子的四个角
  12. python函数快查快用
  13. Debezium同步之oracle rac数据到oracle单机的安装步骤
  14. 学而滑稽之,不亦乐乎
  15. TextView添加中划线、下划线等
  16. 关灯后灯常亮、微亮、闪烁——多种原因分析
  17. 如何最有效的采集APP数据
  18. 若依框架获取和修改当前登录用户信息
  19. 系统中的obj文件、dll文件、so文件、lib文件、exe文件、vcproj文件、sln文件
  20. Dark GDK 初体验

热门文章

  1. python设置internet_使用Python在Windows中设置代理设置(使用InternetSetOption)
  2. Exchange 2010邮件服务器的搭建和部署
  3. 解密iPhone的固件
  4. python allure报告_Pytest+Allure 定制报告
  5. linux hadoop 关系,最全hadoop架构总结
  6. (附源码)node.js基于vue的化妆品销售管理系统的设计与实现 毕业设计151314
  7. Bloom Filter布隆过滤器(解决redis缓存穿透)
  8. 64. Extjs中grid 的ColumnModel 属性配置
  9. 反转!以视频搜视频,这批 AI 程序员要逆天了!
  10. CentOS6安装dovecot并提供sasl功能