《MPEG解码过程》doc版.doc_第1页
《MPEG解码过程》doc版.doc_第2页
《MPEG解码过程》doc版.doc_第3页
《MPEG解码过程》doc版.doc_第4页
《MPEG解码过程》doc版.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MPEG-2解码过程帧存反向 扫描可变长解码解码后的图像运动补偿IDCT反量化编码数据图1.1简化的视频解码过程2.1可变长解码2.1.1帧内块的DC系数帧内宏块的DC系数采用可变长(由dct_dc_size表示,定义在B.12和B.13中)编码。如果dct_dc_size不等于0,则将跟着一个固定长度代码dc_dct_differential,dct_dc_size个比特。从解码数据中首先恢复差值。为了恢复最后的系数,该差值被加入到一个预测器。保持三个预测器,每次对帧内宏块内的DC系数进行解码,预测值加上差值形成实际系数。然后预测器应设置到刚解码的系数值。下面的情况要重新设置值: 片的开始处 无论什么时间解码非帧内宏块 无论什么时候宏块被跳过。预测器表示为dc_dct_predcc。由dc_dct_size和dc_dct_differential计算QFS0:if(dc_dct_size= =0) dc_diff=0;else half_range=2(dc_dct_size-1); (注意:表示幂) if(dc_dct_differential=half_range) dc_diff=dc_dct_differential; else dc_diff=(dc_dct_differential+1)-(2*half_range);QFS0=dc_dct_predcc+dct_diff;dc_dct_predcc=QFS0QFS0的范围为:0至(2(8+intra_dc_precision)-1)附1:程序中这一部分的代码2.1.2其他系数除DC帧内系数外,所有系数应使用表B.14、B.15和B.16进行解码。附录2:程序中这一部分的代码2.2反向扫描QFSn表示可变长解码器输出端的数据。n=063。定义了两种扫描模式。应使用的扫描模式由alternate_scan确定,alternate_scan编码在图象头扩展中。scanalternate_scanvu矩阵的定义略。反向扫描等效过程如下:for(v=0;v8;v+) for(u=0;u2047Fvu= Fvu -2048=Fvu=2047 -2048 Fvu-20482.3.4 非匹配控制首先,应对块中所有重建、限幅的系数Fvu求和。然后测试该值以确定其是奇数还是偶数。如果求和值sum为偶数,则应对系数F77进行修正。因此:sum=64个Fvu的和。Fvu=Fvu 对所有u,v,除u=v=7外 F77 如果sum为偶数F77= F77-1 如果F77为奇数 如果sum为偶数 F77+1 如果F77为偶数2.4 IDCT一旦重建DCT系数Fvu,通过IDCT变化获得反变换值fvu。这些值被限幅在-256=fvu=255。在一非跳跃宏块中,对宏块中给定的块,如果pattern_codei为1,则对该块,系数数据包括在码流中。使用下面几节所定义的方法可解码之。但是,如果pattern_codei为0。或如果宏块被跳过,则块不包括系数数据。对于该块,样本域系数fvu应全为0。2.5 运动估计运动估值过程由前面的解码图象形成预测值。图3是该过程的简化框图。预测场/帧选择帧存寻址帧存 vectorrst半像素预测滤波色度分量缩放附加的DP算术运算 合并预测 vectorrst矢量解码 半像素信息码流限幅 pyx+矢量预测器 解码像素 fyx dyx 图3 简化的运动估值过程2.5.1 运动矢量为了降低表示运动矢量所要求的比特数,使用与前面解码运动矢量的差对运动矢量进行解码。为了解码运动矢量,解码器应保持4个运动矢量预测器PMVrst。对每个预测器,首先得到vectorrst。对每个彩色分量,给出运动矢量vectorrst,然后根据取样结构(4:2:0,4:2:2或4:4:4)进行缩放。2.5.1.1 运动矢量解码 每个运动矢量分量vectorrt,由下面的过程进行计算。注意,运动矢量预测器也由该过程更新。 r_size=f_codest-1 f=1r_size high=(16*f)-1 low=(-16)*f); range=(32*f); if(f= =1)|(motion_coderst= =0) /motion_code是从码流中恢复的 delta=motion_coderst; else delta=(Abs(motion_coderst-1*f)+motion_residualrst+1;/motion_residual是从码流中恢复的 if(motion_coderst0) delta=-delta; prediction=PMVrst; if(mv_format= =”field”)&(t= =1)&(picture_structure= =”Frame picture”) /mv_format是从码流中恢复的 prediction=PMVrst DIV 2; vectorrst=prediction+delta; if(vectorrsthigh) vectorrst=vectorrst-range; if(mv_format= =”field”)&(t= =1)&(picture_structure= =”Frame picture”) PMVrst=vectorrst*2; else PMVrst=vectorrst; /vectorrst是宏块亮度分量最后的虫建运动矢量。2.5.1.2 运动矢量限制在帧图象中,应限制场运动矢量的垂直分量,使它们仅覆盖f_code所支持范围的一半,f_code与这些运动矢量有关。该限制确保运动矢量预测器总是具有适应解码后续帧运动矢量的值。2.5.1.3更新运动矢量预测器2.5.1.4 重新设置运动矢量预测器在如下情况下,所有运动矢量预测器应重新设置为0: 每片的开始处 解码无隐蔽运动矢量的帧内宏块时 在P图象中,解码macroblock_motion_forward为0的非帧内宏块时 在P图象中跳过一宏块时2.5.1.5 DP附加算术运算2.5.2 形成预测 通过从参考场/帧读预测样本来形成预测。 所有的运动矢量按半像素精度定义。因此,如果运动矢量的分量为偶数,则从参考场/帧中实际像素间的中间位置读像素。这些半像素进行简单的线性内插来计算。对每个预测块,整像素运动矢量int_vect和半像素标志half_flagt应按如下过程形成:for(t=0;t2;t+) int_vect=vectorrst DIV 2; if(vectorrst-2*int_vect)!=0) half_flagt=1; else half_flagt=0;然后,对预测块中的每个像素,半像素预测为:if(!half_flag0)&(!half_flag1) pel_predyx=pel_refy+int_vec1x+int_vec0;if(!half_flag0)&(!half_flag1) pel_predyx=(pel+refy+int_vec1x+int_vec0)+ pel_refy+int_vec1+1x+int_vec0)/2;if(!half_flag0)&(!half_flag1) pel_predyx=(pel+refy+int_vec1x+int_vec0)+ pel_refy+int_vec1x+int_vec0+1)/2;if(!half_flag0)&(!half_flag1) pel_predyx=(pel+refy+int_vec1x+int_vec0)+ pel_refy+int_vec1x+int_vec0+1+pel+refy+int_vec1+1x+int_vec0)+ pel_refy+int_vec1+1x+int_vec0+1/4; 这里,pel_predyx为正在形成的预测样本,pel_refyx为参

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论