IM: im_capture.h Source File
From IM - Imaging Libray
im_capture.h
Go to the documentation of this file.00001 /** \file 00002 * \brief Video Capture 00003 * 00004 * See Copyright Notice in im.h 00005 * $Id: Exp $ 00006 */ 00007 00008 #ifndef __IM_CAPTURE_H 00009 #define __IM_CAPTURE_H 00010 00011 #if defined(__cplusplus) 00012 extern "C" { 00013 #endif 00014 00015 /** \defgroup capture Image Capture 00016 * \par 00017 * Captures images from video devices. 00018 * \par 00019 * You must link the application with "im_capture.lib/.a/.so". \n 00020 * Depends also on the Direct Show 9 SDK, you must link with "strmiids.lib". 00021 * When using the "im_capture.dll" this extra library is not necessary. 00022 * Since DX uses COM, CoInitialize(NULL) is called when the devices are enumerated. 00023 * \par 00024 * For more information: \n 00025 * http://msdn.microsoft.com/library/en-us/directx9_c/directX/htm/directshow.asp 00026 * \par 00027 * See \ref im_capture.h 00028 */ 00029 00030 typedef struct _imVideoCapture imVideoCapture; 00031 00032 /** Returns the number of available devices. 00033 * \ingroup capture */ 00034 int imVideoCaptureDeviceCount(void); 00035 00036 /** Returns the device description. Returns NULL in the last device. 00037 * \ingroup capture */ 00038 const char* imVideoCaptureDeviceDesc(int device); 00039 00040 /** Reload the device list. The devices can be dynamically removed or added to the system. 00041 * \ingroup capture */ 00042 int imVideoCaptureReloadDevices(void); 00043 00044 /** Creates a new imVideoCapture object. \n 00045 * Returns NULL if there is no capture device available. \n 00046 * In Windows returns NULL if DirectX version is older than 8. 00047 * \ingroup capture */ 00048 imVideoCapture* imVideoCaptureCreate(void); 00049 00050 /** Destroys a imVideoCapture object. 00051 * \ingroup capture */ 00052 void imVideoCaptureDestroy(imVideoCapture* vc); 00053 00054 /** Connects to a capture device. 00055 * More than one imVideoCapture object can be created 00056 * but they must be connected to different devices. \n 00057 * If the object is conected it will disconnect first. \n 00058 * Use -1 to return the current connected device, 00059 * in this case returns -1 if not connected. \n 00060 * Returns zero if failed. 00061 * \ingroup capture */ 00062 int imVideoCaptureConnect(imVideoCapture* vc, int device); 00063 00064 /** Disconnect from a capture device. 00065 * \ingroup capture */ 00066 void imVideoCaptureDisconnect(imVideoCapture* vc); 00067 00068 /** Displays a configuration modal dialog of the connected device. \n 00069 * In Windows, the capturing will be stopped in some cases. \n 00070 * In Windows parent is a HWND of a parent window, it can be NULL. \n 00071 * Returns zero if failed. 00072 * \ingroup capture */ 00073 int imVideoCaptureShowDialog(imVideoCapture* vc, int dialog, void* parent); 00074 00075 /** Returns the number of available configuration dialogs. 00076 * \ingroup capture */ 00077 int imVideoCaptureDialogCount(imVideoCapture* vc); 00078 00079 /** Returns the description of a configuration dialog. 00080 * \ingroup capture */ 00081 const char* imVideoCaptureDialogDesc(imVideoCapture* vc, int dialog); 00082 00083 /** Returns the current image size of the connected device. \n 00084 * width and height returns 0 if not connected. 00085 * \ingroup capture */ 00086 void imVideoCaptureGetImageSize(imVideoCapture* vc, int *width, int *height); 00087 00088 /** Changes the image size of the connected device. \n 00089 * Returns zero if failed. 00090 * \ingroup capture */ 00091 int imVideoCaptureSetImageSize(imVideoCapture* vc, int width, int height); 00092 00093 /** Returns a new captured frame. Use -1 for infinite timeout. \n 00094 * Color space can be IM_RGB or IM_GRAY, and mode can be packed (IM_PACKED) or not. \n 00095 * It can not have an alpha channel and orientation is always bottom up. \n 00096 * Returns zero if failed or timeout expired, the buffer is not changed. 00097 * \ingroup capture */ 00098 int imVideoCaptureFrame(imVideoCapture* vc, unsigned char* data, int color_mode, int timeout); 00099 00100 /** Start capturing, returns the new captured frame and stop capturing. \n 00101 * This is more usefull if you are switching between devices. \n 00102 * Data format is the same as imVideoCaptureFrame. \n 00103 * Returns zero if failed. 00104 * \ingroup capture */ 00105 int imVideoCaptureOneFrame(imVideoCapture* vc, unsigned char* data, int color_mode); 00106 00107 /** Start capturing. \n 00108 * Use -1 to return the current state. \n 00109 * Returns zero if failed. 00110 * \ingroup capture */ 00111 int imVideoCaptureLive(imVideoCapture* vc, int live); 00112 00113 /** Resets a camera or video attribute to the default value or 00114 * to the automatic setting. \n 00115 * Not all attributes support automatic modes. \n 00116 * Returns zero if failed. 00117 * \ingroup capture */ 00118 int imVideoCaptureResetAttribute(imVideoCapture* vc, const char* attrib, int fauto); 00119 00120 /** Returns a camera or video attribute in percentage of the valid range value. \n 00121 * Returns zero if failed. 00122 * \ingroup capture */ 00123 int imVideoCaptureGetAttribute(imVideoCapture* vc, const char* attrib, float *percent); 00124 00125 /** Changes a camera or video attribute in percentage of the valid range value. \n 00126 * Returns zero if failed. 00127 * \ingroup capture */ 00128 int imVideoCaptureSetAttribute(imVideoCapture* vc, const char* attrib, float percent); 00129 00130 /** Returns a list of the description of the valid attributes. 00131 * \ingroup capture */ 00132 const char** imVideoCaptureGetAttributeList(imVideoCapture* vc, int *num_attrib); 00133 00134 00135 /** \defgroup winattrib Windows Attributes 00136 \verbatim 00137 VideoBrightness - Specifies the brightness, also called the black level. 00138 VideoContrast - Specifies the contrast, expressed as gain factor. 00139 VideoHue - Specifies the hue angle. 00140 VideoSaturation - Specifies the saturation. 00141 VideoSharpness - Specifies the sharpness. 00142 VideoGamma - Specifies the gamma. 00143 VideoColorEnable - Specifies the color enable setting. (0/100) 00144 VideoWhiteBalance - Specifies the white balance, as a color temperature in degrees Kelvin. 00145 VideoBacklightCompensation - Specifies the backlight compensation setting. (0/100) 00146 VideoGain - Specifies the gain adjustment. 00147 CameraPanAngle - Specifies the camera's pan angle. To 100 rotate right, To 0 rotate left (view from above). 00148 CameraTiltAngle - Specifies the camera's tilt angle. To 100 rotate up, To 0 rotate down. 00149 CameraRollAngle - Specifies the camera's roll angle. To 100 rotate right, To 0 rotate left. 00150 CameraLensZoom - Specifies the camera's zoom setting. 00151 CameraExposure - Specifies the exposure setting. 00152 CameraIris - Specifies the camera's iris setting. 00153 CameraFocus - Specifies the camera's focus setting, as the distance to the optimally focused target. 00154 FlipHorizontal - Specifies the video will be flipped in the horizontal direction. 00155 FlipVertical - Specifies the video will be flipped in the vertical direction. 00156 AnalogFormat - Specifies the video format standard NTSC, PAL, etc 00157 NTSC_M = 0 00158 NTSC_M_J = 1 00159 NTSC_433 = 2 00160 PAL_B = 3 00161 PAL_D = 4 00162 PAL_H = 5 00163 PAL_I = 6 00164 PAL_M = 7 00165 PAL_N = 8 00166 PAL_60 = 9 00167 SECAM_B = 10 00168 SECAM_D = 11 00169 SECAM_G = 12 00170 SECAM_H = 13 00171 SECAM_K = 14 00172 SECAM_K1 = 15 00173 SECAM_L = 16 00174 SECAM_L1 = 17 00175 PAL_N_COMBO = 18 00176 \endverbatim 00177 * \ingroup capture */ 00178 00179 00180 #if defined(__cplusplus) 00181 } 00182 00183 /** A C++ Wrapper for the imVideoCapture structure functions. 00184 * \ingroup capture */ 00185 class imCapture 00186 { 00187 public: 00188 imCapture() 00189 { vc = imVideoCaptureCreate(); } 00190 00191 ~imCapture() 00192 { if (vc) imVideoCaptureDestroy(vc); } 00193 00194 int Failed() 00195 { if (!vc) return 0; else return 1; } 00196 00197 int Connect(int device) 00198 { return imVideoCaptureConnect(vc, device); } 00199 00200 void Disconnect() 00201 { imVideoCaptureDisconnect(vc); } 00202 00203 int ShowDialog(int dialog, void* parent) 00204 { return imVideoCaptureShowDialog(vc, dialog, parent); } 00205 00206 int DialogCount() 00207 { return imVideoCaptureDialogCount(vc); } 00208 00209 const char* DialogDescription(int dialog) 00210 { return imVideoCaptureDialogDesc(vc, dialog); } 00211 00212 void GetImageSize(int *width, int *height) 00213 { imVideoCaptureGetImageSize(vc, width, height); } 00214 00215 int SetImageSize(int width, int height) 00216 { return imVideoCaptureSetImageSize(vc, width, height); } 00217 00218 int GetFrame(unsigned char* data, int color_mode, int timeout) 00219 { return imVideoCaptureFrame(vc, data, color_mode, timeout); } 00220 00221 int GetOneFrame(unsigned char* data, int color_mode) 00222 { return imVideoCaptureOneFrame(vc, data, color_mode); } 00223 00224 int Live(int live) 00225 { return imVideoCaptureLive(vc, live); } 00226 00227 int ResetAttribute(const char* attrib, int fauto) 00228 { return imVideoCaptureResetAttribute(vc, attrib, fauto); } 00229 00230 int GetAttribute(const char* attrib, float *percent) 00231 { return imVideoCaptureGetAttribute(vc, attrib, percent); } 00232 00233 int SetAttribute(const char* attrib, float percent) 00234 { return imVideoCaptureSetAttribute(vc, attrib, percent); } 00235 00236 const char** GetAttributeList(int *num_attrib) 00237 { return imVideoCaptureGetAttributeList(vc, num_attrib); } 00238 00239 protected: 00240 imVideoCapture* vc; 00241 }; 00242 00243 #endif 00244 00245 #endif