JPEG Huffman" DECODE"程序

时间:2018-06-14 10:00:29

标签: jpeg huffman-code

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

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

    可能我没有正确阅读这个数字

  2. + NEXTBIT是什么意思?例如,如果CODE位为10101且NEXTBIT为00000001,则结果为101011(如字符串追加),是吗?

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

  4. 感谢您的澄清

    DECODE

    编辑:

    我的DECODE代码(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 个答案:

答案 0 :(得分:2)

  1. 不是MAXCODE,而是MAXCODE(I),每次I递增时都会有不同的值。

  2. +NEXTBIT表示从字面上添加输入的下一位,即0或1.(NEXTBIT不是00000001。它只有一位。)

  3. 找到当前代码的长度后,您会将Vi,j索引到HUFFVAL解码表中。