JM86误码掩盖参考代码完全剖析_Bearrie戟(110846167).pdfVIP

  • 31
  • 0
  • 约2.95万字
  • 约 26页
  • 2021-02-05 发布于湖北
  • 举报

JM86误码掩盖参考代码完全剖析_Bearrie戟(110846167).pdf

南京邮电大学 图像实验所 JM86 误码掩盖参考代码完全剖析 作者:张戟(Y050628) 前序 以下的文字只是本人在学习H.264 代码过程中的一些心得体会,限于本人水平有限,所以有 错误的地方请阅读者谅解,并提出,大家共同讨论学习。 在这里,特别感谢 H264 乐园版主天之骄子及群里兄弟姐妹们的帮助! 说明: 红色表示函数 绿色表示函数中的参数 褐色表示函数内部的代码 1 bearriezj@ 南京邮电大学 图像实验所 正文 本文主要讲述了一些 H.264 中后处理错误隐藏的知识,而且也集中在解码端实现,根据 空域和时域不同的掩盖方法,文章分为两大部分,第一部分主要讲帧内掩盖,相对应的 c 文件是 erc_do_i.c ;第二部分主要讲帧间掩盖,相对应的c 文件是 erc_do_p.c,这一部分相对 于帧内掩盖要复杂得多,也是本文的重点。下面,我们就从简到难,细细讲述其中的原理。 第一部分:帧内误码掩盖(erc_do_i.c) 大家先对整个帧内误码掩盖有个大体的框架,请看下图,其中 ercConcealIntraFrame () 是帧内的入口函数。 帧内的掩盖方式为像素平均权值,方法相对来说比较简单。下面,我们通过一个一个函 数分析来了解帧内掩盖算法。 int ercConcealIntraFrame( frame *recfr, int32 picSizeX, int32 picSizeY, ercVariables_t *errorVar ) 函数功能简述:这是帧内掩盖的入口函数,被 image.c 中的exit_picture()函数所调用。这里, 没有太多的代码,只是做了坐标级之间的转换,并调用了 concealBlocks() 。 函数参数解释:frame *recfr 表示当前帧指针结构体,这个结构体包含了指向当前帧 Y,U 和 V 块的指针。 int32 picSizeX 表示一帧的宽度,当 QCIF 图像时,该值为 176,当 CIF 图像 时,该值为 352 。 int32 picSizeY 表示一帧的高度,当 QCIF 图像时,该值为 144,当 CIF 图像 时,该值为 288 。 ercVariables_t *errorVar 表示包含了一些掩盖状态和信息的结构体。 注意点:1. ercVariables_t 结构体中变量的含义(详看我的 erc_api.c 初探) 。 2.不同基本单位之间的转换,我的意思是指以宏块为单位的横纵坐标转换成以 8x8 块为单位的坐标之类的问题。 函数详述: 函数内部的动作比较简单,但是照顾到刚刚接触误码掩盖的朋友,在介绍第一个函数的 时候,我更多的会讲一些变量的含义以及代码的操作习惯。这边我主要现讲两方面,一个就 是 errorVar-yCondition、errorVar-uCondition 和 errorVar-vCondition 指的是什么?另外一 个就是不同基本单位之间的转换。 在接收端,有一个宏块状态图的概念,它的作用就是记录一帧图像所有宏块的接收状态。 如下图: 2 bearriezj@ 南京邮电大学 图像实验所 标记为 ERC_BLOCK_OK 的宏块表示正确接收,标记为 ERC_BLOCK_CONCEALED 的宏 块 表 示 错 误 的 块 但 是 已 经 被 掩 盖 过 , 标 记 为 ERC_BLOCK_COR

文档评论(0)

1亿VIP精品文档

相关文档