2010-03-18 11 views
6

Tengo dificultades para entender la especificación ITU-T T.81 para el formato de archivo JPEG. Esperemos que alguien más haya intentado analizar archivos JPEG y/o conozca los detalles de este formato de archivo.Analizando formato de archivo JPEG: ¿Formato de segmentos codificados por entropía (ECS)?

La especificación indica que el segmento ECS0 comienza después del segmento SOS pero no puedo encontrar en qué parte de la especificación realmente habla sobre el formato del segmento ECS0 o cómo detectar su inicio. Las implementaciones simples de JPEG en línea son de ayuda limitada porque suponen muchas cosas sobre los archivos JPEG que analizan.

¿Alguien puede indicarme la dirección correcta?

FYI: La especificación de formato de archivo JPEG es here.

Respuesta

4

Cuando la norma habla de ECS, no se refiere a ella como un tipo de segmento como SOS, con un encabezado y un componente de tamaño; es literalmente el flujo de bits comprimido de Huffman crudo que representa las MCU que componen los datos de imagen. Se rellena para llenar un número integral de bytes, y opcionalmente se puede intercalar con encabezados RST (formalmente, los encabezados RST son independientes del ECS).

Cuando el estándar dice ECS , significa la 0ª (primera) secuencia de ECS, en lugar de un tipo de ECS específico como SOF0/SOF1/SOF2/etc son tipos diferentes.

Ejemplo para la línea de base DCT:

FF DA // SOS header 
00 08 // 8 bytes 
01 // 1 channel 
01 00 // channel 1 QT 0 HT 0 
00 3F 00 // start/end spectral selector, successive approximation bit high/low 
12 34 56 78 ... // Huffman-compressed MCU raw data 
(sequence of Fuffman codes looked-up in AC/DC Huffman tables) 

FF D9 // EOI 

Un programa gratuito muy útil para ayudar a explicar la Estructura de la JFIF es JPEGsnoop (http://www.impulseadventure.com/photo/jpeg-snoop.html). Hay una opción de 'Decodificación completa' en el menú que muestra el flujo de bits original de Huffman, cómo se correlaciona con los símbolos de Huffman, se elimina la cuantización y luego se asigna a los componentes de DCT.

+0

¿Debo decodificar el flujo de Huffman completo para determinar el final del ECS? ¿O es viable para mí buscar FFxx para detectar el final de los datos de ECS? – me2

+0

Si se trata de una imagen formada correctamente, puede buscar FFxx donde xx! = 0 para buscar el siguiente segmento (FF00 debe interpretarse como FF dentro de ECS), que puede no ser necesariamente el final de la imagen (es decir, , un marcador RST). Para determinar si la transmisión es realmente válida, debería decodificarla por completo. – matja