Чтение вывода веб-камеры USB в Linux

Я немного поэкспериментировал с fread и fwrite на C. Поэтому я написал эту маленькую программу на C, чтобы получать данные с веб-камеры и выгружать их в файл. Ниже приводится источник:

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

Программа работает при компиляции(gcc -o snap camera.c). Что меня удивило, так это то, что выходной файл был не дампом необработанных данных, а файлом JPEG. Вывод команды fileв Linux в выходной файл программы показал, что это данные изображения JPEG :JFIF Standard 1.01. Файл был доступен для просмотра в программе просмотра изображений, хотя и немного насыщенным.

Как или почему это происходит? Я не использовал никаких библиотек кодирования JPEG ни в исходниках, ни в программе. Выводит ли камера JPEG изначально? Веб-камера представляет собой Sony Playstation 2 EyeToy производства Logitech. Система Debian Linux.

11
задан Ben T 20 December 2013 в 11:11
поделиться