【发布时间】:2014-03-05 16:04:15
【问题描述】:
我目前正在研究在纯 C 中实现高效 BitStream 的各种可能策略。我需要它来实现各种基于位的压缩算法。但是,我找不到太多关于该主题的文献,而且似乎也找不到很多好的例子。
这就是我要找的东西:
- 主要是基于宏的实现以避免函数调用
- 向/从 BitStream 读取/写入“n”个比特的函数。
- 读取/写入特定位数(如 5 位)的函数,在通用位数的基础上进行了优化。
我想知道以下几点:
- 应在 BitStream 中维护的变量。可以有一个 BYTE 指针、一个字节位置、当前字节中的位索引、当前字节中剩余的位数等。
- 如何减少要维护的变量数量。我们拥有的变量越多,我们需要更新的变量就越多。
- 如何在单个读/写操作的上下文中使用少量中间/临时变量。
- 是否应该在 BYTE 级别或 UINT16 级别或 UINT32 级别执行操作。也许将位累积到 UINT32 并在字节已满时写入字节(或在写入完成时,使用刷新操作)会比按字节执行所有操作要快得多。
- 我们怎样才能尽可能避免循环。理想情况下,我们应该不惜一切代价避免循环写入比特流的位数。
这可能看起来有点矫枉过正,但是当涉及到压缩的其余代码已经被极度优化时,看起来 BitStream 部分只是在破坏整个事情。例如,在图像压缩代码中使用 SIMD CPU 指令来优化部分编码过程的汇编程序并不罕见,但最后一步是写入 BitStream。
想法,参考,任何人?谢谢!
【问题讨论】:
-
查看 FFmpeg 项目 (ffmpeg.org) 以获取示例。高效的比特流解析和写入是其大部分工作负载的核心。
标签: c compression codec bitstream