Analisando o marcador JPEG SOS

Existe umpergunta com o mesmo título mas infelizmente isso não me ajuda.

Estou tentando analisar os dados de um marcador SOS. Todas as documentações que encontro dizem que após o marcador (0xFFDA), segue um número de dois bytes que define quanto tempo esse segmento é -por exemplo aqui - como na maioria dos marcadores de tamanho variável. Mas parece que não entendi corretamente neste caso. Funciona para qualquer outro tipo de marcador.

Eu verifiquei vários arquivos, mas simplesmente não consigo fazer isso direito. Esse número não está definindo quanto tempo dura o campo SOS completo? Portanto, para um JPEG de linha de base, deve haver exatamente um segmento SOS e depois disso deve seguir o marcador Fim da imagem. Se for progressivo, pode haver vários segmentos SOS, mas todos ainda devem ter um campo de comprimento.

Eu tenho uma foto com umaSOF0 Marcador para que seja a linha de base. Eu acredito que este é o corretoSOFn marcador porque a resolução da imagem pode ser encontrada depois desse marcador. Com um editor hexadecimal eu encontrei 30xFFDA marcador e todos eles têm0x000C nos 2 bytes a seguir. Portanto, esse segmento, como eu o entendo, deve sempre ter 12 bytes de comprimento. Mas nos três casos, nenhum marcador novo segue após 12 bytes de dados. Eu acho que o último é a varredura que estou procurando, porque se o valor0xFF aparece, é seguido por0x00 - exceto os marcadores de redefinição.

Esses dois bytes estão seguindo0xFFDA não os campos de comprimento?

EDITAR: Portanto, graças aos comentários e às respostas, parece não haver um campo de comprimento para os dados compactados reais e a única maneira de saber onde eles terminam parece estar decodificando.

Por que uma imagem DCT da linha de base tem várias digitalizações? Eu entenderia por que tem dois; a imagem principal e uma miniatura, mas qual é a terceira digitalização?

Mas há mais uma coisa. De acordo com o marcador DRI (Definir intervalo de reinicialização), ele contém o valor após o qual uma verificação deve ter um marcador de reinicialização0xFFD0 - 0xFFD7. Mas pareço entender isso errado ou não faço direito. Por exemplo, um marcador continha o valor0x0140 como intervalo de reinicialização. Na varredura a seguir, comecei do começo e procurei o primeiro0xFFD0 mas veio depois de 862 bytes em vez de 320.

questionAnswers(2)

yourAnswerToTheQuestion