Leseausgabe einer USB-Webcam unter Linux
Ich habe ein bisschen mit Fread und Fwrite in C experimentiert. Also habe ich dieses kleine Programm in C geschrieben, um Daten von einer Webcam zu erhalten und in eine Datei zu kopieren. Folgendes ist die Quelle:
#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;
}
Das Programm funktioniert beim Kompilieren (gcc -o snap camera.c
). Was mich überrascht hat, war, dass es sich bei der Ausgabedatei nicht um einen Rohdatenspeicherauszug, sondern um eine JPEG-Datei handelte. Ausgabe derfile
Befehl unter Linux in der Programmausgabedatei zeigte, dass es sich um JPEG-Bilddaten handelte: JFIF Standard 1.01. Die Datei konnte auf einem Bildbetrachter angezeigt werden, obwohl sie ein wenig gesättigt war.
Wie oder warum passiert das? Ich habe keine JPEG-Codierungsbibliotheken in der Quelle oder im Programm verwendet. Gibt die Kamera JPEG nativ aus? Die Webcam ist eine Sony Playstation 2 EyeToy, die von Logitech hergestellt wurde. Das System ist Debian Linux.