2015-01-14 5 views
0

Когда decoding entropy encoded DC values in JPEG (или entropy encoded prediction differences in lossless JPEG), как различить 1 бит, которые были набиты для заполнения байта перед маркером и закодированным значением Хаффмана?Работа с заполняющими/набивочными битами Энтропия закодирована JPEG

Например, если я вижу:

0xAF 0xFF 0xD9 

и я уже потребляли биты в [0xA], как я могу сказать, если следующий 0xF дополняется или должны быть расшифрованы?

Это из JPEG Spec:

F.1.2.3 Байт начинку

Для того, чтобы обеспечить пространство для кода маркера кодов , которые могут быть расположены в сжатых данных изображения, без декодирования, байт начинка используется.

Когда в ходе нормального кодирования в строке кода создается значение байта X'FF ' , байт X'00' равен , заполненному в строку кода. Если после байта X'FF 'детектируется байт X'00', декодер должен отбросить его. Если байт не равен нулю, обнаружен маркер и должен интерпретироваться в размере , необходимых для завершения декодирования сканирования.

Байтное выравнивание маркеров достигается путем заполнения неполных байтов с 1 битом. Если заполнение с помощью 1-бит создает значение X'FF ', нулевой байт заполняется перед добавлением маркера .

ответ

1

Есть только две возможности для значения FF в сжатом потоке данных.

  1. Restart Marker; или
  2. FF00, представляющий FF.

Если вы декодируете поток, вы будете знать из интервала перезапуска, когда ожидать маркер перезапуска. Когда вы попадаете в точку декодирования, где вы должны найти маркер перезапуска, вы отбрасываете оставшиеся биты в текущем байте.

+0

Что делать, если я ударил 'EOI (0xFF, 0xD9)' перед ударом маркера перезапуска? –

+0

Что-то не так с данными, если вы попали на рынок EOI без декодирования всех MCU. – user3344003

+0

[Это указывает] (https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure), что использование «DRI» является необязательным. –