可变长度编码,读取多少位?

时间:2018-05-05 15:16:32

标签: bit-manipulation iso

以下是AAC ISO标准的快照: enter image description here

如何判断我应该为 hcod_sf 读取多少位? 1..19 代表什么?

1 个答案:

答案 0 :(得分:0)

VLC(可变长度编码)代表正在使用的可变比特量。因此,在您的示例中,当前值包含1到19位。

这一开始可能会让人感到困惑,但它遵循严格的逻辑。 附录中肯定会有一个表,用于定义哪个位组合代表什么值。

每个值由特定 - 唯一 - 位组合表示,该组合可由串行读取位确定。

例如此表:

0xxxxxxxxxxxxxxxxxx = value = 0  ( 1 bit length )
10xxxxxxxxxxxxxxxxx = value = 1  ( 2 bit length )
110xxxxxxxxxxxxxxxx = value = 2  ( 3 bit length )
1110xxxxxxxxxxxxxxx = value = 3  ( 4 bit length )
...
1111111111111111110 = value = 18 ( 19 bit length )

在此示例中,0表示值的结尾,它与1一起编码VLC值。如上所述,您必须按顺序读取比特流以获得值的长度,因此在此示例中,您必须检查尾随0

实际上,这些表通常由Huffman Coding构成,因此比本例中的更复杂。您一定会在上述规范的附录中找到您的翻译表。

  

如何判断我应该为hcod_sf读取多少位?

您只能通过读取它们来确定要读取的位数。实际上,您一次读取(至少19个)位,然后评估这些位中有多少属于该值(通常使用)。

  

1..19代表什么?

它代表此特定值中的最小(1)和最大(19)位数。

<强>最后:
实现这一点非常棘手,因此了解BMI instruction set extension对x86处理此方法非常有帮助。