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

转载:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值