H264语法分析( 二 )


句法
C
Desc
(){/* 为统计出来的数据长度*/
/*等于0 */
All
f(1)
/*当前NAL的优先级,取值范围0-3 */
All
u(2)
/* NAL类型,见表2描述*/
All
u(5)
=0
for(i=1;i
if(i+2
/* 伪起始码,需要删除0x03这个字节*/
[++]
All
b(8)
[++]
All
b(8)
i+=2/*取出前两个0x00后,跳过0x03 */
/* equal to 0x03 */
All
f(8)
}else{
[++]/*继续读取后面的字节*/
All
b(8)
}
}
表3
2.2序列参数集(SPS)
句法
C
Desc
sp(){
/*指明所用的 */
0
u(8)
0
u(1)
0
u(1)
0
u(1)
/* equal to 0 */
0
u(5)
/*指明所用的Level */
0
u(8)

H264语法分析

文章插图
/*指明本序列参数集的id号,0-31,被图像集引用,编码需要产生新的序列集时,使用新的id,而不是改变原来参数集的内容*/
0
ue(v)
inus4/*为读取元素服务,标识图像的解码顺序,的解码函数是ue(v),其中v=inus4+4,该元素同时指明的最大值=2( inus4+4)*/
0
ue(v)
/*指明poc的编码方法,poc标识图像的播放顺序,poc可以由计算,也可以显示传送 。poc共三种计算方式*/
0
ue(v)
if(==0)
/*指明变量的值,=2(+4) */
0
ue(v)
else if(==1){
/*等于1时,元素[0]和[1]不在片头中出现,并且它们的默认值是0,等于0时,上述两元素出现的片头中*/
0
u(1)
ic/*用来计算非参考帧或场的poc,[-231,231-1] */
0
se(v)
/*计算帧的底场的poc */
0
se(v)
/*用来解码poc,[0.255] */
0
ue(v)
for(i=0;i
[i]/*用来解码poc,对于循环中的每个元素指定一个偏移*/
0
se(v)
}
/*参考帧队列可达到的最大长度,[0,16] */
0
ue(v)
/*为1,允许slice 中的不连续*/
0
u(1)
s1/*本元素加1,指明以宏块为单位的图像宽度=us1+1 */
0
ue(v)
/*本元素加1,指明以宏块为单位的图像高宽度bs=+1 */
0
ue(v)
/*等于0表示本序列中所有图像均为帧编码;等于1,表示可能是帧,也可能场或帧场自适应,具体编码方式由其它元素决定 。结合前一元素:=(2-)* */
0
ue(v)
if()
/*指明本序列是否是帧场自适应模式:
=1,全部是帧
=0,=0,帧场共存
=0,=1,帧场自适应和场共存*/
0
u(1)
_flag/*用于指明B片的直接和skip模式下的运动矢量的计算方式*/
0
u(1)
/*解码器是否要将图像裁剪后输出,如果是,后面为裁剪的左右上下的宽度*/
0
u(1)
if(){
et
0
ue(1)
set
0
ue(1)
t
0
ue(1)
fset
0
ue(1)
}
/*指明vui子结构是否出现在码流中,vui子结构在附录中指明,用于表征视频格式的信息*/
0
u(1)
if()
()
0
()
0
}
表4
2.4片层句法
1片层句法(不分区)
句法
C
Desc
(){
()
2
()/* allof ()*/
2|3|4
bits()
2
}
表6
2片层A分区句法
句法
C
Desc
(){
()
2
2
ue(v)
()/* only2 parts of ()*/
2
bits()
2
}
表7
3片层B分区句法
句法
C
Desc
(){
3
ue(v)
if()
3
()/* only3 parts of ()*/
3
ue(v)