JPG 霍夫曼解码器
JPG huffman DECODE stucks
我正在尝试解码 JPG 文件,整个 header 部分已正确读取。在读取照片 body 本身(SOS,0xFFDA)的过程中,在某个时刻,在霍夫曼 table 中寻找对应关系的函数进入无限循环。如果您在十六进制编辑器中查看该文件,您可以在错误位置找到以下字节序列:
7F FF 00 61
FF 00 => FF
7F FF 61
二进制代码
0111 1111 1111 1111 0110 0001
第一位已经被过去的MCU使用了,现在是连续15'ones'然后归零。在对应的霍夫曼table中,最大编码为8个1和1个0。我得出的结论是字节 7F 直到最后才被 1 填充。但这不是文件的结尾。我怎样才能知道什么时候需要跳过一个字节,什么时候不需要?
解码AC系数的算法不是很清楚。我将循环条件从 (index != 63)
更改为 (index <= 63)
因为 EOB 命中了 MCU 的第 64 个元素并且一切都开始工作了。
https://www.w3.org/Graphics/JPEG/itu-t81.pdf(第 106 页)
我正在尝试解码 JPG 文件,整个 header 部分已正确读取。在读取照片 body 本身(SOS,0xFFDA)的过程中,在某个时刻,在霍夫曼 table 中寻找对应关系的函数进入无限循环。如果您在十六进制编辑器中查看该文件,您可以在错误位置找到以下字节序列:
7F FF 00 61
FF 00 => FF
7F FF 61
二进制代码
0111 1111 1111 1111 0110 0001
第一位已经被过去的MCU使用了,现在是连续15'ones'然后归零。在对应的霍夫曼table中,最大编码为8个1和1个0。我得出的结论是字节 7F 直到最后才被 1 填充。但这不是文件的结尾。我怎样才能知道什么时候需要跳过一个字节,什么时候不需要?
解码AC系数的算法不是很清楚。我将循环条件从 (index != 63)
更改为 (index <= 63)
因为 EOB 命中了 MCU 的第 64 个元素并且一切都开始工作了。
https://www.w3.org/Graphics/JPEG/itu-t81.pdf(第 106 页)