请你描述一下输入N帧YUV图像后得到编码码流的过程以及解码过程?

一、编码

原始数字图像YUV输入到编码器后,进行视频预处理,分析复杂度,检测场景切换,确定GOP结构和帧类型,或者图像序列去噪。分割成或不重叠的宏块X,进入以宏块为编码单元的编码回路中。

然后根据帧类型采用帧内预测或者帧间预测获得当前X的预测块Xp。经差分编码得到预测误差图像△X。误差图像进行8x8或者4x4块级DCT变换量化得到量化系数,经游程编码,可变长
编码,熵编码产生量化系数对应的的编码比特。同时量化块经过逆量化,逆变换得到含有量化失真的误差图像△X’,与预测图像Xp相加重构出解码图像

得到的解码图像一方面会用于当前帧内后续宏块的帧内预测的参考像素,另一方面经过去块效应滤波后得到重构图像X’存储在本地帧存储器中,为后续帧间编码帧提供运动预测参考。

此外,编码器还需要将帧间预测的运动矢量,帧内预测的模式信息,宏块的编码类型,量化参数,编码快模式CBP信息等控制信息写入码流,为解码器提供必要的码流语法参数

以上得到的码流是原始字节流SODB,然后在在SODB的后面添加trailing bits,即一个bit 1和若干个bit 0,得到RBSP,然后在RBSP的基础上添加了仿校验字节0x03。

在对RBSP进行扫描时,如果遇到连续的两个0x00字节,则在该两个字节后面添加一个0x03字节。在解码的时候将该0x03字节去掉,也成为脱壳操作。

此时就得到了NALU数据,加上NALU的头部字节就构成了AnnexB格式的裸流

编码标准中规定了逆变换,逆量化,帧内预测,运动补偿,游程编码,熵编码具体实现细节,而预处理,运动估计,模式选择,码率控制这4大模块并未规定具体的实施方案。
需要说明的是,变换,量化虽然有规定,但还是一定程度上定制。

此外,编码器中还需要有一个编码控制模块,实现GOP,帧,条带,宏块多层次的编码控制。首先在预处理的时候确定帧类型,如果是I帧则所有宏块都是帧内预测。如果是P帧,可以帧内预测也可以帧间预测。具体编码每一帧的时候,编码控制模块需要协调码率控制,预处理,模式选择,运动估计,以实现算法定制。

模块之间的关系:
码率控制为量化模块提供QP,运动估计在低码率下运动矢量占码率比例不可忽视,所以运动估计中需要考虑RDO。

二、解码

解码器结构比较简单,所有模块标准都规定了具体的实现方法。
裸流进来后,先码流解析模块,根据标砖的语法结构得到语法元素,包括宏块编码模式,量化系数,运动矢量,帧内模式,量化步长,CBP信息。

量化系数经过熵解码得到量化后的系数,经过逆量化和逆变换,得到含量化失真的误差宏块△X’,根据运动矢量解码得到运动矢量,经过运动补偿得到帧间预测块,或者根据
帧内预测模式信息得到帧内预测块,根据宏块模式选择当前宏块的预测块Xp’,结合误差宏块△X’得到解码宏块,经过去块效应滤波后得到重构宏块X’。
帧内预测采用解码宏块像素作为下一个宏块的帧内预测的参考,帧间宏块采用去块滤波后的块作为云顶预测参考图像。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值