video-processing - 更改 HM 参考软件以显示有关比特流的一些信息
问题描述
我对 HM HEVC(和 JEM)参考软件非常陌生,目前正在尝试了解源代码。我想为每个组件添加一些要显示的行:算法名称(即算法间/内部算法)+ 比特流长度+ 输出 bin 文件中的位置。了解哪个组件的编码成本更高以及编解码器的工作方式。在那之后,我也想为 JEM 做同样的事情。我的问题首先是我无法理解那里的很多功能,注释不够,所以有什么参考资料可以理解代码吗??!!(我已经阅读了曼努埃尔,没有帮助)。第二,我不知道在哪里以及如何添加这些行;是在TEncGOP
,TEncSlice
还是TEncCU
. Ps:我不认为TEncGOP.compressGOP
可能在其他2个课程中。
解决方案
第 1 点:有一个通俗易懂的规则,即在解码器端记录编码决策(例如 pred 模式、MV、IPM、块大小)比在编码器端容易得多。这是因为你在编码器端有超级复杂的 RDO 过程,很容易让你迷失在循环中。但在解码器端,一切都只出现一次。但是,如果你坚持在编码器端做,你可能会在这里找到一些提示:Get some information from HEVC reference software
第 2 点:与编码决策不同,记录率(即不同语法元素的写入比特数)在解码器端比编码器端更复杂。对于与以非 EP 模式(即使用 CABAC 上下文)编码的任何内容相关联的小数位尤其如此。所以你可以在编码器端做这部分。但恐怕这并不容易。
第 3 点:我认为理解代码的最佳方式是逐行阅读。这非常耗时,但如果您从理论上了解标准,您可能能够区分重要部分并忽略其余部分。
PS:我认为您的帖子中有太多问题,大多过于笼统。这让我有点难以一起回答它们。所以你我会等你采取下一步并提出更精确的问题。
推荐阅读
- localization - 自动布局本地化警告显示在问题导航器中,但在故事板的自动布局窗格中看不到它们(Xcode 9.3)
- angularjs - Admob angularjs
- metaprogramming - 水晶语言:如何用项目特定包中文件中定义的所有模块填充数组?
- shell - 获取 sh: =~: shell 脚本中的未知操作数
- android - 尝试添加 firebase ml 视觉图像标签模型时,Gradle 同步失败
- routes - 重新加载页面回到登录角度 6
- linq - Kotlin 中的语言集成查询?
- javascript - AJAX 在 macOS WebView 中不起作用
- service - 在服务中处理较长的 Pod 响应时间
- javascript - ExtJs 工具栏配置对象