Я пытаюсь сделать JPEG-декодер с нуля, сосредоточившись в первую очередь на последовательном DCT-декодировании Хаффмана (надеюсь, это правильная терминология). Файл JPEG представляет собой 8-битный файл серой шкалы. Коэффициенты постоянного тока такие же, как указанные в стандарте в таблице K.3, а коэффициенты переменного тока такие же, как указанные в таблице K.5. Я сталкиваюсь с проблемой декодирования значений переменного тока во время декодирования переменной длины. Поток битов (начиная с начала сканирования) выглядит следующим образом:
1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0
Я могу декодировать данные, пока не достигну двух битов, выделенных жирным шрифтом в процедуре DECODE. Во время этой процедуры (используя термины из стандарта, рисунок F.16) я получаю Code = 0, VALPTR[2] = 0, MINCODE[2] = 0
, в результате чего предпринимаются следующие попытки: VALUE = HUFFVAL[0]
, что выходит за пределы HUFFVAL. Для справки, мой расчетный VALPTR составляет
[- 1, 0, 2, 3, 6, 9, 11, 15, 18, 23, 28, 32, -1, -1, 36, 37]
и мой рассчитанный МИНКОД
[- 1, 0, 4, 10, 26, 58, 120, 248, 502, 1014, 2038, 4084, -1, -1, 8176, 16354].
Мои значения декодирования до тех пор, пока полужирные биты не будут следующими:
-64, 0, -1, -1, -2, -1
Кто-нибудь знает, где я иду не так?