00001 #ifndef VIDEO_DEVICE_HPP 00002 #define VIDEO_DEVICE_HPP 00003 00004 #include <sys/ioctl.h> 00005 #include <sys/types.h> 00006 #include <linux/videodev.h> 00007 00008 #include <qimage.h> 00009 #include <qobject.h> 00010 #include <qsocketnotifier.h> 00011 #include <qtimer.h> 00012 #include <qvector.h> 00013 00014 #include "VideoDeviceInput.h" 00015 00016 class CVideoDevice: public QObject 00017 { 00018 friend class CVideoDeviceInput; 00019 friend class CVideoDeviceTuner; 00020 Q_OBJECT 00021 private: 00022 bool validated; 00023 QString NodeName, IntfName; 00024 int CamFD, Opened; 00025 bool UseSelect, HasFramerate; 00026 int Palette, FrameRate; 00027 int PalRGB, PalYUV; 00028 struct video_picture VPic; 00029 struct video_mbuf VMBuf; 00030 int Buffers, CurBuffer; 00031 00032 QVector <CVideoDeviceInput>Inputs; 00033 int CurrentInput; 00034 00035 QImage *RGB, *Y, *U, *V; 00036 int image_w, image_h; 00037 int max_w, max_h; 00038 int min_w, min_h; 00039 uchar *vid_buffer; 00040 int vid_buffer_size, image_buffer_size; 00041 00042 QSocketNotifier *pImageSocket; 00043 QTimer *pImageTimer; 00044 00045 void Init(bool First = FALSE); 00046 void CleanUp(); 00047 bool TryPalette(int pal, int depth); 00048 void SetPalette(); 00049 00050 int MCapture(int buf); 00051 int MSync(); 00052 00053 void CreateImagesRGB(); 00054 void ResetImagesRGB(); 00055 void CreateImagesYUV(); 00056 void ResetImagesYUV(); 00057 00058 private slots: 00059 void LoadImage(); 00060 00061 public: 00062 CVideoDevice(const QString &node_name); 00063 ~CVideoDevice(); 00064 00065 bool IsValid(); 00066 00067 int Open(int buffers = 1); 00068 void Close(); 00069 int GetDescriptor() const; 00070 00071 void EnableRGB(bool isOn); 00072 void EnableYUV(bool isOn); 00073 00074 QString GetNodeName() const; 00075 QString GetIntfName() const; 00076 00077 QSize GetMinSize() const; 00078 QSize GetSize(); 00079 QSize GetMaxSize() const; 00080 bool SetSize(int width, int height); 00081 bool SetSize(const QSize &new_size); 00082 int GetFramerate() const; 00083 bool SetFramerate(int fps, bool snap = FALSE); 00084 int GetMBuffers() const; 00085 00086 int GetInputs() const; 00087 int GetCurrentInput() const; 00088 CVideoDeviceInput *GetInput(int number) const; 00089 bool SelectInput(int number); 00090 00091 int GetBrightness() const; 00092 bool SetBrightness(int val); 00093 int GetContrast() const; 00094 bool SetContrast(int val); 00095 int GetHue() const; 00096 bool SetHue(int val); 00097 int GetColour() const; 00098 bool SetColour(int val); 00099 int GetWhiteness() const; 00100 bool SetWhiteness(int val); 00101 00102 int ReadImage(); 00103 00104 QImage *GetRGB(int offset = 0) const; 00105 QImage *GetY(int offset = 0) const; 00106 QImage *GetU(int offset = 0) const; 00107 QImage *GetV(int offset = 0) const; 00108 00109 signals: 00111 void Notify(); 00113 void Resized(const QSize &new_size); 00115 void ChangedInput(int input); 00117 void ChangedTunerNorm(int tuner, int norm); 00119 void Error(int err_num); 00120 }; 00121 00122 #endif