ts,ps,mpeg2 decoder and analysis

分析工具,免费下载.

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  54 随笔 :: 0 文章 :: 168 评论 :: 0 Trackbacks
golomb 变长编码算法

哥伦布编码的解析过程

golomb 编码主要是针对整数进行编码,减少整数使用的空间位数
golomb编码时,有一个可以变化的参数m

本人的算法如下,很简便的!
 

int My_get_se_golomb_31()

{

     int b = 0;

     int nValue = 0;

    

     b = My_get_ue_golomb_31();

     nValue = b / 2;

     if (b > 1 && b%2 ==0)

     {

         nValue = nValue * (-1);

     }

 

     return nValue;

}

 

int  My_get_ue_golomb_31()

{

     int b = 0;

     int i = 0;

 

     do

     {

         i ++;

         if (i <32)

              b = Bitstream_get(i,FALSE);

         else

         {

              outlog("SPS: nreserved should is zero.");

              break;

         }       

     } while(!b);

    

     Bitstream_get(i);

 

     b = (1 <<(i - 1)) -1 + Bitstream_get(i-1);    

     return b;

}





 

 

http://ludajun.blog.sohu.com/

 

 例如:取m = 1, 对整数x = 4进行编码, 算法如下
b = 2
的m次方
q = int((x-1)/ b)
r = x - qb - 1

由此计算出 q = 1, r = 1
二进制编码为q  1,  个0, 然后是r的二进制编码
所以编码为:101

解码思路:
先算出所给整数的位数n
然后从高位--〉低位找到第一个0所在的位置i,这样就能 q = n - i, r = x的第0位到第i-1位所表示的数字(由低位--〉高位)
最终解码结果为qb + 1 + r

python
实现的 算法:
from math import log

m = 1

def compress(x):
    q = (x - 1) >> m
    r = x - (q << m) - 1
    result = ((((1 << q) - 1) << 1) << m) | r
    return result

def uncompress(x):
    if x == 0:
        return 1
    #计算x的位数
    n = int(log(x, 2))
    if n == 0:
        return x + 1
    for i in range(n, -1, -1):
        if (x & (1 << i)) == 0:
            q = n - i
            r = x & (1 << i - 1)
            return r + 1 + (q << m)

posted on 2009-07-28 17:32 TS,MPEG2,dvbc专家 阅读(5899) 评论(2)  编辑 收藏 引用

评论

# re: 哥伦布编码的解析过程,golomb 编码,golomb 变长编码算法 2009-08-04 12:28 99读书人
是肯定看见发四大皆空福建扩大  回复  更多评论
  

# re: 哥伦布编码的解析过程,golomb 编码,golomb 变长编码算法 2009-08-05 09:14 TS,MPEG2,dvbc专家
是肯定看见发四大皆空福建扩大 -- 这个是否已经被加密了,能否请原来作者解密。 呵呵, 太深奥了。  回复  更多评论
  

只有注册用户登录后才能发表评论。