我是一名研究生,目前致力于扩展现代图像和视频压缩编解码器以实现更好的性能。我目前正在修改BPG(更好的便携式图形)和 x265(HEVC/H.265 实现)。
我目前的方法涉及添加额外的帧内预测模式,这些模式可以利用比上方 CTU(编码树单元)的 1 个像素行和左侧 CTU 的 1 个像素列更多的信息量。
我已经实现了我的方法并将我的内部预测模式命名为“35”(BPG 和 hevc 使用模式从 0-34)。我目前的方法要求我每次使用帧内预测模式时都存储两个额外的数字(12 位)。我在将这两个数字嵌入比特流(编码)和从比特流中检索它们(解码)时遇到了问题。
我从 BPG 提供的 x265 包中修改了 entropy.cpp 中的函数codeIntraDirLumaAng,以便它在遇到我的新帧内预测模式 35 时写入两个附加数字。
我的一组问题如下。
1)鉴于我有更多的预测模式,并且我希望它们增加更多,我应该修改以下代码行
encodeBinsEP(dir[j], 5);
成为
encodeBinsEP(dir[j], 6);
2)当我运行解码器时,它第一次遇到它应该存储模式 35 的实例。它无法读取它,而是读取模式 26。我相信这是因为 hevc 中 Intra-Luma Pred-Dir 的派生程序?(有关如何将我的新帧内预测模式正确嵌入比特流以便正确读取的任何输入)?
3) 我应该对我编码的两个附加数字的 CABAC 状态做些什么吗?我创建了一个额外的上下文来处理这种新的信息。我将不胜感激有关如何设置我另外定义的 NUM_STATES_CTX 变量的值以及如何使用 CABAC 对这两个数字进行最佳编码的指针?