Analizando el marcador JPEG SOS

Hay unpregunta con el mismo título pero desafortunadamente no me ayuda.

Estoy tratando de analizar los datos de un marcador SOS. Todas las documentaciones que puedo encontrar dicen que después del marcador (0xFFDA) sigue un número de dos bytes que define cuánto dura este segmento -por ejemplo aquí - como con la mayoría de los marcadores de tamaño variable. Pero parece que no lo entiendo correctamente en este caso. Funciona para cualquier otro tipo de marcador.

Verifiqué varios archivos pero simplemente no puedo hacerlo bien. ¿Este número no define qué tan largo es el campo SOS completo? Entonces, para un JPEG de línea de base, debe haber exactamente un segmento SOS y después de esto debe seguir el marcador de Fin de imagen. Si es progresivo, puede haber múltiples segmentos SOS pero todos deberían tener un campo de longitud.

Tengo una foto con unSOF0 Marcador, por lo que debe ser de referencia. Creo que este es el correctoSOFn marcador porque la resolución de la imagen se puede encontrar después de ese marcador. Con un editor hexadecimal he encontrado 30xFFDA marcador y todos ellos tienen0x000C en los siguientes 2 bytes. Por lo tanto, ese segmento, según tengo entendido, siempre debe tener 12 bytes de longitud. Pero en los 3 casos no hay ningún marcador nuevo después de 12 bytes de datos. Supongo que el último es el escaneo que estoy buscando porque si el valor0xFF aparece es seguido por0x00 - excepto los marcadores de reinicio.

¿Esos dos bytes siguen?0xFFDA no los campos de longitud?

EDITAR: Entonces, gracias a los comentarios y la respuesta, parece que no hay un campo de longitud para los datos comprimidos reales y la única forma de saber dónde termina parece estar decodificándolos.

¿Por qué una imagen DCT de línea base tiene múltiples escaneos? Entendería por qué tiene dos; la imagen principal y una miniatura, pero ¿cuál es el tercer escaneo?

Pero hay una cosa más. Según el marcador DRI (Definir intervalo de reinicio), contiene el valor después del cual un escaneo debe tener un marcador de reinicio0xFFD0 - 0xFFD7. Pero parece que no entiendo eso o no lo hago bien. Por ejemplo, un marcador contenía el valor0x0140 como intervalo de reinicio. En el siguiente escaneo comencé desde el principio y busqué el primero0xFFD0 pero vino después de 862 bytes en lugar de 320.

Respuestas a la pregunta(2)

Su respuesta a la pregunta