程序分为三个部分:编解码公用的部分、编码部分和解码部分。根据上面提到的优化思想,我们对程序进行了优化。经过优化后,VOP的结构体进行了很大的改变,保留了基本的语法元素项,对Sp rite进行了一些简化,定义如下:
struct vop
{
/* VOP的语法元素* /
Int p rediction_type; /* VOP类型* /
Intmod_time_base; /* VOP绝对基本时间* /
Float time_inc; /* VOP相对mod_time_base时间* /
Int vop_coded;
Int rounding_type;
Int width; /* VOP宽度* /
Int height; /* VOP高度* /
.
/* 运动估计元素* /
.
/* 部分从VOL中传过来的sp rite coding元素* /
Int sp rite_hdim;
Int sp rite_vdim;
Int sp rite_left_edge;
Int sp rite_top_edge;
Int warp ing_accuracy; /3 变形精度(2, 4, 8, 16) 3 /
Int sp rite_usage; /3 0:不用; 1:静态; 3 /
Int no_of_sp rite_points;
/3 0:固定, 1:平移, 2:旋转、缩放, 3:仿射, 4:透视画法3 /
TrajPoint 3 ref_point_coord;
/3 position of reference points sp rite 3 /
TrajPoint 3 traj_point_coord;
/3 position of reference points aftermotion compensation 3 /
TrajPoint 3 difftraj_point_coord;
/3 ( dui, dvj) trajectory coordinates, to be transmitted 3 /
Int brightness_change_in_sp rite;
Float brightness_change_factor;
Int low_latency_sp rite_enable;
/3 0:基本sp rite, 1:节省的sp rite 3 /
struct vop 3 rec_sp rite; /3 当前解码sp rite指针3 /
Sp rite_motion 3 warp_param; /3 全局运动向量3 /
.......
}
在VOP中, sprite _ usage为1则图像中只处理静态的Sprite; sprite_hdim、sprite_vdim与静态的Sprite的像素相对应,它随Macroblocks数的变化而作相应的变化,对于一个环境稳定的DVR 的应用,它们可以有一个确定的值; n Number of Sprite Points当为o时zero运动.......同时在image, sprite_motion, vol, video _object, motion等结构体和编解码的函数中也进行了相应的类似的一些优化,以适应DVR的特点,提高编码的效率。
(2) 软件支持空域可扩展和空域可扩展,设置参数可支持五种类型: 0为时域扩展类型0; 1为空域扩展; 2为时域空域扩
展; 3为时域扩展类型1; 4为时域扩展类型2对于空域扩展。
Enhanece P B B B . . .
Base I P P P . . .
对于时域扩展, base层的帧率变为5fps和enhance层的帧率也为5fps。支持三种类型:
Case0 I-VOP在base层中周期出现和P-VOP在base层和enhance层中,而B-VOP不出现
Enhance layer P P P P P . . .
Base layer I P P P P . . .
Case1 I-VOP和P-VOP在base层中编解码, enhance层中只有B-VOP
Enhance layer B B B B B B . . .
Base layer I P P P . . .
Case3 base层中包含I-VOP, P-VOP和B-VOP, enhance层中只有B-VOP
Enhance layer P B B B B B . . .
Base layer IB P B P B P . . .