mpeg4解码程序框架.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
mpeg4解码程序框架

解码程序流程:1、初始化解码所需资源。例如:设置输入文件、输出文件,代表解码所需各缓冲区大小的结构DEC_MEM_REQS及其中各对象所占空间大小的分配,缓冲区结构DEC_BUFFERS中对象初始化,解码所需变量的结构DEC_PARAM中各对象的初始化,解码所需资源初始化decore_init()如:MP4_STATE、MP4_TABLES、MP4_STREAM以及MP4_STATE结构中部分代表VOL、VOP头标志的对象的初始化,设置关于图像尺寸的全局变量decore_alloc(),设置YUV格式decore_setoutput()等。2、开始计时startTimer() 。3、代表解码帧的结构DEC_FRAME中对象void *bitstream,void *bmp,long length,int render_flag的初始化。4、取得视频对象层头标志,getvolhdr()。5、取得视频对象平面组头标志,getgophdr()。6、取得视频对象平面头标志,getvophdr()。7、得到Mpeg4图像,get_mp4picture()。8、停止计时,stopTimer()。9、显示解码所用时间、帧数,帧率。displayTimer()。 get_mp4picture() 1)if((.mba mba_size) (nextbits_bytealigned(23) != 0)) ,处理每个宏块macroblock()。 2)为解码的帧增加边。make_edge() 3)为重排帧序而管理帧的缓冲postprocess( )。 4)RGB转换为YUV convert_yuv()。 5)储存YUV到输出文件store_yuv( )。 6)交换当前帧和参考帧位置。 Macroblock() 根据 prediction_type标志判断此帧是否为I帧,不是I帧的话,根据.not_coded判断此宏块是否被编码,即这个宏块有没有进一步的数据包含在码流中。 处理I帧或被编码的宏块 判断宏块类型derived_mb_type,以便后面运动解码和纹理解码使用; 假设宏块类型为1或4,设置量化值quantizer,量化允许值在[1,31]之间; 宏块类型为0或1,求出四个相同的运动向量setMV(-1); 宏块类型为2,求出四个不同运动向量。 for (j = 0; j 4; j++) setMV(j); 如果宏块类型为3,且此帧为P帧时,将运动向量设为0; 如果帧间编码,进行运动补偿reconstruct( ), recon_comp()和纹理解码blockInter(),addblockInter(); 如果帧内编码,只进行纹理解码 blockInter(),addblockInter(); 处理没有被编码的宏块 置运动向量为0 运动补偿reconstruct( ), recon_comp() (4) 将量化值quantizer存入量化值表quant_store[mb_ypos+1][ mb_xpos+1] (5)移动宏块坐标mb_xpos、mb_ypos,定位下一个宏块。 求运动向量setMV() 定义相关变量,hor_mv_data,、ver_mv_data、 hor_mv_res、 ver_mv_res,scale_fac、high、low、range ,并初始化scale_fac、high、low、range,定义差分运动向量 mvd_x,、mvd_y,、运动向量预测值pmv_x,、pmv_y, 解码运动向量mv_x、 mv_y; 根据运动向量表MVtab0[]、MVtab1[]、MVtab2[],通过函数getMVdata(),从码流中获得水平运动向量数据hor_mv_data; 从码流中恢复参数hor_mv_res,根据参数hor_mv_data、scale_fac和hor_mv_res,计算出水平差分运动向量mvd_x; 根据运动向量表,通过函数getMVdata(),从码流中获得垂直运动向量数据ver_mv_data; 从码流中恢复参数ver_mv_res,根据变量ver_mv_data、scale_fac和ver_mv_res、计算出垂直差分运动向量mvd_y; 通过函数find_pmv( ),计算出运动向量预测值pmv_x,、pmv_y; 计算解码水平运动向量mv_x= pmv_x + mvd_x,限制mv_x在范围[low:high]内; 计算解码垂直运动向量mv_y= pmv_y + mvd_y,限制mv_y在范围[low:high]内; 把计算出的运动向量mv_x、mv_y分别存入运动向量的四维数组MV[0][i][mb_ypos+1][ mb_xpos+1], MV[1][i][mb_ypos+1][

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档