Порядок значений в JPG DHT - PullRequest
       9

Порядок значений в JPG DHT

0 голосов
/ 02 сентября 2018

Я пишу парсер / модификатор / разборщик JPEG. Во-первых, чтобы убедиться, что мы используем ту же терминологию, я включаю
определение, взятое из очень полезного источника

DHT( Define Huffman Table) marker:



       Field             Size                              Description

  Marker Identifier    2 bytes   0xff, 0xc4 to identify DHT marker
  Length               2 bytes   This specify length of Huffman table
  HT information       1 byte    bit 0..3 : number of HT (0..3, otherwise error) 
                                 bit 4     : type of HT, 0 = DC table, 1 = AC table
                                 bit 5..7 : not used, must be 0
  Number of Symbols    16 bytes  Number of symbols with codes of length 1..16,
                                 the sum(n) of these bytes is the total number of 
                                 codes, which must be <= 256

  Symbols              n bytes   Table containing the symbols in order of 
                                 increasing code length ( n = total number of 
                                 codes ).     

Мой вопрос: Символы должны быть упорядочены путем увеличения длины кода. Но в пределах каждой длины кода они должны быть упорядочены (например, по возрастанию значения).

Причина, по которой я спрашиваю, состоит в том, что моя таблица, сгенерированная из частот, собранных из данных сканирования AC, дает правильные битовые длины, но они не в порядке возрастания значений в дереве (при чтении в порядке обхода в глубину). Мне нужно упорядочить их и восстановить дерево, чтобы получить тот же битовый шаблон, что и при написании и чтении таблицы.

Я подозреваю, что это потому, что в моей процедуре записи я специально упорядочиваю символы по битам, а затем по значению. Если упорядочение по значению не требуется, я могу снять накладные расходы (в коде и во время выполнения).

1 Ответ

0 голосов
/ 22 сентября 2018

Коды неявно упорядочены по возрастанию значения. Маркер DHT указывает только количество кодов каждой длины. Процедура в стандарте JPEG описывает, как генерировать фактический код Хаффмана для каждого значения.

...