HEVC/H.265參考代碼跟蹤

轉載地址:http://blog.csdn.net/feixiang_john/article/details/7876227#comments

1.編碼器程序從"TAppEncoder"工程中的encmain.cpp文件開始的,此文件中包含程序運行的入口函數"main",在main函數中主要做了編碼器對象的創建、分析配置文件,初始化配置參數,和編碼器最重要的功能"encode"

2.在"encode"函數中,主要實現了讀取YUV文件的數據、初始化工具對象例如:GOPEncoderSliceEncoderCUEncder……。在此函數裏,還包括一個encode函數,調用CompressGOP函數來具體執行編碼任務。

3.在CompressGOP函數中,完成了以下的功能:

 一,InitGOP將文件的碼流分成若干GOP以便後續程序能夠順利執行。

 

  二,InitEncSlice創建編碼的Slice

  三,在此函數中,還包括preCompressSliceCompressSlice兩個函數,前者的作用是選擇不同的lamuda進行編碼(編碼是調用了CompressCU函數,後續介紹),後者是在最好的lamuda下進行編碼。

  四,循環濾波, DB, ALF, SAO等

  五,cabac。

下面重點跟蹤下幀內預測:

4.在xCompressCU函數中(CompressCU函數的主體也是調用xComprssCU函數),先進行幀間預測xCheckRDCostMerge2Nx2N,xCheckRDCostInter等。在做完幀間預測後進行幀內預測,這是調用的函數是xCheckRDCostIntra,在xCompressCU函數的後續部分,還遞歸調用自身以實現對每個CU的編碼。變換編碼在encodeCoeff中實現,量化在xCheckIntraPCM完成。

5.xCheckRDCostIntra函數,主要完成幀內預測的任務,對亮度的預測使用estIntraPredQT,對色度使用estIntraPredChromaQT。

6.estIntraPredQT函數,在思想對亮度的處理和色度的處理是一樣的,所以只介紹亮度的處理函數。在estIntraPredQT函數中,主要完成了RDCost的選擇,在其中predIntraLumaAng函數實現了方向的預測;calcHAD函數計算了SATDxModeBitsIntra函數計算編碼的碼率;xUpdateCandList更新了最好的RDCost所使用的模式。

 

overview

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章