Exp-Golomb指数哥伦布码
Exp-Golomb指数哥伦布码
指数哥伦布码(Exponential-Golomb)属于熵编码,属于无损编码
H.264中使用的是0阶指数哥伦布编码,编码方式如下:
以待编码码号code_num = 3为例:
第一步:将code_num +1, 即3+1 = 4
第二步:将4写为二进制的形式:100
第三步:计算100的比特个数为3,在100前面写(3-1)个0,得到编码码字:00100
0阶指数哥伦布码如下所示:
0 => 1 => 1
1 => 10 => 010
2 => 11 => 011
3 => 100 => 00100
4 => 101 => 00101
5 => 110 => 00110
6 => 111 => 00111
7 => 1000 => 0001000
8 => 1001 => 0001001
以上是unsinged int的算法,对于singed int,要进行一个映射
映射关系:
x >= 0
时,MappedCode(x) = 2x
x < 0
时,MappedCode(x) = -2x - 1
int BitstreamReader::ReadSignedExponentialGolomb() { uint32_t unsigned_val = ReadExponentialGolomb(); if ((unsigned_val & 1) == 0) { return -static_cast<int>(unsigned_val / 2); } else { return (unsigned_val + 1) / 2; } }