HEVC代碼學習41:解碼器代碼整體學習

最近看了一些解碼端的代碼,爲了方便閱讀,寫個總結梳理一下思路,之後會不斷補充。

這裏借用雷神的圖:
這裏寫圖片描述

decmain.cpp

HM解碼器入口是TAppDecoder的decmain.cpp,調用了四個入口函數cTAppDecTop.create()(創建解碼器),cTAppDecTop.parseCfg( argc, argv )(分析配置信息),cTAppDecTop.decode()(解碼的入口),cTAppDecTop.destroy()(解碼結束,內存釋放),另外還有計時操作。解碼器端需要學習的函數都在cTAppDecTop.decode()中。

TAppDecTop::decode

該函數中會初始化解碼器,按幀讀入碼流,調用TDecTop::decode進行NALU和視頻的解碼(xDecodeSlice),調用executeLoopFilters對重構的幀圖像進行濾波並按時間順序重新排序,如果該幀不是參考幀就會被釋放掉否則暫存。

decompressSlice

從雷神的框架圖中可以看到,有兩個decompressSlice

1.上層的TDecGop::decompressSlice,主要完成解碼計時、熵解碼器初始化,調用TDecSlice::decompressSlice進行解碼。

2.TDecSlice::decompressSlice(詳見 HEVC代碼學習38:decompressSlice函數)進行實際解碼操作,其中會遍歷所有CTU進行解碼,其中調用了重要函數decodeCtudecompressCtu,完成CTU的解碼和重構。

decodeCtu(詳見 HEVC代碼學習39:decodeCtu和xDecodeCU函數)會調用xDecodeCU來完成真正的CTU解碼工作,注意只是解碼CTU預測所需要的信息,沒有進行重構。

decompressCtu完成CTU的預測,生成最終的重構CTU。

接下來的解碼中會調用很多Lib庫的函數,在編碼端可能已經看到過。

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