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库的函数,在编码端可能已经看到过。

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