x264代码剖析——核心算法之宏块编码中的量化编码
2016-03-25 13:04
344 查看
为了进一步节省图像的传输码率,需要对图像进行压缩,通常采用变换编码及量化来消除图像中的相关性以减少图像编码的动态范围。本文主要介绍量化的相关内容,并给出x264中量化编码的代码分析。
量化过程就是根据图像的动态范围大小确定量化参数,既保留图像必要的细节,又可以减少码流。在图像编码中,变换编码和量化从原理上讲是两个独立的过程。但在H.264中,将两个过程中的乘法合二为一,并进一步采用整数运算,减少编解码的运算量,提高图像压缩的实时性,这些措施对峰值信噪比(PSNR)的影响很小,一般低于0.02dB,可不计。下面给出编码器中变换编码及量化过程的流程。
下面给出毕厚杰著作的《新一代视频压缩编码标准——H.264/AVC(第二版)》中量化的相关理论知识,仅供学习参考。
量化的相关函数大都位于common/quant.c中,主要包括以下函数:
x264_quant_init():初始化量化和反量化相关的汇编函数
quant_4x4():对4x4的DCT残差矩阵进行量化
QUANT_ONE():完成一个DCT系数的量化工作
quant_4x4x4():对4个4x4的DCT残差矩阵进行量化
下面对这些函数进行深入分析。
量化模块的初始化函数是x264_quant_init()。该函数对x264_quant_function_t结构体中的函数指针进行了赋值。X264运行的过程中只要调用x264_quant_function_t的函数指针就可以完成相应的功能。
1、量化编码
量化过程就是根据图像的动态范围大小确定量化参数,既保留图像必要的细节,又可以减少码流。在图像编码中,变换编码和量化从原理上讲是两个独立的过程。但在H.264中,将两个过程中的乘法合二为一,并进一步采用整数运算,减少编解码的运算量,提高图像压缩的实时性,这些措施对峰值信噪比(PSNR)的影响很小,一般低于0.02dB,可不计。下面给出编码器中变换编码及量化过程的流程。
下面给出毕厚杰著作的《新一代视频压缩编码标准——H.264/AVC(第二版)》中量化的相关理论知识,仅供学习参考。
2、量化源码分析
量化的相关函数大都位于common/quant.c中,主要包括以下函数:
x264_quant_init():初始化量化和反量化相关的汇编函数
quant_4x4():对4x4的DCT残差矩阵进行量化
QUANT_ONE():完成一个DCT系数的量化工作
quant_4x4x4():对4个4x4的DCT残差矩阵进行量化
下面对这些函数进行深入分析。
2.1、x264_quant_init()函数
量化模块的初始化函数是x264_quant_init()。该函数对x264_quant_function_t结构体中的函数指针进行了赋值。X264运行的过程中只要调用x264_quant_function_t的函数指针就可以完成相应的功能。
相关文章推荐
- spring错误汇总
- Java 理论与实践: 并发集合类
- Python关键字总结
- LIGHT OJ 1259 - Goldbach`s Conjecture(素数筛选)
- 一个获取google chrome扩展crx文件信息的PHP操作类
- 关于windows的service编程
- Why use Spring
- Qt 的线程与事件循环
- 安装Yaf框架
- 两代码的区别
- php 解析json
- struts2上传
- C++返回值之相关问题
- JAVA中static修饰成员变量时 和 不修饰成员变量时的区别 如下面的两个例子 的区别 为什么下面的是错误的
- java事务学习笔记(一)--概要
- 深入理解Java的接口和抽象类
- java中最小生成树的实现
- C++作业2
- 关于Eclipse自动补全的问题
- Java中的基本数据类型 | Java基础