问题标签 [range-encoding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
optimization - 范围编码器:如何摆脱分裂?
我正在尝试优化QTC视频编解码器以在 Raspberry Pi 上以良好的性能工作。一个重要的瓶颈是在范围解码器中完成的 32 位整数除法,它占用了 18% 的解码时间。由于该设备的 ARM 处理器显然缺少整数除法指令,我认为可以轻松优化这一点。划分必须准确。
每次调用该特定除法中的被除数和除数都不同,但众所周知,除数总是小于 65536。我考虑过建立一个除数反值的查找表。使用该表,我可以使用乘法而不是除法。查找表的大小为 256 kibibytes。
问题
- 执行该优化是个好主意吗?
- 有没有更好的方法来摆脱软件部门?
- 有没有不同的方法来实现算法,使得没有除法?
- 其他想法?
encoding - 没有歧义或非法输出的范围编码
在范围编码器中,使用有限精度算术可能会导致无法在不先应用某种刷新或调整以在工作寄存器中打开空间的情况下对下一个符号进行编码。
这样做的结果是,根据调整的方式,合法比特流的集合中可能会留下一些小间隙。
例如,维基百科页面建议将输出范围缩小到允许移出更多位的范围,而原始范围的某些部分未定义。
在解码器中,可能会到达同一点,然后发现输入比特流本身不符合编码器调整,而是继续向下进入应该被编码器丢弃的间隙。这种比特流没有正确的解码。
将此与诸如 Huffman 之类的东西进行对比,后者通常在没有任何模糊输入配置的情况下定义(除了在流的末尾可能有不完整的符号)。因此,可以将任意比特流解码为一条消息,然后将其重新编码为原始比特流。
我的问题是:是否可以制定某种调整来处理精度限制但不会产生不可解码或模棱两可的比特流的可能性?这样给定任意比特流,总是可以将其解码为一组符号,这些符号可以重新编码回原始比特流?
直觉上,这似乎是不可能的,我不应该对这个问题大发雷霆;但我看着霍夫曼并推断它具有我应该能够模拟的属性。