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

来源:互联网 发布:legion软件下载 编辑:程序博客网 时间:2024/04/19 13:07
转载:

13 页共 99
第三章 ASP码流语法和语义
3.1. 准备知识
3.1.1 MPEG4码流中的术语和函数
bslbfBit string, left bit first。比特串,左边的bit 在前。
UimsbfUnsigned integer, most significant bit first.无符号整数,最有意义的bit在前。
SimsbfSigned integer, in twos complement format, most significant (sign) bit first.有符号整数,
以二进制补码形式表示,最后意义的bit 在前。
VlclbfVariable length code, left bit first。变长码字,左边的bit在前。
next_bits():返回码流中下面的一定数量的bit,一般用于寻找起始码字。
例如,while(next_bits() == user_data_start_code) { user_data() }
bytealigned():判断当前位置是否字节对齐的函数。如果当前位置在字节的结尾,即下一个
bit属于下一个新的字节,返回1;否则,返回0
nextbits_bytealigned():返回码流中从下一个字节对齐的位置开始的一定数量的bit,一般用
于搜索起始码字。注意如果下一个字节对齐的位置开始第一个字节为
0111111,则表示该字节为填充码字,应该直接扔掉该码字,继续从下一个
字节开始取一定数量的bit。例如,
while(nextbits_bytealigned() == resync_marker) { video_packet_header() }
next_start_code()
next_start_code() { Bit 数存储方法
zero_bit 1 ‘0’
while (!bytealigned())
one_bit 1 ‘1’
}
如果编码时,往输出流文件中写如码流信息时,当下一个需要写入的码字是一个起始码,
而当前位置不是字节对齐时,需要写入填充bit,直到下一个字节对齐的位置,具体在后面
进一步说明。next_start_code()函数就是从码流中读出这些填充bit,并舍弃。
next_resync_marker()
next_resync_marker() { No. of bits Mnemonic
zero_bit 1 ‘0’
while (!bytealigned())
one_bit 1 ‘1’
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
14 页共 99
}
这个函数同next_start_code()类似,只不过是为resync_marker 服务的。
Reserved, forbidden and marker_bit
Reserved表示这个码字可能用来作为标准将来的扩展。
Forbidden 表示表示这个码字是被标准禁止的,为了防止起始码字的竞争,也就是防止码流中可
能出现的起始码字。
Marker_bit表示这个bit1,为了防止出现起始码竞争而定义的。
Zero_bit表示这个bit0
整数的除法的定义比较多,也比较烦,下面归纳一下:
/ 整数除法,结果往绝对值等于0 的方向截取。例如, 7/4 -7/-4 等于1 -7/4
7/-4 等于-1.
// 整数除法,取最接近的整数。如果小数部分为0.5,则往绝对值大的方向取。例
3//2 等于2-3//2 等于-2
/// 整数除法,取最接近的整数。如果小数部分为0.5,往实际值大的方向取,即如
果结果大于0,往背离0的方向取;而如果结果小于0,往靠近0 的方向取。例
3///2 等于2,而-3///2 等于-1
//// 整数除法,往负无穷大的方向截取。例如7/4 等于1-7/4 等于-2
÷ 没有截取和舍入的精确除法运算。
3.1.2 起始码:
起始码是一些在视频流的其它部分不会出现的特殊的比特组合。
每一个起始码由起始码前缀和跟在它后面的起始码值组成。起始码前缀是一个由23
0 1 1 组成的比特序列,也就是“0000 0000 0000 0000 0000 0001”
起始码值是一个8bit 整数,它来指示起始码类型大多数类型起始码使用唯一的起始码
值。但是,video_object_start_codevideo_object_layer_start_code可以有多个起始码字。
所有起始码字都是字节对齐的。这可以通过在起始码前缀前先插入一个0再插入若干个
1 来实现。表21 给出了填充1~8 比特时的填充码字。
31 填码充字
填充的比特数 填充码字
1 0
2 01
3 011
4 0111
5 01111
6 011111
7 0111111
8 01111111
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
15 页共 99
32 给出了起始码的值。仅仅只给出我们用到的部分。
32 起始码值
名称 起始码值
(16 进制)
video_object_start_code 00 through 1F
video_object_layer_start_code 20 through 2F
reserved 30 through 3F
reserved 60 through AF
visual_object_sequence_start_code B0
visual_object_sequence_end_code B1
user_data_start_code B2
group_of_vop_start_code B3
video_session_error_code B4
visual_object_start_code B5
vop_start_code B6
slice_start_code B7
extension_start_code B8
Stuffing_start_code C3
reserved C4-C5
System start codes (see note) C6 through FF
NOTE System start codes are defined in ISO/IEC 14496-1
3.1.3 码流的分层结构
/* 这一层给出profile&level信息*/
VisualObjectSequence() {
………..
VisualObject()
………..
}
/* 给出视频对象的版本和优先级*/
VisualObject() {
………….
VideoObjectLayer()
………….
}
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
16 页共 99
/* 当前视频流的一些特性*/
VideoObjectLayer() {
………..
do{
if (next_bits() == group_of_vop_start_code)
Group_of_VideoObjectPlane()
VideoObjectPlane()
}while ((next_bits() == group_of_vop_start_code) || (next_bits() == vop_start_code))
………..
/* 如果使用短头格式(可以通过起始码字来判断) */
{
short_video_header = 1
do{
video_plane_with_short_header()
}while(next_bits() == short_video_start_marker)
}
}
/* 视频图像组头信息,包含时间基准信息,第一个B帧能不能正确显示等*/
Group_of_VideoObjectPlane() {
………….
}
/* 当前帧的头信息*/
VideoObjectPlane()
{
…………
Motion_shape_texture()
While (nextbits_bytealighed() == resync_marker) {
Video_packet_header()
Motion_shape_texture()
}
…………
}
/* 视频包头信息*/
Video_packet_header()
{
……….
}
Motion_shape_texture()
{
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
17 页共 99
if (data_partitioned) //如果使用数据分割的话,即很多宏块运动信息和纹理数据分开
data_partitioned_motion_shape_texture()
else
combined_motion_shape_texture()
}
/* 运动信息和纹理数据联合编码,放在一个宏块层中*/
combined_motion_shape_texture()
{
do{
Macroblock()
} while (nextbits_bytealigned() != resync_marker
&& nextbits_bytealigned() != ‘000 0000 0000 0000 0000 0000’)
}
/* 宏块数据,包括运动矢量和纹理数据*/
Macroblock()
{
……..
motion_vector()
for (I=0; I<6; I++)
if (!transparent_block(I))
block()
}
3.2 语法
这里给出的语法并不是标准的语法,而是ASP 中需要用到的,对我们不需要用到的,
尽量不给出来,使得问题简单化。
3.2.1 Visual Object Sequence and Visual Object
VisualObjectSequence() { No. of bits Mnemonic
visual_object_sequence_start_code 32 bslbf
profile_and_level_indication 8 uimsbf
while ( next_bits()== user_data_start_code){
user_data()
}
VisualObject()
visual_object_sequence_end_code 32 bslbf
}
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
18 页共 99
VisualObject() { No. of bits Mnemonic
visual_object_start_code 32 bslbf
is_visual_object_identifier 1 uimsbf
if (is_visual_object_identifier) {
visual_object_verid 4 uimsbf
If (visual_object_verid != ‘0001’ || visual_object_verid != ‘0101’) {
Error()
}
visual_object_priority 3 uimsbf
}
visual_object_type 4 uimsbf
if (visual_object_type == “video ID”)
{
video_signal_type()
}
else {
Error()
}
next_start_code()
while ( next_bits()== user_data_start_code){
user_data()
}
if (visual_object_type == “video ID”) {
video_object_start_code 32 bslbf
VideoObjectLayer()
}
if (next_bits() != “0000 0000 0000 0000 0000 0001”)
next_start_code()
}
video_signal_type() { No. of bits Mnemonic
video_signal_type 1 bslbf
if (video_signal_type) {
video_format 3 uimsbf
video_range 1 bslbf
colour_description 1 bslbf
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
19 页共 99
if (colour_description) {
colour_primaries 8 uimsbf
transfer_characteristics 8 uimsbf
matrix_coefficients 8 uimsbf
}
}
}
User data
user_data() { No. of bits Mnemonic
user_data_start_code 32 bslbf
while( next_bits() != ‘0000 0000 0000 0000 0000 0001’ ) {
user_data 8 uimsbf
}
}
3.2.2 Video Object Layer
VideoObjectLayer() { No. of bits Mnemonic
if(next_bits() == video_object_layer_start_code) {
short_video_header = 0
video_object_layer_start_code 32 bslbf
random_accessible_vol 1 bslbf
video_object_type_indication 8 uimsbf
If (video_object_type_indication != (“simple ”|| “Advanced simple”)) {
Error()
}
is_object_layer_identifier 1 uimsbf
if (is_object_layer_identifier) {
video_object_layer_verid 4 uimsbf
If (visual_object_verid != ‘0001’ || visual_object_verid != ‘0101’) {
Error()
}
video_object_layer_priority 3 uimsbf
}
aspect_ratio_info 4 uimsbf
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
20 页共 99
if (aspect_ratio_info == “extended_PAR”) {
par_width 8 uimsbf
par_height 8 uimsbf
}
vol_control_parameters 1 bslbf
if (vol_control_parameters) {
chroma_format 2 uimsbf
low_delay 1 uimsbf
vbv_parameters 1 blsbf
if (vbv_parameters) {
first_half_bit_rate 15 uimsbf
marker_bit 1 bslbf
latter_half_bit_rate 15 uimsbf
marker_bit 1 bslbf
first_half_vbv_buffer_size 15 uimsbf
marker_bit 1 bslbf
latter_half_vbv_buffer_size 3 uimsbf
first_half_vbv_occupancy 11 uimsbf
marker_bit 1 blsbf
latter_half_vbv_occupancy 15 uimsbf
marker_bit 1 blsbf
}
}
video_object_layer_shape 2 uimsbf
If (video_object_layer_shape != “rectangular”) {
Error()
}
marker_bit 1 bslbf
vop_time_increment_resolution 16 uimsbf
marker_bit 1 bslbf
fixed_vop_rate 1 bslbf
if (fixed_vop_rate)
fixed_vop_time_increment 1-16 uimsbf
marker_bit 1 bslbf
video_object_layer_width 13 uimsbf
marker_bit 1 bslbf
video_object_layer_height 13 uimsbf
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
21 页共 99
marker_bit 1 bslbf
interlaced 1 bslbf
obmc_disable 1 bslbf
If( !obmc_disable) {
Error()
}
if (video_object_layer_verid == ‘0001’)
sprite_enable 1 bslbf
else
sprite_enable 2 uimsbf
If (sprite_enable != 0 || sprite_enable != 00) {
Error()
}
not_8_bit 1 bslbf
if (not_8_ bit) {
Error()
}
quant_type 1 bslbf
if (quant_type) {
load_intra_quant_mat 1 bslbf
if (load_intra_quant_mat)
intra_quant_mat 8*[2-64] uimsbf
load_nonintra_quant_mat 1 bslbf
if (load_nonintra_quant_mat)
nonintra_quant_mat 8*[2-64] uimsbf
}
if (video_object_layer_verid != ‘0001’)
quarter_sample 1 bslbf
complexity_estimation_disable 1 bslbf
If (complexity_estimation_disable != 1) {
Error()
}
resync_marker_disable 1 bslbf
data_partitioned 1 bslbf
if(data_partitioned)
Error() 1 bslbf
if(video_object_layer_verid != ’0001’) {
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
22 页共 99
newpred_enable 1 bslbf
if (newpred_enable)
Error()
reduced_resolution_vop_enable 1 bslbf
If (reduced_relution_vop_enable)
Error()
}
scalability 1 bslbf
If (scalablity)
Error()
}
next_start_code()
while ( next_bits()== user_data_start_code){
user_data()
}
do {
if (next_bits() == group_of_vop_start_code)
Group_of_VideoObjectPlane()
VideoObjectPlane()
if ((preceding_vop_coding_type == "B") &&
next_bits() == stuffing_start_code) {
stuffing_start_code 32 bslbf
while (next_bits() != ‘0000 0000 0000 0000 0000 0001’)
stuffing_byte 8 bslbf
}
} while ((next_bits() == group_of_vop_start_code) ||
(next_bits() == vop_start_code))
} else {
short_video_header = 1
do {
video_plane_with_short_header()
} while(next_bits() == short_video_start_marker)
}
}
NOTE — preceding_vop_coding_type has the same value as vop_coding_type in the immediately preceding
VideoObjectPlane() in the decoding order.
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
23 页共 99
3.2.3 Group of Video Object Plane
Group_of_VideoObjectPlane() { No. of bits Mnemonic
group_of_vop_start_code 32 bslbf
time_code 18
closed_gov 1 bslbf
broken_link 1 bslbf
next_start_code()
while ( next_bits()== user_data_start_code){
user_data()
}
}
3.2.4 Video Object Plane and Video Plane with Short Header
VideoObjectPlane() { No. of bits Mnemonic
vop_start_code 32 bslbf
vop_coding_type 2 uimsbf
If (vop_coding_type == ‘s-vop’)
Error()
}
do {
modulo_time_base 1 bslbf
} while (modulo_time_base != ‘0’)
marker_bit 1 bslbf
vop_time_increment 1-16 uimsbf
marker_bit 1 bslbf
vop_coded 1 bslbf
if (vop_coded == ’0’) {
next_start_code()
return()
}
if (vop_coding_type == “P” )
vop_rounding_type 1 bslbf
intra_dc_vlc_thr 3 uimsbf
if (interlaced) {
top_field_first 1 bslbf
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
24 页共 99
alternate_vertical_scan_flag 1 bslbf
}
vop_quant 3-9 uimsbf
if (vop_coding_type != “I”)
vop_fcode_forward 3 uimsbf
if (vop_coding_type == “B”)
vop_fcode_backward 3 uimsbf
motion_shape_texture()
while (nextbits_bytealigned() == resync_marker) {
video_packet_header()
motion_shape_texture()
}
next_start_code()
}
Video Plane with Short Header
video_plane_with_short_header() { No. of bits Mnemonic
short_video_start_marker 22 bslbf
temporal_reference 8 uimsbf
marker_bit 1 bslbf
zero_bit 1 bslbf
split_screen_indicator 1 bslbf
document_camera_indicator 1 bslbf
full_picture_freeze_release 1 bslbf
source_format 3 bslbf
picture_coding_type 1 bslbf
four_reserved_zero_bits 4 bslbf
vop_quant 5 uimsbf
zero_bit 1 bslbf
do{
pei 1 bslbf
if (pei == “1”)
psupp 8 bslbf
} while (pei == “1”)
gob_number = 0
for(i=0; i<num_gobs_in_vop; i++)
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc
25 页共 99
gob_layer()
if(next_bits() == short_video_end_marker)
short_video _end_marker 22 uimsbf
while(!bytealigned())
zero_bit 1 bslbf
}
gob_layer() { No. of bits Mnemonic
gob_header_empty = 1
if(gob_number != 0) {
if (next_bits() == gob_resync_marker) {
gob_header_empty = 0
gob_resync_marker 17 bslbf
gob_number 5 uimsbf
gob_frame_id 2 bslbf
quant_scale 5 uimsbf
}
}
for(i=0; i<num_macroblocks_in_gob; i++)
macroblock()
if(next_bits() != gob_resync_marker &&
nextbits_bytealigned() == gob_resync_marker)
while(!bytealigned())
zero_bit 1 bslbf
gob_number++
}
video_packet_header() { No. of bits Mnemonic
next_resync_marker()
resync_marker 17-23 uimsbf
macroblock_number 1-14 vlclbf
quant_scale 5 uimsbf
header_extension_code 1 bslbf
if (header_extension_code) {
do {
modulo_time_base 1 bslbf
} while (modulo_time_base != ‘0’)
PDF 文件使用 "pdfFactory Pro" 试用版本创建www.fineprint.cn
ASIC-MP4V_VID_MPEG4_ASP_WuBC_01.doc

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红米pro更新开发版发热卡怎么办 5s手机音量增大键失灵怎么办 眼睛看手机久了模糊应怎么办 华为无线自拍杆连opp手机怎么办 苹果手机进水后自动跳电怎么办 魅族手机返回键不好使怎么办 手机壳是玻璃的摔坏了怎么办 魅族手机进水了开不了机怎么办 打发票机屏忘记了密码怎么办 魅族手机升级显示电量不足怎么办 魅蓝手机的图库没了怎么办 魅蓝5s屏幕碎了怎么办 魅族手机中间的home键失灵怎么办 魅族手机突然关机开不了机了怎么办 魅蓝3s卡顿怎么办视频 魅蓝3s手机太卡怎么办 红米4x外放破音怎么办 魅族手机刷机后内存变小了怎么办 手机用久了内存越来越小怎么办魅族 贴了车膜左右后视镜反光怎么办 贴手机膜时酒精没了怎么办 魅蓝e外屏幕碎了怎么办 贴的手机膜边缘翘起来着怎么办 手机后面贴的膜都是胶怎么办 车漆外面一层保护膜被划开了怎么办 美团骑手gps信号弱时怎么办 华为荣耀4x充电插口坏了怎么办 华为畅享5s开不了机怎么办 华为梅特10忘记账号密码怎么办 华为荣耀8充电接口坏了怎么办 华为手机锁屏了自动开屏怎么办 支付宝收货地址写错了怎么办 支付宝领海报地址写错了怎么办 手机总是弹出日历已停止运行怎么办 华为mate8忘了锁屏密码怎么办 红米4a打王者卡怎么办 苹果5s软件更新密码忘记了怎么办 华为荣耀P9进水了没有声音怎么办 华为荣耀7原相机不能拍照怎么办 华为手机触屏密码忘记了怎么办 华为荣耀10屏锁密码忘了怎么办