JPEG 霍夫曼 "DECODE" 程序

JPEG Huffman "DECODE" Procedure

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

  1. CODE > MAXCODE(I),如果为真,则它进入循环并将左移 (<<) 应用于代码。 AFAIK,如果我们对非零数字应用左移,数字将比之前的数字大。这个图中是用了SLL(左移逻辑运算),难道CODE总是大于MAXCODE吗?

    可能是我没看对图

  2. + NEXTBIT是什么意思?例如,如果 CODE 位是 10101 并且 NEXTBIT 是 00000001 那么结果将是 101011(就像字符串追加),对吗?

  3. HUFFVAL 列表是否与 DHT 标记中定义的相同(Vi,j 值)。我是否需要构建额外的查找 table 或其他东西?因为程序似乎直接使用了那个列表

感谢您的澄清

编辑:

我的解码码(C):

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];
}
  1. 不是MAXCODE,是MAXCODE(I)I每次递增的值都不一样。

  2. +NEXTBIT 字面意思是从输入中添加下一位,即 0 或 1。(NEXTBIT 不是 00000001。它只是一位。)

  3. 一旦找到当前代码的长度,就可以将 Vi,j 索引到 HUFFVAL 解码 table.