Leitura de saída de uma webcam USB no Linux

Eu estava experimentando um pouco com fread e fwrite em C. Então eu escrevi este pequeno programa em C para obter dados de uma webcam e despejá-lo em um arquivo. O seguinte é a fonte:

#include <stdio.h>
#include <stdlib.h>
#define SIZE 307200 // number of pixels (640x480 for my webcam)
int main() {
    FILE *camera, *grab;
    camera=fopen("/dev/video0", "rb");
    grab=fopen("grab.raw", "wb");
    float data[SIZE];
    fread(data, sizeof(data[0]), SIZE, camera);
    fwrite(data, sizeof(data[0]), SIZE, grab);
    fclose(camera);
    fclose(grab); 
    return 0;
}

O programa funciona quando compilado (gcc -o snap camera.c). O que me surpreendeu foi que o arquivo de saída não era um despejo de dados brutos, mas um arquivo JPEG. Saída dofile comando no linux no arquivo de saída de programas mostrou que era um dado de imagem JPEG: JFIF Standard 1.01. O arquivo era visível em um visualizador de imagens, embora um pouco saturado.

Como ou por que isso acontece? Eu não usei nenhuma biblioteca de codificação JPEG na origem ou no programa. A câmera imprime JPEG de forma nativa? A webcam é um Sony Playstation 2 EyeToy que foi fabricado pela Logitech. O sistema é o Debian Linux.

questionAnswers(1)

yourAnswerToTheQuestion