Lectura de salida de una webcam USB en Linux

Estaba experimentando con un poco de hilo y escritura en C. Así que escribí este pequeño programa en C para obtener datos de una cámara web y volcarlo en un archivo. La siguiente es la fuente:

#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;
}

El programa funciona cuando se compila (gcc -o snap camera.c). Lo que me sorprendió fue que el archivo de salida no era un volcado de datos en bruto, sino un archivo JPEG. Salida de lafile El comando en Linux en el archivo de salida de programas mostró que se trataba de una imagen JPEG: JFIF Standard 1.01. El archivo se podía ver en un visor de imágenes, aunque un poco saturado.

¿Cómo o por qué sucede esto? No usé ninguna biblioteca de codificación JPEG en la fuente o el programa. ¿La cámara emite JPEG de forma nativa? La cámara web es una Sony Playstation 2 EyeToy fabricada por Logitech. El sistema es Debian Linux.

Respuestas a la pregunta(1)

Su respuesta a la pregunta