我正在使用OpenH264 Codec。 OpenH264使用Exp-Golomb编码来获取与头相关的信息。我研究了几个网站并收集了一些关于Exp-Golomb编码的信息。 OpenH264使用4种类型的Exp-Golomb编码方法。他们是:
我已经学会了如何通过方法构建或解析 Ue 。
Exp-Golomb的语法格式(Ue)= [M-Zeros] [1] [INFO]。
构造:假设我们有Code_Num = 226
现在,
M = floor(log2(Code_Num))= floor(log2(226))= 7
INFO = Code_Num + 1 - 二进制中的pow(2,M)= 226 + 1 - 128 = 99 =(1100011)
所以,
CodeWord = 0000000 1 1100011 [M-0,1忽略位,INFO]
的解析:
假设我们有CodeWord = 000000011100011
Code_Num = pow(2,M)+ INFO - 1 = 128 + 99 - 1 = 226
现在我可以计算Exp-Golomb(Ue)。但我想学习所有与Se,Te和Me相关的理论。但是我无法为其他方法找到任何资源。请帮我。
答案 0 :(得分:1)
OpenH264是H.264 / AVC视频编解码器的实现。
AVC在其各种标题中使用Exp-Golomb编码,所有兼容的编码器也必须使用。
此外,te(v)代表Truncated Exponential-golomb编码。
无论如何,您可以在wiki page:上找到有关阅读已签名的指数哥伦布码的信息
但真正的快速tl; dr是0 = 1,1 = 010,-1 = 011等。
至于这个烂摊子:
M = floor(log2(Code_Num)) = floor(log2(226)) = 7
INFO = Code_Num + 1 - pow(2,M) = 226 + 1 - 128 = 99 = (1100011) in Binary
So,
CodeWord = 0000000 1 1100011 [M-zeros, 1 ignoring bit, INFO]
这根本不准确,您应该在编码期间添加1,并在解码期间减去1(仅对于无符号Exp-Golomb),Signed Exp-Golomb使用完全不同的系统。 / p>
编辑:
Mapped Exp-Golomb与Unsigned Exp-Golomb完全相同,加上表查找。
截断的Exp-Golomb与标准RICE又称一元编码相同,但停止位为0。
如果您不想创建自己的解码器/编码器,请查看我的项目BitIO,因为我已经编写了它们,特别是ReadRICE / WriteRICE和ReadExpGolomb / WriteExpGolomb函数,{{ 3}}