HEVC中嵌入Inter网络进行划分模块优化时出现的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/VioletHan7/article/details/82223762

一、错误1

以下代码是从cu_depth.dat文件中读取预测出来的CU划分概率,每次读取validWidthInCTU*validHeightInCTU * 21个划分概率。
其中cu_depth.dat文件中保存的是整个seq的划分概率。

这里写图片描述

该代码段位于TEncGOP.cpp的Void TEncGOP::compressGOP函数中。

1.编码的简要流程回顾
TAppEncTop的encode函数调用了compressGOP这个函数,这个函数对一个图像组进程编码。
每一帧都会调用encode函数,如果编码多帧的话,compressGOP函数也会多次进行调用

compressGOP函数
1.调用xInitGOP设置图像组中帧的数量
2.设置一些图像增强信息
3.进入一个大for循环,对图像组中的每一帧图像进行处理
3.1说明一下GOPEntry并不表示一个图像组,而是表示某一帧对应的GOP(即图像组)的信息,它包含了这个帧的参考帧等重要信息。
3.2调用selectReferencePictureSet、createExplicitReferencePictureSetFromReference、applyReferencePictureSet、arrangeLongtermPicturesInRPS、setRefPicList、setRefPOCList、setList1IdxToList0Idx等几个函数,设置当前帧的参考图像集、参考帧、并对这些参考帧进行排序等,比较复杂的功能。
3.3进入一个while循环,对帧的每一片(slice)进行编码,主要是调用compressSlice来选出最优的参数,以及预测、变换、量化的编码工作,然后进行环路滤波,最后调用encodeSlice对其进行熵编码
4.一些收尾工作!

2.读取预测概率代码解释
根据上面的编码流程我们知道,这段读取预测概率的代码处于一个循环中,每次读取文件内容后都有一个fclose()操作,看上去没有什么问题,但是运行代码会出现下面的报错:

这里写图片描述

因为cu_depth.dat中保存的是整个seq的划分概率,因此不需要每一帧结束后执行fclose()操作,需要保存文件指针当前的位置,在下一次读取时,接着从上次读取后的一个位置开始读取才合理,在整个seq编码结束后再执行fclose()操作。

3.代码修改

这里写图片描述

以下是运行结果:
这里写图片描述

一、错误2

猜你喜欢

转载自blog.csdn.net/VioletHan7/article/details/82223762