00001 /** \file
00002 * \brief Video Capture
00003 *
00004 * See Copyright Notice in im.h
00005 * $Id: im_capture.h,v 1.8 2006/11/20 13:18:51 scuri 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 /* declarations to create an export library for Watcom. */
00016 #if ! defined (IM_DECL)
00017 #if defined (__WATCOMC__)
00018 #define IM_DECL __cdecl
00019 #elif defined(__WATCOM_CPLUSPLUS__)
00020 #define IM_DECL __cdecl
00021 #else
00022 #define IM_DECL
00023 #endif
00024 #endif
00025
00026 /** \defgroup capture Image Capture
00027 * \par
00028 * Functions to capture images from live video devices.
00029 * \par
00030 * See \ref im_capture.h
00031 */
00032
00033 typedef struct _imVideoCapture imVideoCapture;
00034
00035 /** Returns the number of available devices.
00036 *
00037 * \verbatim im.VideoCaptureDeviceCount() -> count: number [in Lua 5] \endverbatim
00038 * \ingroup capture */
00039 int IM_DECL imVideoCaptureDeviceCount(void);
00040
00041 /** Returns the device description. Returns NULL only if it is an invalid device.
00042 *
00043 * \verbatim im.VideoCaptureDeviceDesc(device: number) -> desc: string [in Lua 5] \endverbatim
00044 * \ingroup capture */
00045 const char* IM_DECL imVideoCaptureDeviceDesc(int device);
00046
00047 /** Returns the extendend device description. May return NULL.
00048 *
00049 * \verbatim im.VideoCaptureDeviceExDesc(device: number) -> desc: string [in Lua 5] \endverbatim
00050 * \ingroup capture */
00051 const char* imVideoCaptureDeviceExDesc(int device);
00052
00053 /** Returns the device path configuration. This is a unique string.
00054 *
00055 * \verbatim im.VideoCaptureDevicePath(device: number) -> desc: string [in Lua 5] \endverbatim
00056 * \ingroup capture */
00057 const char* imVideoCaptureDevicePath(int device);
00058
00059 /** Returns the vendor information. May return NULL.
00060 *
00061 * \verbatim im.VideoCaptureDeviceVendorInfo(device: number) -> desc: string [in Lua 5] \endverbatim
00062 * \ingroup capture */
00063 const char* imVideoCaptureDeviceVendorInfo(int device);
00064
00065 /** Reload the device list. The devices can be dynamically removed or added to the system.
00066 * Returns the number of available devices.
00067 *
00068 * \verbatim im.imVideoCaptureReloadDevices() -> count: number [in Lua 5] \endverbatim
00069 * \ingroup capture */
00070 int IM_DECL imVideoCaptureReloadDevices(void);
00071
00072 /** Creates a new imVideoCapture object. \n
00073 * Returns NULL if there is no capture device available. \n
00074 * In Windows returns NULL if DirectX version is older than 8.
00075 *
00076 * \verbatim im.VideoCaptureCreate() -> vc: imVideoCapture [in Lua 5] \endverbatim
00077 * \ingroup capture */
00078 imVideoCapture* IM_DECL imVideoCaptureCreate(void);
00079
00080 /** Destroys a imVideoCapture object.
00081 *
00082 * \verbatim im.VideoCaptureDestroy(vc: imVideoCapture) [in Lua 5] \endverbatim
00083 * \verbatim vc:Destroy() [in Lua 5] \endverbatim
00084 * \ingroup capture */
00085 void IM_DECL imVideoCaptureDestroy(imVideoCapture* vc);
00086
00087 /** Connects to a capture device.
00088 * More than one imVideoCapture object can be created
00089 * but they must be connected to different devices. \n
00090 * If the object is conected it will disconnect first. \n
00091 * Use -1 to return the current connected device,
00092 * in this case returns -1 if not connected. \n
00093 * Returns zero if failed.
00094 *
00095 * \verbatim vc:Connect([device: number]) -> ret: number [in Lua 5] \endverbatim
00096 * \ingroup capture */
00097 int IM_DECL imVideoCaptureConnect(imVideoCapture* vc, int device);
00098
00099 /** Disconnect from a capture device.
00100 *
00101 * \verbatim vc:Disconnect() [in Lua 5] \endverbatim
00102 * \ingroup capture */
00103 void IM_DECL imVideoCaptureDisconnect(imVideoCapture* vc);
00104
00105 /** Returns the number of available configuration dialogs.
00106 *
00107 * \verbatim vc:DialogCount() -> count: number [in Lua 5] \endverbatim
00108 * \ingroup capture */
00109 int IM_DECL imVideoCaptureDialogCount(imVideoCapture* vc);
00110
00111 /** Displays a configuration modal dialog of the connected device. \n
00112 * In Windows, the capturing will be stopped in some cases. \n
00113 * In Windows parent is a HWND of a parent window, it can be NULL. \n
00114 * dialog can be from 0 to \ref imVideoCaptureDialogCount. \n
00115 * Returns zero if failed.
00116 *
00117 * \verbatim vc:ShowDialog(dialog: number, parent: userdata) -> error: number [in Lua 5] \endverbatim
00118 * \ingroup capture */
00119 int IM_DECL imVideoCaptureShowDialog(imVideoCapture* vc, int dialog, void* parent);
00120
00121 /** Allows to control the input and output of devices that have multiple input and outputs.
00122 * cross controls in which stage the input/output will be set. Usually use 1, but some capture boards
00123 * has a second stage. In Direct X it controls the crossbars.
00124 *
00125 * \verbatim vc:SetInOut(input, output, cross: number) -> error: number [in Lua 5] \endverbatim
00126 * \ingroup capture */
00127 int imVideoCaptureSetInOut(imVideoCapture* vc, int input, int output, int cross);
00128
00129 /** Returns the description of a configuration dialog.
00130 * dialog can be from 0 to \ref imVideoCaptureDialogCount. \n
00131 *
00132 * \verbatim vc:DialogDesc(dialog: number) -> desc: string [in Lua 5] \endverbatim
00133 * \ingroup capture */
00134 const char* IM_DECL imVideoCaptureDialogDesc(imVideoCapture* vc, int dialog);
00135
00136 /** Returns the number of available video formats. \n
00137 * Returns zero if failed.
00138 *
00139 * \verbatim vc:FormatCount() -> error: number [in Lua 5] \endverbatim
00140 * \ingroup capture */
00141 int IM_DECL imVideoCaptureFormatCount(imVideoCapture* vc);
00142
00143 /** Returns information about the video format. \n
00144 * format can be from 0 to \ref imVideoCaptureFormatCount. \n
00145 * desc should be of size 10. \n
00146 * The image size is usually the maximum size for that format.
00147 * Other sizes can be available using \ref imVideoCaptureSetImageSize. \n
00148 * Returns zero if failed.
00149 *
00150 * \verbatim vc:GetFormat(format: number) -> error: number, width: number, height: number, desc: string [in Lua 5] \endverbatim
00151 * \ingroup capture */
00152 int IM_DECL imVideoCaptureGetFormat(imVideoCapture* vc, int format, int *width, int *height, char* desc);
00153
00154 /** Changes the video format of the connected device. \n
00155 * Should NOT work for DV devices. Use \ref imVideoCaptureSetImageSize only. \n
00156 * Use -1 to return the current format, in this case returns -1 if failed. \n
00157 * When the format is changed in the dialog, for some formats
00158 * the returned format is the preferred format, not the current format. \n
00159 * This will not affect color_mode of the capture image. \n
00160 * Returns zero if failed.
00161 *
00162 * \verbatim vc:SetFormat(format: number) -> error: number [in Lua 5] \endverbatim
00163 * \ingroup capture */
00164 int IM_DECL imVideoCaptureSetFormat(imVideoCapture* vc, int format);
00165
00166 /** Returns the current image size of the connected device. \n
00167 * width and height returns 0 if not connected.
00168 *
00169 * \verbatim vc:GetImageSize() -> width: number, height: number [in Lua 5] \endverbatim
00170 * \ingroup capture */
00171 void IM_DECL imVideoCaptureGetImageSize(imVideoCapture* vc, int *width, int *height);
00172
00173 /** Changes the image size of the connected device. \n
00174 * Similar to \ref imVideoCaptureSetFormat, but changes only the size. \n
00175 * Valid sizes can be obtained with \ref imVideoCaptureGetFormat. \n
00176 * Returns zero if failed.
00177 *
00178 * \verbatim vc:SetImageSize(width: number, height: number) -> error: number [in Lua 5] \endverbatim
00179 * \ingroup capture */
00180 int IM_DECL imVideoCaptureSetImageSize(imVideoCapture* vc, int width, int height);
00181
00182 /** Returns a new captured frame. Use -1 for infinite timeout. \n
00183 * Color space can be IM_RGB or IM_GRAY, and mode can be packed (IM_PACKED) or not. \n
00184 * It can not have an alpha channel and orientation is always bottom up. \n
00185 * Returns zero if failed or timeout expired, the buffer is not changed.
00186 *
00187 * \verbatim vc:Frame(image: imImage, timeout: number) -> error: number [in Lua 5] \endverbatim
00188 * \ingroup capture */
00189 int IM_DECL imVideoCaptureFrame(imVideoCapture* vc, unsigned char* data, int color_mode, int timeout);
00190
00191 /** Start capturing, returns the new captured frame and stop capturing. \n
00192 * This is more usefull if you are switching between devices. \n
00193 * Data format is the same as imVideoCaptureFrame. \n
00194 * Returns zero if failed.
00195 *
00196 * \verbatim vc:OneFrame(image: imImage) -> error: number [in Lua 5] \endverbatim
00197 * \ingroup capture */
00198 int IM_DECL imVideoCaptureOneFrame(imVideoCapture* vc, unsigned char* data, int color_mode);
00199
00200 /** Start capturing. \n
00201 * Use -1 to return the current state. \n
00202 * Returns zero if failed.
00203 *
00204 * \verbatim vc:Live(live: number) -> error: number [in Lua 5] \endverbatim
00205 * \ingroup capture */
00206 int IM_DECL imVideoCaptureLive(imVideoCapture* vc, int live);
00207
00208 /** Resets a camera or video attribute to the default value or
00209 * to the automatic setting. \n
00210 * Not all attributes support automatic modes. \n
00211 * Returns zero if failed.
00212 *
00213 * \verbatim vc:ResetAttribute(attrib: string, fauto: number) -> error: number [in Lua 5] \endverbatim
00214 * \ingroup capture */
00215 int IM_DECL imVideoCaptureResetAttribute(imVideoCapture* vc, const char* attrib, int fauto);
00216
00217 /** Returns a camera or video attribute in percentage of the valid range value. \n
00218 * Returns zero if failed or attribute not supported.
00219 *
00220 * \verbatim vc:GetAttribute(attrib: string) -> error: number, percent: number [in Lua 5] \endverbatim
00221 * \ingroup capture */
00222 int IM_DECL imVideoCaptureGetAttribute(imVideoCapture* vc, const char* attrib, float *percent);
00223
00224 /** Changes a camera or video attribute in percentage of the valid range value. \n
00225 * Returns zero if failed or attribute not supported.
00226 *
00227 * \verbatim vc:SetAttribute(attrib: string, percent: number) -> error: number [in Lua 5] \endverbatim
00228 * \ingroup capture */
00229 int IM_DECL imVideoCaptureSetAttribute(imVideoCapture* vc, const char* attrib, float percent);
00230
00231 /** Returns a list of the description of the valid attributes for the device class. \n
00232 * But each device may still not support some of the returned attributes. \n
00233 * Use the return value of \ref imVideoCaptureGetAttribute to check if the attribute is supported.
00234 *
00235 * \verbatim vc:GetAttributeList() -> attrib_list: table of strings [in Lua 5] \endverbatim
00236 * \ingroup capture */
00237 const char** IM_DECL imVideoCaptureGetAttributeList(imVideoCapture* vc, int *num_attrib);
00238
00239
00240 /** \defgroup winattrib Windows Attributes Names
00241 * Not all attributes are supported by each device.
00242 * Use the return value of \ref imVideoCaptureGetAttribute to check if the attribute is supported.
00243 \verbatim
00244 VideoBrightness - Specifies the brightness, also called the black level.
00245 VideoContrast - Specifies the contrast, expressed as gain factor.
00246 VideoHue - Specifies the hue angle.
00247 VideoSaturation - Specifies the saturation.
00248 VideoSharpness - Specifies the sharpness.
00249 VideoGamma - Specifies the gamma.
00250 VideoColorEnable - Specifies the color enable setting. (0/100)
00251 VideoWhiteBalance - Specifies the white balance, as a color temperature in degrees Kelvin.
00252 VideoBacklightCompensation - Specifies the backlight compensation setting. (0/100)
00253 VideoGain - Specifies the gain adjustment.
00254 CameraPanAngle - Specifies the camera's pan angle. To 100 rotate right, To 0 rotate left (view from above).
00255 CameraTiltAngle - Specifies the camera's tilt angle. To 100 rotate up, To 0 rotate down.
00256 CameraRollAngle - Specifies the camera's roll angle. To 100 rotate right, To 0 rotate left.
00257 CameraLensZoom - Specifies the camera's zoom setting.
00258 CameraExposure - Specifies the exposure setting.
00259 CameraIris - Specifies the camera's iris setting.
00260 CameraFocus - Specifies the camera's focus setting, as the distance to the optimally focused target.
00261 FlipHorizontal - Specifies the video will be flipped in the horizontal direction.
00262 FlipVertical - Specifies the video will be flipped in the vertical direction.
00263 AnalogFormat - Specifies the video format standard NTSC, PAL, etc. Valid values:
00264 NTSC_M = 0
00265 NTSC_M_J = 1
00266 NTSC_433 = 2
00267 PAL_B = 3
00268 PAL_D = 4
00269 PAL_H = 5
00270 PAL_I = 6
00271 PAL_M = 7
00272 PAL_N = 8
00273 PAL_60 = 9
00274 SECAM_B = 10
00275 SECAM_D = 11
00276 SECAM_G = 12
00277 SECAM_H = 13
00278 SECAM_K = 14
00279 SECAM_K1 = 15
00280 SECAM_L = 16
00281 SECAM_L1 = 17
00282 PAL_N_COMBO = 18
00283 \endverbatim
00284 * \ingroup capture */
00285
00286
00287 #if defined(__cplusplus)
00288 }
00289
00290 /** A C++ Wrapper for the imVideoCapture structure functions.
00291 * \ingroup capture */
00292 class imCapture
00293 {
00294 public:
00295 imCapture()
00296 { vc = imVideoCaptureCreate(); }
00297
00298 ~imCapture()
00299 { if (vc) imVideoCaptureDestroy(vc); }
00300
00301 int Failed()
00302 { if (!vc) return 0; else return 1; }
00303
00304 int Connect(int device)
00305 { return imVideoCaptureConnect(vc, device); }
00306
00307 void Disconnect()
00308 { imVideoCaptureDisconnect(vc); }
00309
00310 int DialogCount()
00311 { return imVideoCaptureDialogCount(vc); }
00312
00313 int ShowDialog(int dialog, void* parent)
00314 { return imVideoCaptureShowDialog(vc, dialog, parent); }
00315
00316 const char* DialogDescription(int dialog)
00317 { return imVideoCaptureDialogDesc(vc, dialog); }
00318
00319 int FormatCount()
00320 { return imVideoCaptureFormatCount(vc); }
00321
00322 int GetFormat(int format, int *width, int *height, char* desc)
00323 { return imVideoCaptureGetFormat(vc, format, width, height, desc); }
00324
00325 int SetFormat(int format)
00326 { return imVideoCaptureSetFormat(vc, format); }
00327
00328 void GetImageSize(int *width, int *height)
00329 { imVideoCaptureGetImageSize(vc, width, height); }
00330
00331 int SetImageSize(int width, int height)
00332 { return imVideoCaptureSetImageSize(vc, width, height); }
00333
00334 int GetFrame(unsigned char* data, int color_mode, int timeout)
00335 { return imVideoCaptureFrame(vc, data, color_mode, timeout); }
00336
00337 int GetOneFrame(unsigned char* data, int color_mode)
00338 { return imVideoCaptureOneFrame(vc, data, color_mode); }
00339
00340 int Live(int live)
00341 { return imVideoCaptureLive(vc, live); }
00342
00343 int ResetAttribute(const char* attrib, int fauto)
00344 { return imVideoCaptureResetAttribute(vc, attrib, fauto); }
00345
00346 int GetAttribute(const char* attrib, float *percent)
00347 { return imVideoCaptureGetAttribute(vc, attrib, percent); }
00348
00349 int SetAttribute(const char* attrib, float percent)
00350 { return imVideoCaptureSetAttribute(vc, attrib, percent); }
00351
00352 const char** GetAttributeList(int *num_attrib)
00353 { return imVideoCaptureGetAttributeList(vc, num_attrib); }
00354
00355 protected:
00356 imVideoCapture* vc;
00357 };
00358
00359 #endif
00360
00361 #endif