主要包括:
入口點函數main()【建立cTAppEncTop類,解析輸入的配置函數,設定時間相關的參數】
cTAppEncTop.encode()【對編碼器所使用的幾個對象進行初始化,配置設定YUV資料緩存,循環讀取YUV檔案】
m_cTEncTop.encode(...)【調用m_cGOPEncoder.compressGOP()實作對一個GOP的實際編碼】
m_cGOPEncoder.compressGOP()【調用initGOP設定GOP的參數;調用m_pcSliceEncoder->initEncSlice(),利用SPS和PPS中的資訊建立編碼的slice對象;調用m_pcSliceEncoder->compressSlice
( pcPic )對一個slice進行編碼。】
m_pcSliceEncoder->compressSlice ( pcPic )【設定編碼slice的參數,對slice的每一個cu進行處理】
TEncCu::compressCU()【編碼一個CU】
以上各個函數分别在前一個函數中調用,形成類似一個反向的call stack的結構。
TEncCu::compressCU()函數的實作如下:
該函數的核心方法為xCompressCU( m_ppcBestCU[0], m_ppcTempCU[0], 0 )。該函數實作了編碼一個CU的多種功能,首先判斷嘗試進行幀間預測,然後嘗試進行幀内預測,另外還包括了PCM模式的編碼以及一個CU的進一步劃分等。這裡主要關心的是intra模式,實作的代碼為:
該函數調用的xCheckRDCostIntra實作了幀内預測的具體過程: