Odczyt wyjścia kamery internetowej USB w systemie Linux

Eksperymentowałem z odrobiną fread i fwrite w C. Więc napisałem ten mały program w C, aby pobrać dane z kamery internetowej i zrzucić ją do pliku. Oto źródło:

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

Program działa po skompilowaniu (gcc -o snap camera.c). Zaskoczyło mnie, że plik wyjściowy nie był zrzutem danych surowych, lecz plikiem JPEG. Wyjściefile polecenie na linuxie w pliku wyjściowym programów pokazało, że był to obraz JPEG: JFIF Standard 1.01. Plik był widoczny na przeglądarce obrazów, choć trochę nasycony.

Jak to się dzieje lub dlaczego? Nie użyłem żadnych bibliotek kodowania JPEG w źródle ani w programie. Czy aparat wyświetla obraz JPEG natywnie? Kamera internetowa to Sony Playstation 2 EyeToy, która została wyprodukowana przez Logitech. System to Linux Debian.

questionAnswers(1)

yourAnswerToTheQuestion