#ifndef _VIDEO_H_ #define _VIDEO_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "convert.h" #include "inmemoryfile.h" #include "miniwebcam.h" #include "videoframe.h" #define VDEV_INBUFFERS 3 enum { IOMODE_READ, IOMODE_MMAP }; // // jpeg error handling // struct jpg_error_mgr { struct jpeg_error_mgr pub; /* "public" fields */ jmp_buf setjmp_buffer; /* for return to caller */ }; typedef struct jpg_error_mgr *jpg_error_ptr; struct { unsigned int id; int min; int max; int value; std::string name; } typedef VideoDevCtrl; struct { unsigned int size; unsigned char* data; } typedef VideoInBuffer; #include "convert.h" class VideoDevice { private: protected: std::string conf_videodev; uint32_t conf_videofmt; int conf_width; int conf_height; int conf_iomode; ConvertData cdata; public: VideoDevice(); ~VideoDevice(); virtual int SetDevice(std::string newdevice, int nwidth, int nheight, uint32_t pixfmt) { return 0; }; virtual int SetIOMode(int newiomode) { return 0; }; virtual int Start() { return 0; }; virtual int Stop() { return 0; }; virtual int GetFrame (VideoFrame *destframe) { return 0; }; virtual int SetDevCtrl(unsigned int id, int value) { return 0; }; virtual int GetDevCtrl(unsigned int id, int *value) { return 0; }; }; class VideoDevice_V4L2 : public VideoDevice { private: std::list vidctrls; int inbuffer_idx; VideoInBuffer inbuffer[VDEV_INBUFFERS]; struct v4l2_cropcap cropcap; struct v4l2_crop crop; struct v4l2_format fmt; int fd; // filedescriptor to the video device file int Open(); int Close(); int UnInit(); int InitMMap(); int xioctl(int fd, int request, void *arg); protected: public: VideoDevice_V4L2(); ~VideoDevice_V4L2(); int SetDevice(std::string newdevice, int nwidth, int nheight, uint32_t pixfmt); int SetIOMode(int newiomode); int Start(); int Stop(); int GetFrame (VideoFrame *destframe); int SetDevCtrl(unsigned int id, int value); int GetDevCtrl(unsigned int id, int *value); void PrintCaps(uint32_t caps); void PrintFmt(struct v4l2_format *f); }; #endif