首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPEG Huffman“解码”程序

JPEG Huffman“解码”程序
EN

Stack Overflow用户
提问于 2018-06-14 10:00:28
回答 1查看 335关注 0票数 0

JPEG标准定义了如下所示的解码过程。我对几个部分感到困惑。

  1. 代码> MAXCODE(I),如果这是正确的,那么它进入一个循环并将左移位(<<)应用于代码。AFAIK,如果我们在非零数上应用左移,这个数字就会比以前的要大。在这个图中,它应用了SLL (移位左逻辑操作),代码不是总是大于MAXCODE吗? 也许我看不出这个数字
  2. + NEXTBIT是什么意思?例如,如果代码位为10101,而NEXTBIT为00000001,那么结果将是101011 (类似于字符串附加),对吗?
  3. HUFFVAL列表是否与DHT标记(Vi,j值)中定义的相同。我需要建立额外的查找表吗?因为程序似乎直接使用了这个列表

谢谢你的澄清

编辑:

我的解码代码(C):

代码语言:javascript
复制
uint8_t
jpg_decode(ImScan    * __restrict scan,
           ImHuffTbl * __restrict huff) {
  int32_t i, j, code;

  i    = 1;
  code = jpg_nextbit(scan);

  /* TODO: infinite loop ? */
  while (code > huff->maxcode[i]) {
    i++;
    code = (code << 1) | jpg_nextbit(scan);
  }

  j = huff->valptr[i];
  j = code + huff->delta[i]; /* delta = j - mincode[i] */

  return huff->huffval[j];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-14 17:01:59

  1. 这不是MAXCODE,而是MAXCODE(I),它是每次I递增时不同的值。
  2. +NEXTBIT实际上意味着从输入中添加下一个位,即0或1 (NEXTBIT不是00000001 )。只有一点。)
  3. 一旦找到当前代码的长度,就可以将Vi,j索引到HUFFVAL解码表中。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50854758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档