自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(188)
  • 资源 (33)
  • 收藏
  • 关注

原创 HEVC码率控制浅析——HM代码阅读之四

继续分析第一篇提到的compressSlice中对LCU的RC参数初始化:#if RATE_CONTROL_LAMBDA_DOMAIN Double oldLambda = m_pcRdCost->getLambda(); if ( m_pcCfg->getUseRateCtrl() ) { Int estQP = pc

2013-09-05 13:43:56 7433 22

原创 HEVC码率控制浅析——HM代码阅读之三

续上文继续分析m_pcRateCtrl->initRCPic( )Void TEncRateCtrl::initRCPic( Int frameLevel ){ m_encRCPic = new TEncRCPic; m_encRCPic->create( m_encRCSeq, m_encRCGOP, frameLevel, m_listRCPictures );}

2013-09-05 11:24:07 6496 2

原创 HEVC码率控制浅析——HM代码阅读之二

上一篇文章主要讨论了RC的总体框架,本文开始分析具体的代码实现细节。分析的顺序按照总体框架来,即初始化-->更新。 (1)m_cRateCtrl.init()#if M0036_RC_IMPROVEMENTVoid TEncRateCtrl::init( Int totalFrames, Int targetBitrate, Int frameRate, Int GOPSize,

2013-09-03 17:58:48 7207 4

原创 HEVC码率控制浅析——HM代码阅读之一

HM的码率控制提案主要参考如下三篇:K0103,M0036,M0257。本文及后续文章将基于HM12.0进行讨论,且首先仅讨论K0103对应的代码,之后再陆续补充M0036,M0257对应的代码分析,这么做可能会使得剧情不会显得那么地跳跃,分析起来能够更好地被接受。 按照我的个人习惯,还是先分析HM中码率控制部分(以后简称RC)的总体框架吧。跟RC有关的头文件和源文件为工程TLibEn

2013-09-03 15:46:39 14553 19

原创 HM中去方块滤波的禁用方法

有时候我们想禁用掉HM的去方块滤波,测试下去方块滤波的效果,很容易就想到要修改配置文件,根据注释,容易找到:       LoopFilterDisable             : 1           # Disable deblocking filter (0=Filter, 1=No Filter)       但是运行完程序后就会发现,这个参数改为0或者改为1结果根本就是一样

2013-08-13 17:47:32 3963 4

原创 HM中CU,TU的划分

相信只要是做算法改进的,首先都会遇到这么一个问题:CU,PU及TU这几个在HM中该如何打印出它们最终的划分情况呢?也经常有人来问我这个问题,一般来说,因为问我的时候我一般手头都没有现成的代码可以提供,另一方面,也没空把vs打开写上一段,所以只能是告诉他们大概的思路,其实我很早之前的一篇博客已经进行了介绍,只是当时没有把代码附上,后来也找不到了,就不了了之了。本文算是把这个遗憾给补上吧。直接附上代码

2013-08-08 17:49:33 17504 37

原创 ffmpeg错误隐藏框架分析

本文主要是分析ffmpeg的错误隐藏框架,故解码流程此处不会特地进行讨论,网上其他地方其实也有不少介绍相关流程的了,但发现基本没有介绍错误隐藏流程的,故本文希望能填补这个空白。             我们直接从decode_frame开始跟踪(相信从这个地方开始不会有人有啥疑问吧,怎么跟踪到这里的已经有很多资料介绍的了),decode_frame ---> decode_nal_units

2013-07-30 13:45:17 5132

原创 ffmpeg中guess_mv的分析

static void guess_mv(MpegEncContext *s){ uint8_t fixed[s->mb_stride * s->mb_height];#define MV_FROZEN 3#define MV_CHANGED 2#define MV_UNCHANGED 1 const int mb_stride = s->mb_strid

2013-07-30 11:15:33 2270

原创 HEVC帧间预测之七——运动估计(四)

有了前面几篇的铺垫,本文就可以把整像素部分的运动估计给结束掉了。到目前为止,只剩下xTZSearch这个函数没分析了,在开始这个函数的代码解释之前,让我们共同来理一下TZSearch的基本流程:1. 搜索预测得到的mv所指向的点:中值预测mv,当前PU的左,上及右上PU的mv,还有零运动矢量(0,0)2. 在步骤1中找到匹配误差最小的点作为接下来搜索的起始点3. 步长从1开始,以2的指

2013-03-18 16:11:03 12358 53

原创 HEVC帧间预测之六——运动估计(三)

本文分析xTZSearch调用了两个最为主要的函数:xTZ8PointDiamondSearch和xTZ2PointSearch,值得一提的是,HM中还提供了另外一个搜索函数xTZ8PointSquareSearch,但由于实际并没有使用这个函数,且它其实跟钻石搜索只是搜索点的选择略有不同,分析起来基本上也是一样的,这里就不重复啰嗦了。__inline Void TEncSearch::xTZ

2013-03-18 14:06:16 7707 4

原创 HEVC帧间预测之五——运动估计(二)

分析xTZSearch这个函数,xTZSearchHelp是当中最为重要的子函数之一。它实现最基本的功能:根据输入的搜索点坐标,参考图像首地址,原始图像首地址,以及当前PU大小等相关信息,计算出SAD,并与之前保存的最佳值进行比较,更新到目前为止的最佳值相关参数,如uiBestSad,搜索点坐标,搜索步长等。其他的函数如xTZ8PointSearch等搜索函数,最终都是调用xTZSearchHel

2013-03-18 13:36:56 9188 10

原创 HEVC帧间预测之四——运动估计(一)

其实HM的运动估计这部分与H.264相比基本没有变化,如果看过JMVC运动估计的代码,会发现xTZSearch的结构几乎就是一样的。所以,严格来讲,这部分的东西没有什么太多新鲜的东西,相信以前研究过TZSearch的人看这部分代码会很轻松。先看运动估计的主调函数://!< 运动估计Void TEncSearch::xMotionEstimation( TComDataCU* pcCU, T

2013-03-17 22:36:57 17166 16

原创 HEVC帧间预测之三——TEncCu::xCheckRDCostMerge2Nx2N函数分析

本文将对实现merge模式的主函数xCheckRDCostMerge2Nx2N进行分析,方便理清merge模式的整个过程。之前的一篇分析了getInterMergeCandidates的具体实现,还有两个比较重要的函数motionCompensation和encodeResAndCalcRdInterCU,将留在后面陆续进行分析,但是根据它们的命名就不难猜出它们的作用,而且事实也是这样,因此对理解

2013-03-12 16:11:49 10248 26

原创 HEVC帧间预测之二——TComDataCU::xGetColMVP的分析

在上一篇介绍的函数中,在求TMVP时调用了一个比较重要的函数,xGetColMVP。本文对该函数进行较为详细的分析:Bool TComDataCU::xGetColMVP( RefPicList eRefPicList, Int uiCUAddr, Int uiPartUnitIdx, TComMv& rcMv, Int& riRefIdx ){//! 这部分的内容可以参考draft 8.

2013-03-12 14:33:16 7464 9

原创 HEVC帧间预测之一——TComDataCU::getInterMergeCandidates函数分析

从今天开始,正式转入到帧间预测方向。由于帧间预测涉及到的方面广且复杂,所以我的理解出现错误的情况可能会更多,请大家以辩证的眼光来看待我的帖子,有问题欢迎大家批评指正。 大家都知道xCompressCU是实际进行预测编码的函数,故很容易就能锁定帧间预测的一个大致范围,在研究了帧内预测的基础上,相信很快就能在该函数中找到与帧间预测相关的函数:xCheckRDCostInter,xCheckRD

2013-03-12 13:29:28 11070 21

原创 HEVC CU 级别的分析

接下来有关HEVC的文章都是HEVC学习系列的延续,但由于序号偏多,为方便起见,就不再单独编号,直接以讨论内容作为题目了。 要研究CU级的代码,少不了要接触到这么一个类TComDataCU。为了比较顺畅地看代码,对这个类的重要成员自然需要有比较好的认识才行,这就是本文的目的,给大家提供一个共同讨论类中私有成员含义与作用的平台。 class TComDataCU{privat

2013-03-05 21:49:03 12570 37

原创 最新版(2013.01.17)x264的多线程代码研究(一)

先罗列出代码中与多线程有关的宏定义、结构体、变量、函数等,锁定为需要重点关注的对象,在接下来的研究中逐步深入探讨这些对象的含义和作用。define X264_THREAD_MAX 128#define X264_LOOKAHEAD_THREAD_MAX 16#define X264_LOOKAHEAD_MAX 250// arbitrary, but low because S

2013-01-27 13:17:48 4032 3

原创 HEVC学习(三十六) —— 去方块滤波之七

本文介绍关于去方块滤波的最后一个函数(这一系列基本上只讨论了亮度分量的情况,色度分量的情况类似,不单独做出分析)。Void TComLoopFilter::xEdgeFilterLuma( TComDataCU* pcCU, UInt uiAbsZorderIdx, UInt uiDepth, Int iDir, Int iEdge ){ TComPicYuv* pcPicYuvR

2013-01-25 21:32:12 4585 4

原创 HEVC学习(三十五) —— 去方块滤波之六

先看HM中定义tC、β这两个变量的表格,与draft中的Table 8-10相对应:const UChar tctable_8x8[54] ={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,5,5,6,6,7,8,9,10,11,13,14,16,18,20,22,24};

2013-01-25 21:08:16 3724 1

原创 HEVC学习(三十四) —— 去方块滤波之五

本文考察实现去方块滤波的核心函数xDeblockCU:Void TComLoopFilter::xDeblockCU( TComDataCU* pcCU, UInt uiAbsZorderIdx, UInt uiDepth, Int Edge ){ if(pcCU->getPic()==0||pcCU->getPartitionSize(uiAbsZorderIdx)==SIZE_N

2013-01-25 16:53:40 4822

原创 HEVC学习(三十三) —— 去方块滤波之四

本文考察Boundary Strength (BS)的获取过程:Void TComLoopFilter::xGetBoundaryStrengthSingle ( TComDataCU* pcCU, UInt uiAbsZorderIdx, Int iDir, UInt uiAbsPartIdx ){ TComSlice* const pcSlice = pcCU->getSlice

2013-01-25 16:03:09 5120 4

原创 HEVC学习(三十二) —— 去方块滤波之三

Void TComLoopFilter::xSetEdgefilterPU( TComDataCU* pcCU, UInt uiAbsZorderIdx ){ const UInt uiDepth = pcCU->getDepth( uiAbsZorderIdx ); const UInt uiWidthInBaseUnits = pcCU->getPic()->getNumPa

2013-01-25 14:11:36 5091 4

原创 HEVC学习(三十一) —— 去方块滤波之二

这个是维护去方块滤波参数的结构体:/// parameters for deblocking filtertypedef struct _LFCUParam{ Bool bInternalEdge; ///< indicates internal edge Bool bLeftEdge;

2013-01-24 22:30:20 4490

原创 HEVC学习(三十) —— 去方块滤波之一

去方块滤波的详细过程可参看draft 8.7.1 to 8.7.2 。     在compressGOP中可以找到下面一段代码,这里就是调用去方块滤波的地方 //-- Loop filter Bool bLFCrossTileBoundary = pcSlice->getPPS()->getLoopFilterAcrossTilesEnabledFlag();

2013-01-24 21:37:56 9016 15

原创 HEVC学习(二十九) —— 量化之三

为了更好地与draft进行对应,看HM中的反量化部分代码:Void TComTrQuant::xDeQuant(Int bitDepth, const TCoeff* pSrc, Int* pDes, Int iWidth, Int iHeight, Int scalingListType ){ const TCoeff* piQCoef = pSrc; Int*

2013-01-20 23:04:11 5800

原创 HEVC学习(二十八) —— 量化之二

Void TComTrQuant::transformNxN( TComDataCU* pcCU, Pel* pcResidual, //!< 残差 UInt uiStride,

2013-01-20 20:25:37 9307 26

原创 HEVC学习(二十七) —— 变换编码之二

//! 用于significant_coeff_flag的上下文推导过程的模式选择 draft 9.3.3.1.4Int TComTrQuant::calcPatternSigCtx( const UInt* sigCoeffGroupFlag, UInt posXCG, UInt posYCG, Int width, Int height ){ if( width == 4 &&

2013-01-19 23:01:05 6049

原创 HEVC学习(二十六) —— 量化之一

先列出HM中与draft对应的几个表格,随着研究的深入,本文会慢慢补充。enum ScalingListSize{ SCALING_LIST_4x4 = 0, SCALING_LIST_8x8, SCALING_LIST_16x16, SCALING_LIST_32x32, SCALING_LIST_SIZE_NUM}; //!< Table 7-2 (S

2013-01-15 19:11:56 7555 4

原创 HEVC学习(二十五) —— 变换系数的编码之一

本文首先介绍系数扫描模式的初始化。直接给出代码及相应的注释: // scanning order tableUInt* g_auiSigLastScan[ 3 ][ MAX_CU_DEPTH ]; //!< [pattern][depth]const UInt g_sigLastScan8x8[ 3 ][ 4 ] ={ {0, 2, 1, 3}, //!< rig

2013-01-12 14:33:07 7602 9

原创 HEVC学习(二十四) —— 熵编码之五

本文介绍EncodeDecision过程,对应的代码及注释如下:/** * \brief Encode bin * * \param binValue bin value * \param rcCtxModel context model */Void TEncBinCABAC::encodeBin( UInt binValue, ContextModel &rcC

2013-01-07 15:27:09 6536 13

原创 HEVC学习(二十三) —— 熵编码之四

本文主要考察与概率转移有关的几个表格及使用分析。下图是draft 9.3.4.2中的Figure 9-7,在接下来的分析中需要用到,这里先贴出来:(注:图中有个小错误,valMPS = 1 ? valMPS,实际应为valMPS = 1 - valMPS,特此更正)在ContextModel.cpp中,给出了transIdxLPS和transIdxMPS这两个表格:const

2013-01-06 14:24:54 6437 3

原创 HEVC学习(二十二) —— 熵编码之三

在继续介绍CABAC之前,先穿插进另外几种相对而言较为简单的熵编码方式。下图是截取自draft 7.3.2.1的关于VPS(Video Parameter Set)的句法元素描述:关注表格中"Descriptor”这一栏,当中的描述符有u,ue,分别表示无符号整型、无符号整型0阶指数哥伦布编码方式,可以在HM中找到与表格相对应的一段代码:Void TEncCavlc::codeVPS(

2013-01-05 14:57:38 6861 1

原创 HEVC学习(二十一) —— 熵编码之二

本文继续讨论编码器的初始化过程,即draft 9.3.1.1。上一篇介绍的是各个context对应到标准相应表格的值,以及相关变量和函数,前面提到initBuffer函数对context进行初始化,但是没有深入解析这个函数的实现,这就是本文的主要任务。首先介绍下面讨论过程中会涉及到的一个类ContextModel3DBuffer,重点关注该类的构造函数:/// context mode

2013-01-04 22:51:37 6805 14

原创 HEVC学习(二十) —— 熵编码之一

从本篇开始,接下来的若干篇会逐步分析HM 9.1中有关熵编码的过程。在此以及以后的几篇,我都默认大家对熵编码(针对CABAC,因为HEVC只有这一种编码方式,而H.264有CAVLC和CABAC两种)的基本概念和流程有了一定的基础,同时,由于HEVC中的CABAC基本流程与H.264中的基本一致,因此,这里暂时不会介绍熵编码框架和流程,有兴趣的可以参考H.264中的相关资料。我会按照编码的执行顺序

2013-01-04 15:46:20 20201 13

原创 HEVC学习(十九) —— NAL unit 的解码过程之三

前面两篇已经将NAL的解析过程的核心部分介绍完了,本篇主要讨论如何将NAL的payload部分转化为原始数据,即从EBSP到RBSP的过程。该过程由TAppDecTop::decode()的子函数read(nalu, nalUnit)调用convertPayloadToRBSP(nalUnitBuf, pcBitstream, (nalUnitBuf[0] & 64) == 0)实现。re

2013-01-03 20:43:15 11422 8

原创 HEVC学习(十八) —— NAL unit 的解码过程之二

下面介绍实际完成NAL解析工作的函数:/** * Parse an AVC AnnexB Bytestream bs to extract a single nalUnit * while accumulating bytestream statistics into stats. * * If EOF occurs while trying to extract a NALu

2013-01-03 19:39:29 5908

原创 HEVC学习(十七) —— NAL unit 的解码过程之一

下图为官方标准中NAL层的句法元素,且以伪代码的形式给出了解码过程:在HM中由TAppDecTop::decode()调用byteStreamNALUnit(bytestream, nalUnit, stats)实现如上伪代码:/** * Parse an AVC AnnexB Bytestream bs to extract a single nalUnit * while

2013-01-03 19:00:42 10355 6

原创 BD-rate的计算

相信不少接触视频编码的朋友在看相关的文献的时候,总会看到论文中测试时给出一个重要的参数BD-rate,可能一直心存疑问,这个BD-rate到底是个什么东西呢?可以参考这一份提案http://download.csdn.net/detail/hevc_cjl/4927493简单地说,这个BD-rate计算的是两种算法对应的两条RD曲线的差值的均值,具体需要通过对测试的几个(一般是4个)点进行曲线

2012-12-25 19:09:23 16668

原创 x264去方块滤波函数解析(三)

去方块滤波查表时需要用到的几个数组:/* Deblocking filter */static const uint8_t i_alpha_table[52+12*2] ={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

2012-12-19 23:15:18 1858

原创 x264去方块滤波函数解析(二)

上一篇介绍了实际进行滤波的函数,本篇主要介绍,去方块滤波这边的函数调用关系。先看几个定义://! 两个函数指针,第一个是bS=1~3时调用的,第二个是bS=4时调用的。typedef void (*x264_deblock_inter_t)( uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0 );typedef voi

2012-12-19 23:03:37 2876

华为机试题

华为的机试题目,c语言风格,仅供参考,不保证完整性和正确性。

2013-09-23

计算机网络第五版

这是谢希仁编著的《计算机网络》(第五版)的电子书,是我们学习计算机网络的优质参考书籍之一,值得下载。

2012-12-06

Python基础教程

这是一本python的经典教程,如果想学习python的话,这本教程值得下载下来一看

2012-12-03

数据结构c语言版

这是一本严蔚敏主编的数据结构参考书的电子版,值得大家下载下来学习

2012-12-03

JM软件配置文件的参数说明

这个是H.264官方参考软件JM的参考手册,对配置文件的参数都有详细的解释,是学习JM使用的必备手册。

2012-12-01

H.264官方标准英文版

这个是学习H.264的必备资料之一,为H.264官方标准的英文版,原汁原味,值得下载学习。

2012-12-01

H.264官方中文版

这个是H.264的官方中文版,是学习H.264标准的好帮手

2012-12-01

H.264官方参考软件 JM 18.4

这是目前最新版本的H.264官方参考软件,供大家参考学习

2012-11-30

news_qcif.yuv

在学习H.264的过程中,有个环节自然是对YUV文件进行编码,这里给大家提供了标准的YUV测试序列,qcif格式,省去大家查找的麻烦,直接下载即可使用

2012-11-28

ice_qcif.yuv

在学习H.264的过程中,有个环节自然是对YUV文件进行编码,这里给大家提供了标准的YUV测试序列,qcif格式,省去大家查找的麻烦,直接下载即可使用

2012-11-28

waterfall_cif.yuv

在学习H.264的过程中,有个环节自然是对YUV文件进行编码,这里给大家提供了标准的YUV测试序列,cif格式,省去大家查找的麻烦,直接下载即可使用

2012-11-28

foreman_qcif.yuv

在学习H.264的过程中,有个环节自然是对YUV文件进行编码,这里给大家提供了标准的YUV测试序列,qcif格式,省去大家查找的麻烦,直接下载即可使用

2012-11-28

HEVC帧内预测的几个重要提案

搜集了HEVC关于帧内预测的几个重要提案,相信对大家在刚开始看帧内预测时会有帮助

2012-11-23

HEVC reference software manual (JCTVC-F634)

这是目前最新的HEVC官方参考软件手册,是针对HM参考测试模型的文档,主要包含了HM软件的获取、编译、配置参数解释以及软件的使用等方面的内容,是HEVC学习不可或缺的文档之一!

2012-11-13

HEVC测试模型HM8.0

这是HEVC官方参考测试模型的源代码,为HM8.0,供有兴趣的朋友下载下来参考学习

2012-11-13

HEVC测试模型HM9.0

这是目前最新的HEVC官方参考测试模型,供有兴趣的朋友下载下来参考

2012-11-13

视频编码技术研究

本资源是有关视频编码的毕业论文和ppt,可供下载下来进行参考

2013-07-15

HEVC参考软件最新版11.0

HEVC官方参考软件最新版HM11.0,可供学习H.265标准参考

2013-07-07

C++ primer英文版

C++ primier 的英文原版,适合c++学习者

2013-04-09

ffmpeg可执行文件exe

这个不是ffmpeg的源码,只是可以在windows下使用的一个可执行文件exe,把它当成一个工具来用,主要目的是帮助那些只是临时需要使用ffmpeg而不愿意费力自己编译它的朋友

2013-04-09

HEVC最新参考模型HM10.0

这个是截至目前为止最新的HEVC官方参考软件HM10.0,相比于HM9.1,又做了一些改动。

2013-03-28

VisualSVN-3.0.4

这个是可在visual studio中使用的一个插件,安装它之后,可在vs开发环境下,直接对工程进行管理

2013-01-12

TortoiseSVN

针对windows 32位的SVN客户端

2013-01-12

HEVC参考测试模型 HM9.1

这个是目前HEVC官方参考软件即HM的最新版9.1,可供大家下载下来参考学习。

2013-01-03

BD-rate的Excel计算法

该文件提供了使用Excel进行BD-rate的计算方法及示例,可以供大家参考学习

2012-12-25

BD-rate相关提案VCEG-M33.doc

这个是在视频编码中评价算法性能的重要参数之一BD-rate的提案,相信能够帮助大家理解这个参数的由来和计算方法

2012-12-25

H264visa 分析器

学习H.264的人必备软件之一,是功能强大的264码流文件分析工具,值得大家下载

2012-12-15

yuvPlayer 播放器

这个是yuv序列的播放器,操作简单,非常适合大家下载下来学习研究

2012-12-15

H.264 白皮书

这个是H.264的白皮书,主要涵盖了H.264所有的关键技术,入门必备的资料之一

2012-12-12

程序员面试宝典

相信这是本大家都非常熟悉的电子书了,特别是对于想找工作的程序员来说

2012-12-10

h.264和mpeg-4视频压缩--欧阳合译.pdf

这个是一本学习H.264的经典书籍之一,值得大家下载下来学习

2012-12-10

最新版的x264(VS工程)

目前,x264已经停止了在windows下对vs编译器的支持,本资源是在VS环境下对最新版(2012.10.12)x264进行编译,经测试,能够正常编码,可供大家下载下来进行参考

2012-12-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除