JPEG标准定义了DECODE过程,如下所示。我对几个部分感到困惑。
代码> MAXCODE(I),如果这是真的,则它进入循环并将左移(<<)应用于代码。 AFAIK,如果我们对非零数字应用左移,则数字将比之前更大。在这个图中,它应用SLL(左移逻辑运算),CODE总是大于MAXCODE吗?
可能我没有正确阅读这个数字
+ NEXTBIT
是什么意思?例如,如果CODE位为10101且NEXTBIT为00000001,则结果为101011(如字符串追加),是吗?
HUFFVAL列表是否与DHT标记中定义的相同(Vi,j值)。我是否需要构建额外的查找表或其他内容?因为似乎直接使用该程序的程序
感谢您的澄清
编辑:
我的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];
}
答案 0 :(得分:2)
不是MAXCODE
,而是MAXCODE(I)
,每次I
递增时都会有不同的值。
+NEXTBIT
表示从字面上添加输入的下一位,即0或1.(NEXTBIT
不是00000001
。它只有一位。)
找到当前代码的长度后,您会将Vi,j
索引到HUFFVAL
解码表中。