00001 #ifndef _WURDE_CAMERA_H
00002 #define _WURDE_CAMERA_H
00003
00004 #include <opencv/cv.h>
00005 #include <vector>
00006 #include <string>
00007 #include <list>
00008 #include <Time.H>
00009 #include <map>
00010 #include <Logger.H>
00011 #include <ImageSource.H>
00012
00013 namespace WURDEVision {
00014
00015 void convert_yuv411_to_yuv24(IplImage *img, unsigned char *src);
00016 void convert_yuv422_to_yuv24(IplImage *img, unsigned char *src);
00017 void convert_yuv411_to_gray(IplImage *img, unsigned char *src);
00018 void convert_yuv422_to_gray(IplImage *img, unsigned char *src);
00019
00020 struct Calibration {
00021 int centerX;
00022 int centerY;
00023 double focalLength;
00024 };
00025
00026 typedef enum {
00027 ERROR_NOERROR= 0,
00028 ERROR_UNSUPPORTED_IMAGE_TYPE,
00029 ERROR_IMAGE_NOT_AVAILABLE,
00030 ERROR_CAMERA_FAILURE
00031 } WURDECameraError;
00032
00033 extern WURDECameraError g_wurdeCamErrno;
00040
00041 typedef enum {
00042 ISO_SPEED_100= 0,
00043 ISO_SPEED_200,
00044 ISO_SPEED_400,
00045 ISO_SPEED_800,
00046 ISO_SPEED_1600,
00047 ISO_SPEED_3200
00048 } WURDEVisionSpeed;
00049
00050 typedef enum {
00051 FRAMERATE_1_875= 32,
00052 FRAMERATE_3_75,
00053 FRAMERATE_7_5,
00054 FRAMERATE_15,
00055 FRAMERATE_30,
00056 FRAMERATE_60,
00057 FRAMERATE_120,
00058 FRAMERATE_240
00059 } WURDEVisionFramerate;
00060
00067 typedef enum {
00068 VIDEO_MODE_160x120_YUV444= 64,
00069 VIDEO_MODE_320x240_YUV422,
00070 VIDEO_MODE_640x480_YUV411,
00071 VIDEO_MODE_640x480_YUV422,
00072 VIDEO_MODE_640x480_RGB8,
00073 VIDEO_MODE_640x480_MONO8,
00074 VIDEO_MODE_640x480_MONO16,
00075 VIDEO_MODE_800x600_YUV422,
00076 VIDEO_MODE_800x600_RGB8,
00077 VIDEO_MODE_800x600_MONO8,
00078 VIDEO_MODE_1024x768_YUV422,
00079 VIDEO_MODE_1024x768_RGB8,
00080 VIDEO_MODE_1024x768_MONO8,
00081 VIDEO_MODE_800x600_MONO16,
00082 VIDEO_MODE_1024x768_MONO16,
00083 VIDEO_MODE_1280x960_YUV422,
00084 VIDEO_MODE_1280x960_RGB8,
00085 VIDEO_MODE_1280x960_MONO8,
00086 VIDEO_MODE_1600x1200_YUV422,
00087 VIDEO_MODE_1600x1200_RGB8,
00088 VIDEO_MODE_1600x1200_MONO8,
00089 VIDEO_MODE_1280x960_MONO16,
00090 VIDEO_MODE_1600x1200_MONO16,
00091 VIDEO_MODE_EXIF,
00092 VIDEO_MODE_FORMAT7_0,
00093 VIDEO_MODE_FORMAT7_1,
00094 VIDEO_MODE_FORMAT7_2,
00095 VIDEO_MODE_FORMAT7_3,
00096 VIDEO_MODE_FORMAT7_4,
00097 VIDEO_MODE_FORMAT7_5,
00098 VIDEO_MODE_FORMAT7_6,
00099 VIDEO_MODE_FORMAT7_7
00100 } WURDEVisionMode;
00101
00102
00113 class WURDECamera {
00114 public:
00115 WURDECamera(std::string name, std::map<std::string,std::string> options){m_name=name; m_options=options;}
00116 virtual ~WURDECamera(){}
00117 virtual bool init()=0;
00118 virtual bool startCapture()=0;
00119 virtual void stopCapture()=0;
00120
00121 std::string getName(){return m_name;}
00122 void setName(std::string value){m_name=value;}
00123 bool haveCam(){ return m_haveCam;}
00127
00128
00129 virtual WURDE::WURDEImage captureYUV24(){WURDE::g_logerror << "Camera " << m_name << " does not support YUV24 capture." << std::endl; g_wurdeCamErrno=ERROR_UNSUPPORTED_IMAGE_TYPE;}
00130 virtual WURDE::WURDEImage captureYUV422(){WURDE::g_logerror << "Camera " << m_name << " does not support YUV422 capture." << std::endl; g_wurdeCamErrno=ERROR_UNSUPPORTED_IMAGE_TYPE;}
00131 virtual WURDE::WURDEImage captureGray(){WURDE::g_logerror << "Camera " << m_name << " does not support gray capture." << std::endl; g_wurdeCamErrno=ERROR_UNSUPPORTED_IMAGE_TYPE;}
00132 virtual WURDE::WURDEImage captureRGB(){WURDE::g_logerror << "Camera " << m_name << " does not support RGB capture." << std::endl; g_wurdeCamErrno=ERROR_UNSUPPORTED_IMAGE_TYPE;}
00133
00138 virtual void resetFrame()=0;
00139
00143 virtual void setFramerate(const WURDEVisionFramerate &value){m_framerate=value;}
00144
00148 virtual void setMode(const WURDEVisionMode &value){m_mode=value;}
00149
00154 virtual void setSpeed(WURDEVisionSpeed value){m_speed=value;}
00155
00156 virtual float getFramerate() const {return m_framerate;}
00157 virtual WURDEVisionMode getMode() const {return m_mode;}
00158
00159 virtual WURDEVisionSpeed getSpeed() const{return m_speed;}
00160
00161
00166 virtual unsigned int getBrightness()const{WURDE::g_logwarn << "getBrightness not supported." << std::endl; return 0;}
00167 virtual unsigned int getExposure()const{WURDE::g_logwarn << "getExposure not supported." << std::endl; return 0;}
00168 virtual unsigned int getSharpness()const{WURDE::g_logwarn << "getSharpness not supported." << std::endl; return 0;}
00169 virtual unsigned int getHue()const{WURDE::g_logwarn << "getHue not supported." << std::endl; return 0;}
00170 virtual unsigned int getSaturation()const{WURDE::g_logwarn << "getSaturation not supported." << std::endl; return 0;}
00171 virtual unsigned int getGamma()const{WURDE::g_logwarn << "getGamma not supported." << std::endl; return 0;}
00172 virtual unsigned int getShutter()const{WURDE::g_logwarn << "getShutter not supported." << std::endl; return 0;}
00173 virtual unsigned int getGain()const{WURDE::g_logwarn << "getGain not supported." << std::endl; return 0;}
00174 virtual unsigned int getIris()const{WURDE::g_logwarn << "getIris not supported." << std::endl; return 0;}
00175 virtual unsigned int getFocus()const{WURDE::g_logwarn << "getFocus not supported." << std::endl; return 0;}
00176 virtual unsigned int getZoom()const{WURDE::g_logwarn << "getZoom not supported." << std::endl; return 0;}
00177 virtual unsigned int getTriggerDelay()const{WURDE::g_logwarn << "getTriggerDelay not supported." << std::endl; return 0;}
00178 virtual unsigned int getPan()const{WURDE::g_logwarn << "getPan not supported." << std::endl; return 0;}
00179 virtual unsigned int getTilt()const{WURDE::g_logwarn << "getTilt not supported." << std::endl; return 0;}
00180 virtual unsigned int getOpticalFilter()const{WURDE::g_logwarn << "getOpicalFilter not supported." << std::endl; return 0;}
00181
00182 virtual bool setBrightness(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00183 virtual bool setExposure(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00184 virtual bool setSharpness(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00185 virtual bool setHue(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00186 virtual bool setSaturation(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00187 virtual bool setGamma(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00188 virtual bool setShutter(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00189 virtual bool setGain(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00190 virtual bool setIris(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00191 virtual bool setAutoIris(const bool &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00192 virtual bool setFocus(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00193 virtual bool setTriggerMode(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00194 virtual bool setZoom(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00195 virtual bool setTriggerDelay(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00196 virtual bool setPan(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00197 virtual bool setTilt(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00198 virtual bool setOpticalFilter(const unsigned int &value){WURDE::g_logwarn << "setBrightness not supported" << std::endl; return false;}
00199
00200 virtual void setCalibration(Calibration val){m_calib=val;}
00201 virtual Calibration getCalibration() const {return m_calib;}
00202
00203 protected:
00204 std::string m_name;
00205 std::map<std::string,std::string> m_options;
00206
00207 WURDEVisionFramerate m_framerate;
00208 WURDEVisionMode m_mode;
00209 WURDEVisionSpeed m_speed;
00210
00211 bool m_haveCam;
00212 bool m_haveFrame;
00213 bool m_init;
00214
00215 Calibration m_calib;
00216
00217 };
00218
00219 }
00220
00221 static std::list< WURDEVision::WURDECamera * > _robotVision_global_cameraList;
00222 void _robotVision_global_cleanUpCameraList();
00223
00224 #endif