Exp-Golomb CodeWord构造和分析的方法

问题描述 投票:1回答:1

我正在使用OpenH264 Codec。 OpenH264使用Exp-Golomb编码来获取与头相关的信息。我研究了几个网站并收集了一些关于Exp-Golomb编码的信息。 OpenH264使用4种类型的Exp-Golomb编码方法。他们是:

  • Ue [当值仅为非负数量时]
  • Te [当值仅为1或0时]
  • Se [当值为负数和正数时]
  • 我[为值定义标准代码映射时]

我已经学会了如何通过方法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相关的理论。但是我无法为其他方法找到任何资源。请帮我。

encoding compression decoding lossless-compression openh264
1个回答
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使用完全不同的系统。

编辑:

映射的Exp-Golomb与Unsigned Exp-Golomb完全相同,加上表查找。

截断的Exp-Golomb与标准RICE aka一元编码相同,除了停止位为0。

如果您不想创建自己的解码器/编码器,请查看我的项目BitIO,因为我已经编写了它们,特别是ReadRICE / WriteRICE和ReadExpGolomb / WriteExpGolomb函数,BitIO on Github

© www.soinside.com 2019 - 2024. All rights reserved.