毕业论文

打赏
当前位置: 毕业论文 > 电子通信 >

H.264视频转码的设计与实现+文献综述(9)

时间:2017-03-12 16:41来源:毕业论文
decode_one_slice()流程:decode_one_slice()为片解码函数。首先set_ref pic_num()初始化参考帧序列。然后进入循环,对每一个宏块解码。Start_macroblock()初始化当前宏块,


decode_one_slice()流程:decode_one_slice()为片解码函数。首先set_ref pic_num()初始化参考帧序列。然后进入循环,对每一个宏块解码。Start_macroblock()初始化当前宏块,read_one_macroblock()中包括熵解码、宏块类型解析、预测模式解析、MVD计算、CBP(CodedBlock Pattern)计算、残差解码等。decode_one_ macroblock()包括反变换、运动补偿、像素重构等。
read_new_macroblock()流程: read_one_macroblock()函数首先初始化一些参数和变量。接着根据宏块类型的不同采用不同的interpret_mb_mode()函数来对宏块进行解析,如I, P, B, SI宏块。然后判断该宏块是否为8×8子宏块分割,如果是,则解析子宏块分割模式。Init_macroblock()函数主要作用是对亮度块中16个4×4块的预测模式、运动矢量进行初始化。然后IS_DIRECT判断该宏块是否B_kip类型宏块,如果是,则按相应算法处理。接着IS_COPY判断该宏块是否COPY类型宏块,如果是,则按相应算法处理。下一步,read_ipred_modes()从比特流中读取亮度块和色度块的预测模式。以亮度块为例,读取时是以4×4块为单位读取的,读取顺序如图3-5所示:
图 3-5  4×4块处理顺序
IS_INTERMV判断该宏块是否帧间编码宏块,如果是,则通过函数readMotionInfoFromNAL()从码流中读取运动矢量残差。最后是分别对亮度和色度宏块进行CAVLC熵解码。解码最小单位是4×4块,每个4×4块在16×16宏块中解码顺序由图3-5给出。
decode_one_slice()流程:decode_one_macroblock()首先针对亮度块解码,之后对色度块解码。首先判断宏块是否采用16×16帧内预测,如果是,则通过函数intrapred_luma_16x16()解码。然后对一个16×16宏块中的每个4×4块分别解码,每个块的解码顺序如图3-5所示,直到所有块解码完成为止。解码4×4块时,首先判断是否为帧内编码,如果是,则通过函数intrapred对4×4块帧内解码。如果是帧间编码,则还要判断是P或是B帧。找到参考帧的匹配块后,用get_block()像素内插恢复像素值。itrans()对当前块的残差进行反变换,然后再将反变换值和预测值相加得到重构值。接着,将该重构值赋给dec_picture->imgY保存。其中dec_picture是一个用来存放解码值的解构体,其成员imgY存放亮度解码值。最后是色度块解码。由于色度块解码和亮度块解码流程基本相同,在这里省去。
4  转码平台搭建和实验结果分析
本人在熟悉并使用H.264编解码程序对原始图像进行编解码过程中,通过理解并调试重要参数,在基于JM10.1模型的基础上,搭建了跳帧转码,降码率转码等多种视频转码类型。
4.1  跳帧转码
由于第三代移动通信技术的推广,面向移动终端用户提供多媒体服务成为必然的发展趋势。但是,无线信道的带宽容量有限,要求我们将现有的高码率视频进一步压缩。在码率变换较大的情况下,单纯依靠码率变换的方法已经不能获得较好的视频图像质量。同时移动终端设备由于显示器处理能力,设备成本,能耗等限制,要求视频的帧率相对较低,这就要求我们使用降低时间分辨率的跳帧转码。
在JM10.1模型的配置文件“encoder.cfg”中通过修改FrameSkip这个重要参数,可以实现跳帧转码。编码器基本设置如下:
(1)    图像大小为176×144 QCIF格式,色度采样格式为YUV420,图像序列为常用的标准测试序列: suzie。
(2)    编码图像总数50帧,其中第一帧为I帧编码,其余49帧为P帧编码。
(3)    采用固定QP=28,码率控制RC关闭。
(4)    帧率为30.Ofps,采用去块效应滤波。
(5)    FrameSkip设置为1,即每输入两帧跳过一帧进行编码。 H.264视频转码的设计与实现+文献综述(9):http://www.751com.cn/tongxin/lunwen_4076.html
------分隔线----------------------------
推荐内容