HEVC算法和体系结构及x264/x265代码分析
文章平均质量分 87
成长Bar
人生為棋,我願為卒,行動雖慢,可誰見我後退過一步!
展开
-
HEVC算法和体系结构:HEVC概括性介绍
1、HEVC高级语法:提供了一个稳健、灵活和可扩展的框架,用于携带编码的视频及其相关信息,确保在不同的应用环境中,视频内容都能够以最有效的方式传输。2、HEVC块结构和并行特性:确保了HEVC编码设计的基本结构。3、HEVC帧内预测:在之前的编码标准中已经取得实质性的技术进步,即使是静态场景。4、HEVC帧间预测:视频编码的核心问题,高效的帧间预测对HEVC的强翻译 2014-12-11 23:20:52 · 2284 阅读 · 0 评论 -
x264代码剖析(六):encode()函数之x264_encoder_headers()函数
x264代码剖析(六):encode()函数之x264_encoder_headers()函数 encode()函数是x264的主干函数,主要包括x264_encoder_open()函数、x264_encoder_headers()函数、x264_encoder_encode()函数与x264_encoder_close()函数四大部分,其中x264_encoder_en原创 2016-03-09 21:59:20 · 4560 阅读 · 1 评论 -
x264代码剖析(七):encode()函数之x264_encoder_encode()函数
x264代码剖析(七):encode()函数之x264_encoder_encode()函数 encode()函数是x264的主干函数,主要包括x264_encoder_open()函数、x264_encoder_headers()函数、x264_encoder_encode()函数与x264_encoder_close()函数四大部分,其中x264_encoder_enc原创 2016-03-10 11:32:26 · 8949 阅读 · 0 评论 -
x264代码剖析(八):encode()函数之x264_encoder_close()函数
x264代码剖析(八):encode()函数之x264_encoder_close()函数 encode()函数是x264的主干函数,主要包括x264_encoder_open()函数、x264_encoder_headers()函数、x264_encoder_encode()函数与x264_encoder_close()函数四大部分,其中x264_encoder_enco原创 2016-03-10 15:37:57 · 2610 阅读 · 0 评论 -
x264代码剖析(九):x264_encoder_encode()函数之x264_slice's'_write()函数
x264代码剖析(九):x264_encoder_encode()函数之x264_slice's'_write()函数 x264_encoder_encode()函数的核心函数就是x264_slices_write()函数。在x264_slices_write()函数中,最主要的工作就是调用了x264_slice_write()函数(注意“x264_slices_write原创 2016-03-10 20:25:43 · 3432 阅读 · 0 评论 -
x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode()
x264代码剖析(十四):核心算法之宏块编码函数x264_macroblock_encode() 宏块编码函数x264_macroblock_encode()是完成变换与量化的主要函数,而x264_macroblock_encode()调用了x264_macroblock_encode_internal()函数,在x264_macroblock_encode_interna原创 2016-03-22 23:05:27 · 2690 阅读 · 0 评论 -
x264代码剖析(十):x264核心算法框架
x264代码剖析(十):x264核心算法框架 在正式介绍H.264/AVC核心编码算法之前,首先分析一下其编码结构或者编码流程,后续我们可以根据编码的各个模块分别进行介绍,这样有利于对H.264/AVC视频编码算法的更深入了解。 H.264并没有明确规定一个编解码器如何实现,而是规定了一个编码后的视频比特流的句法和比特流的解码方法,在实现上有较大的灵原创 2016-03-12 11:25:56 · 4406 阅读 · 2 评论 -
x264代码剖析(十五):核心算法之宏块编码中的变换编码
x264代码剖析(十五):核心算法之宏块编码中的变换编码 为了进一步节省图像的传输码率,需要对图像进行压缩,通常采用变换编码及量化来消除图像中的相关性以减少图像编码的动态范围。本文主要介绍变换编码的相关内容,并给出x264中变换编码的代码分析。 1、变换编码 变换编码将图像时域信号变换成频域信号,在频域中图像信号能量大部分集中在低频区域,相对原创 2016-03-23 21:58:35 · 2618 阅读 · 2 评论 -
x264代码剖析(十一):核心算法之宏块分析函数x264_macroblock_analyse()
x264代码剖析(十一):核心算法之宏块分析函数x264_macroblock_analyse() x264的 x264_slice_write()函数中调用了宏块分析函数x264_macroblock_analyse(),该模块主要完成2大任务:一是对于帧内宏块,分析帧内预测模式;二是对于帧间宏块,进行运动估计,分析帧间预测模式。 如下图所示是x2原创 2016-03-13 12:22:44 · 3600 阅读 · 0 评论 -
x264代码剖析(十八):核心算法之滤波
x264代码剖析(十八):核心算法之滤波 H.264/MPEG-4 AVC视频编码标准中,在编解码器反变换量化后,图像会出现方块效应,主要原因是:1)基于块的帧内和帧间预测残差的DCT变换,变换系数的量化过程相对粗糙,因而反量化过程恢复的变换系数有误差,会造成在图像块边界上的视觉不连续;2)运动补偿可能是从不是同一帧的不同位置上内插样点数据复制而来,因为运动补偿块的匹配不可原创 2016-04-06 17:05:39 · 3131 阅读 · 1 评论 -
x264代码剖析笔记
x264代码剖析笔记 x264的基本框架仍是采用基于预测+变换的混合编码框架,如下图所示,主要包括:帧内预测、帧间预测、变换与量化、熵编码、滤波等。 下面列举了x264代码剖析的系列文章:《x264代码剖析(一):图文详解x264在Windows平台上的搭建》《x264代码剖析(二):如何编译运行x264以及x264代码基原创 2016-04-07 10:15:25 · 2645 阅读 · 1 评论 -
x264代码剖析(十六):核心算法之宏块编码中的量化编码
x264代码剖析(十六):核心算法之宏块编码中的量化编码 为了进一步节省图像的传输码率,需要对图像进行压缩,通常采用变换编码及量化来消除图像中的相关性以减少图像编码的动态范围。本文主要介绍量化的相关内容,并给出x264中量化编码的代码分析。 1、量化编码 量化过程就是根据图像的动态范围大小确定量化参数,既保留图像必要的细节,又可以减少码流。在原创 2016-03-25 11:28:52 · 2711 阅读 · 0 评论 -
x264代码剖析(十二):核心算法之帧内预测函数x264_mb_analyse_intra()
x264代码剖析(十二):核心算法之帧内预测函数x264_mb_analyse_intra() 在帧内预测模式中,预测块是基于已编码重建块和当前块形成的,编码器通常选取预测块与编码块之间差异最小的预测模式。H.264帧内预测则是参考预测块左方或者上方的已编码块的临近像素点被引入空间域。 对于亮度像素而言,预测块用于16*16或4*4大小宏块的相关操作原创 2016-03-14 20:58:57 · 3478 阅读 · 1 评论 -
x265探索与研究(六):main()函数
x265探索与研究(六):main()函数 x265源码的入口函数是main(),本文分析main()的主要功能。首先给出main()函数的功能及其代码结构;其次给出main()函数源码以及分析;最后给出main()函数中的主要功能函数的具体功能。 1、main()函数的功能及其代码结构 main()函数的主要功能是解析参数并进行编码的一些准原创 2016-04-10 21:55:38 · 5438 阅读 · 0 评论 -
x265探索与研究(七):encode()函数
x265探索与研究(七):encode()函数 在x265中,main()函数中调用了encoder_encode()函数,而encoder_encode()函数调用了encode()函数,encode()函数的主要功能是输入一帧图像,得到一帧图像的输出。 encode()函数主要包括大致三个部分:(1)分析是否由于错误造成的代码终止,如g_ch原创 2016-04-14 11:42:14 · 4169 阅读 · 1 评论 -
x265探索与研究(八):x265中的并行处理机制函数关系分析
x265探索与研究(八):x265中的并行处理机制函数关系分析 HEVC的高计算复杂度如果仅仅依赖于单核处理器计算能力的提高,其代价是非常昂贵的,为此,HEVC的设计充分考虑到了并行计算的需求。x265不同于HM(HEVC test Model),x265将并行计算发挥地更加淋淋尽致。在main()函数中,为了完成多线程计算,读完24帧输入帧后才开始编码的原因也基于此。原创 2016-04-15 21:57:10 · 7761 阅读 · 2 评论 -
x265探索与研究(九):compressFrame()函数
x265探索与研究(九):compressFrame()函数 compressFrame()函数是一个功能繁杂且分析难度较大的函数,主要包括时间戳的初始化工作、access unit的设计、加权预测技术、运动参考帧的估计、当前Slice的QP值确定、熵编码相关信息配置、并行计算与否及其空间的申请、SEI相关配置、线程控制、CTU分析、Multi-pass Encodin原创 2016-04-18 21:22:39 · 6349 阅读 · 0 评论 -
x264代码剖析(五):encode()函数之x264_encoder_open()函数
x264代码剖析(五):encode()函数之x264_encoder_open()函数 我们知道x264源码从主观上分为两大块,一是解析函数parse(),另一个是编码函数encode()。解析函数parse()较简单,并且不涉及H.264编码算法,故不是重点,所以我们要学习的重点自然而然地就是编码函数encode()了。 encode()函数是x原创 2016-03-09 10:19:21 · 5019 阅读 · 3 评论 -
x264代码剖析(十七):核心算法之熵编码(Entropy Encoding)
x264代码剖析(十七):核心算法之熵编码(Entropy Encoding) 熵编码是无损压缩编码方法,它生产的码流可以经解码无失真地恢复出原始数据。熵编码是建立在随机过程的统计特性基础上的。本文对熵编码中的CAVLC(基于上下文自适应的可变长编码)和CABAC(基于上下文的自适应二进制算术熵编码)进行简单介绍,并给出x264中熵编码对应的代码分析。 在H.264的CAV原创 2016-03-31 15:16:42 · 3760 阅读 · 0 评论 -
x264代码剖析(四):vs2010编译x264错误集锦
x264代码剖析(四):vs2010编译x264错误集锦 支持VC++平台的x264的最新版本是x264-20091006,接下来就以该版本为例分析编译运行x264过程中遇到的问题以及解决办法。 1、error C2143: syntax error : missing ';' before 'type' 错误提示:错误原因:MS原创 2016-03-07 22:22:16 · 3162 阅读 · 0 评论 -
HEVC算法和体系结构:环路滤波技术
环路滤波(In-Loop Filtering)技术类似于以往的视频编码标准,HEVC仍采用基于块的混合编码框架,一些失真效应仍然存在,如方块效应、振铃效应、颜色偏差以及图像模糊等等。为了解决这些问题,HEVC中采用了环路滤波技术,它其实是一种用于解码端的后处理滤波技术,主要包括去块滤波(Deblocking Filter,DBF)和样点自适应补偿(Sample Adaptive Off原创 2015-11-09 11:33:11 · 5631 阅读 · 0 评论 -
HEVC算法和体系结构:资源获取和章节安排
从今天开始,将陆续更新最新版HEVC著作《High Efficiency Video Coding (Hevc): Algorithms and Architectures》中文版,原书英文电子版下载地址为:点击打开链接 。翻译 2014-12-10 15:58:22 · 2374 阅读 · 21 评论 -
HEVC算法和体系结构:编码框架
编码框架2013年4月13日HEVC/H.265被ITU-T正式接受为国际标准。类似以往的国际标准,HEVC仍旧采用“预测+变换”的混合编码框架,如下图所示,包括变换、量化、熵编码、帧内预测、帧间预测以及环路滤波等模块。在HEVC中,几乎每个模块都引入了新的编码技术。本博文主要介绍HEVC编码框架,从整体结构出发介绍HEVC各个模块的大致功能以及相应的特色编码技术。原创 2015-11-17 20:57:34 · 3661 阅读 · 0 评论 -
HEVC算法和体系结构:预测编码之帧内预测
预测编码之帧内预测(Intra-Picture Prediction) 预测编码(Prediction Coding)是视频编码的核心技术之一,指利用已编码的一个或几个样本值,根据某种模型或方法,对当前的样本值进行预测,并对样本真实值和预测值之间的差值进行编码。视频编码器对预测后的残差而不是原始像素值进行变换、量化、熵编码,由此大幅度提高编码效率。原创 2015-11-24 19:07:42 · 5322 阅读 · 2 评论 -
HEVC算法和体系结构:预测编码之帧间预测
预测编码之帧间预测(Inter-Picture Prediction) 帧间预测是指利用视频时间域相关性,使用临近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。由于视频序列通常包括较强的时域相关性,因此预测残差值接近于0,将残差信号作为后续模块的输入进行变换、量化、扫描及熵编码,可实现对视频信号的高效压缩。 一、帧间预测编码原理原创 2015-11-25 20:25:12 · 5501 阅读 · 1 评论 -
HEVC算法和体系结构:编码结构之编码时的分层处理架构
编码结构之编码时的分层处理架构 本博文主要介绍HEVC编码结构中的“编码时的分层处理架构”。HEVC编码结构的主要目的就是为了各种应用下操作的灵活性以及数据损失的鲁棒性(所谓“鲁棒性”,是指控制系统在一定的参数摄动下,维持其它某些性能的特性)。从GOP(Group of Pictures)至Slice,从Slice至SS(Slice Segment),从SS至CTU(Co原创 2015-11-20 20:59:12 · 3155 阅读 · 0 评论 -
x265探索与研究(一):x265下载安装与配置
x265下载安装与配置 研究了这么久的HEVC Test Model(HM),相信大家对x265开源代码的实现与框架早就充满了好奇,接下来的日子,我将把自己入手学习与探索“x265开源代码的实现与框架”的过程记录下来,与大家共同进步学习。1、x265下载地址与参考资料x265的官网为: http://x265.org/x265下原创 2016-01-01 22:08:45 · 10099 阅读 · 1 评论 -
x265探索与研究(二):x265使用基本方法
x265使用基本方法 首先,完成x265的下载安装与配置。(参考网址:http://blog.csdn.net/frd2009041510/article/details/50446007)接下来介绍x265编解码视频的基本方法。第一步: 进入“...x265_1.8\build\vc10-x86”,双击“build-al原创 2016-01-02 11:40:46 · 6188 阅读 · 4 评论 -
x265探索与研究(三):如何播放*.265格式的视频或解码视频流
如何播放*.265格式的视频或解码视频流 如下图,在得到.265格式的视频或视频流后应如何播放265格式的视频呢?本博文总结出5种播放265格式视频或视频流的基本方法。方式一:Elecard HEVC Player Sample 软件下载地址:http://download.csdn.net/detail/frd2原创 2016-01-03 09:22:16 · 8786 阅读 · 2 评论 -
x265探索与研究(四):如何编码视频?
如何编码视频? 本文介绍x265中的两种编码视频方法,一是采用命令行的方法;二是GUI的方式。 1、命令行的方法 (1)、第一种方式生成*.265格式的视频文件 第一种方式可以生成*.265格式的视频文件,对应的命令为:x265 --input-res 352x288 --fps 30 hall_cif_352x288_300.y原创 2016-01-04 16:37:29 · 3713 阅读 · 0 评论 -
x265探索与研究(五):如何用VS调试x265?
如何用VS调试x265?1、设置cli为启动项 用VS打开工程项目,如下图: 右击cli,设置为启动项,如下图:2、配置路径和命令行参数 右击cli选择Properties,如下图所示 进入如下界面:原创 2016-01-21 17:19:16 · 3497 阅读 · 6 评论 -
x264代码剖析(一):图文详解x264在Windows平台上的搭建
x264代码剖析(一):图文详解x264在Windows平台上的搭建 X264源码下载地址:http://ftp.videolan.org/pub/videolan/x264/ 平台:win7 PC、VS2010 1、MinGW的下载、安装与配置 MinGW的下载地址:http://sourceforge.net/projects/m原创 2016-03-02 15:21:41 · 4812 阅读 · 3 评论 -
x264代码剖析(十三):核心算法之帧间预测函数x264_mb_analyse_inter_*()
x264代码剖析(十三):核心算法之帧间预测函数x264_mb_analyse_inter_*() 帧间预测是指利用视频时间域相关性,使用临近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。由于视频序列通常包括较强的时域相关性,因此预测残差值接近于0,将残差信号作为后续模块的输入进行变换、量化、扫描及熵编码,可实现对视频信号的高效压缩。原创 2016-03-17 21:39:12 · 4034 阅读 · 0 评论 -
x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode()
x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode() x264的入口函数为main()。main()函数首先调用parse()解析输入的参数,然后调用encode()编码YUV数据。parse()首先调用x264_param_default()为保存参数的x264_param_t结构体赋默认值;然后在一个大循环中通过getopt_long(原创 2016-03-07 17:14:47 · 5034 阅读 · 0 评论 -
x264代码剖析(二):如何编译运行x264以及x264代码基本框架
x264代码剖析(二):如何编译运行x264以及x264代码基本框架 x264工程在x265出现之前一直在更新,但是自x264-20091007(含)不再支持VC++平台,也就是说支持VC++平台的x264的最新版本是x264-20091006。接下来就以该版本为例简单介绍如何编译运行x264以及x264代码的基本框架。 首先下载x264-20091原创 2016-03-04 21:11:39 · 5400 阅读 · 3 评论 -
x265探索与研究(十):encodeSlice()函数、encodeCTU()函数、encodeCU()函数与finishCU()函数分析
x265探索与研究(十):encodeSlice()函数、encodeCTU()函数、encodeCU()函数与finishCU()函数分析 encodeSlice()函数、encodeCTU()函数、encodeCU()函数与finishCU()函数都是编码的重要函数,根据函数命名均可得知其各自的功能。下面首先给出这几个函数之间的调用关系图。 1、en原创 2016-04-19 22:43:38 · 5838 阅读 · 3 评论