最近看了一些解码端的代码,为了方便阅读,写个总结梳理一下思路,之后会不断补充。
这里借用雷神的图:
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
。