summaryrefslogtreecommitdiff
path: root/include/im_capture.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/im_capture.h')
-rw-r--r--include/im_capture.h365
1 files changed, 365 insertions, 0 deletions
diff --git a/include/im_capture.h b/include/im_capture.h
new file mode 100644
index 0000000..7c130a3
--- /dev/null
+++ b/include/im_capture.h
@@ -0,0 +1,365 @@
+/** \file
+ * \brief Video Capture
+ *
+ * See Copyright Notice in im.h
+ */
+
+#ifndef __IM_CAPTURE_H
+#define __IM_CAPTURE_H
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/* declarations to create an export library for Watcom. */
+#if ! defined (IM_DECL)
+ #if defined (__WATCOMC__)
+ #define IM_DECL __cdecl
+ #elif defined(__WATCOM_CPLUSPLUS__)
+ #define IM_DECL __cdecl
+ #else
+ #define IM_DECL
+ #endif
+#endif
+
+/** \defgroup capture Image Capture
+ * \par
+ * Functions to capture images from live video devices.
+ * \par
+ * See \ref im_capture.h
+ */
+
+typedef struct _imVideoCapture imVideoCapture;
+
+/** Returns the number of available devices.
+ *
+ * \verbatim im.VideoCaptureDeviceCount() -> count: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureDeviceCount(void);
+
+/** Returns the device description. Returns NULL only if it is an invalid device.
+ *
+ * \verbatim im.VideoCaptureDeviceDesc(device: number) -> desc: string [in Lua 5] \endverbatim
+ * \ingroup capture */
+const char* IM_DECL imVideoCaptureDeviceDesc(int device);
+
+/** Returns the extendend device description. May return NULL.
+ *
+ * \verbatim im.VideoCaptureDeviceExDesc(device: number) -> desc: string [in Lua 5] \endverbatim
+ * \ingroup capture */
+const char* imVideoCaptureDeviceExDesc(int device);
+
+/** Returns the device path configuration. This is a unique string.
+ *
+ * \verbatim im.VideoCaptureDevicePath(device: number) -> desc: string [in Lua 5] \endverbatim
+ * \ingroup capture */
+const char* imVideoCaptureDevicePath(int device);
+
+/** Returns the vendor information. May return NULL.
+ *
+ * \verbatim im.VideoCaptureDeviceVendorInfo(device: number) -> desc: string [in Lua 5] \endverbatim
+ * \ingroup capture */
+const char* imVideoCaptureDeviceVendorInfo(int device);
+
+/** Reload the device list. The devices can be dynamically removed or added to the system.
+ * Returns the number of available devices.
+ *
+ * \verbatim im.imVideoCaptureReloadDevices() -> count: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureReloadDevices(void);
+
+/** Creates a new imVideoCapture object. \n
+ * Returns NULL if there is no capture device available. \n
+ * In Windows returns NULL if DirectX version is older than 8. \n
+ * In Lua the IM videocapture metatable name is "imVideoCapture".
+ * When converted to a string will return "imVideoCapture(%p)" where %p is replaced by the userdata address.
+ * If the videocapture is already destroyed by im.VideoCaptureDestroy, then it will return also the suffix "-destroyed".
+ *
+ * \verbatim im.VideoCaptureCreate() -> vc: imVideoCapture [in Lua 5] \endverbatim
+ * \ingroup capture */
+imVideoCapture* IM_DECL imVideoCaptureCreate(void);
+
+/** Destroys a imVideoCapture object. \n
+ * In Lua if this function is not called, the videocapture is destroyed by the garbage collector.
+ *
+ * \verbatim im.VideoCaptureDestroy(vc: imVideoCapture) [in Lua 5] \endverbatim
+ * \verbatim vc:Destroy() [in Lua 5] \endverbatim
+ * \ingroup capture */
+void IM_DECL imVideoCaptureDestroy(imVideoCapture* vc);
+
+/** Connects to a capture device.
+ * More than one imVideoCapture object can be created
+ * but they must be connected to different devices. \n
+ * If the object is conected it will disconnect first. \n
+ * Use -1 to return the current connected device,
+ * in this case returns -1 if not connected. \n
+ * Returns zero if failed.
+ *
+ * \verbatim vc:Connect([device: number]) -> ret: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureConnect(imVideoCapture* vc, int device);
+
+/** Disconnect from a capture device.
+ *
+ * \verbatim vc:Disconnect() [in Lua 5] \endverbatim
+ * \ingroup capture */
+void IM_DECL imVideoCaptureDisconnect(imVideoCapture* vc);
+
+/** Returns the number of available configuration dialogs.
+ *
+ * \verbatim vc:DialogCount() -> count: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureDialogCount(imVideoCapture* vc);
+
+/** Displays a configuration modal dialog of the connected device. \n
+ * In Windows, the capturing will be stopped in some cases. \n
+ * In Windows parent is a HWND of a parent window, it can be NULL. \n
+ * dialog can be from 0 to \ref imVideoCaptureDialogCount. \n
+ * Returns zero if failed.
+ *
+ * \verbatim vc:ShowDialog(dialog: number, parent: userdata) -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureShowDialog(imVideoCapture* vc, int dialog, void* parent);
+
+/** Allows to control the input and output of devices that have multiple input and outputs.
+ * cross controls in which stage the input/output will be set. Usually use 1, but some capture boards
+ * has a second stage. In Direct X it controls the crossbars.
+ *
+ * \verbatim vc:SetInOut(input, output, cross: number) -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int imVideoCaptureSetInOut(imVideoCapture* vc, int input, int output, int cross);
+
+/** Returns the description of a configuration dialog.
+ * dialog can be from 0 to \ref imVideoCaptureDialogCount. \n
+ *
+ * \verbatim vc:DialogDesc(dialog: number) -> desc: string [in Lua 5] \endverbatim
+ * \ingroup capture */
+const char* IM_DECL imVideoCaptureDialogDesc(imVideoCapture* vc, int dialog);
+
+/** Returns the number of available video formats. \n
+ * Returns zero if failed.
+ *
+ * \verbatim vc:FormatCount() -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureFormatCount(imVideoCapture* vc);
+
+/** Returns information about the video format. \n
+ * format can be from 0 to \ref imVideoCaptureFormatCount. \n
+ * desc should be of size 10. \n
+ * The image size is usually the maximum size for that format.
+ * Other sizes can be available using \ref imVideoCaptureSetImageSize. \n
+ * Returns zero if failed.
+ *
+ * \verbatim vc:GetFormat(format: number) -> error: number, width: number, height: number, desc: string [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureGetFormat(imVideoCapture* vc, int format, int *width, int *height, char* desc);
+
+/** Changes the video format of the connected device. \n
+ * Should NOT work for DV devices. Use \ref imVideoCaptureSetImageSize only. \n
+ * Use -1 to return the current format, in this case returns -1 if failed. \n
+ * When the format is changed in the dialog, for some formats
+ * the returned format is the preferred format, not the current format. \n
+ * This will not affect color_mode of the capture image. \n
+ * Returns zero if failed.
+ *
+ * \verbatim vc:SetFormat(format: number) -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureSetFormat(imVideoCapture* vc, int format);
+
+/** Returns the current image size of the connected device. \n
+ * width and height returns 0 if not connected.
+ *
+ * \verbatim vc:GetImageSize() -> width: number, height: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+void IM_DECL imVideoCaptureGetImageSize(imVideoCapture* vc, int *width, int *height);
+
+/** Changes the image size of the connected device. \n
+ * Similar to \ref imVideoCaptureSetFormat, but changes only the size. \n
+ * Valid sizes can be obtained with \ref imVideoCaptureGetFormat. \n
+ * Returns zero if failed.
+ *
+ * \verbatim vc:SetImageSize(width: number, height: number) -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureSetImageSize(imVideoCapture* vc, int width, int height);
+
+/** Returns a new captured frame. Use -1 for infinite timeout. \n
+ * Color space can be IM_RGB or IM_GRAY, and mode can be packed (IM_PACKED) or not. \n
+ * Data type is always IM_BYTE. \n
+ * It can not have an alpha channel and orientation is always bottom up. \n
+ * Returns zero if failed or timeout expired, the buffer is not changed.
+ *
+ * \verbatim vc:Frame(image: imImage, timeout: number) -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureFrame(imVideoCapture* vc, unsigned char* data, int color_mode, int timeout);
+
+/** Start capturing, returns the new captured frame and stop capturing. \n
+ * This is more usefull if you are switching between devices. \n
+ * Data format is the same as imVideoCaptureFrame. \n
+ * Returns zero if failed.
+ *
+ * \verbatim vc:OneFrame(image: imImage) -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureOneFrame(imVideoCapture* vc, unsigned char* data, int color_mode);
+
+/** Start capturing. \n
+ * Use -1 to return the current state. \n
+ * Returns zero if failed.
+ *
+ * \verbatim vc:Live(live: number) -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureLive(imVideoCapture* vc, int live);
+
+/** Resets a camera or video attribute to the default value or
+ * to the automatic setting. \n
+ * Not all attributes support automatic modes. \n
+ * Returns zero if failed.
+ *
+ * \verbatim vc:ResetAttribute(attrib: string, fauto: number) -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureResetAttribute(imVideoCapture* vc, const char* attrib, int fauto);
+
+/** Returns a camera or video attribute in percentage of the valid range value. \n
+ * Returns zero if failed or attribute not supported.
+ *
+ * \verbatim vc:GetAttribute(attrib: string) -> error: number, percent: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureGetAttribute(imVideoCapture* vc, const char* attrib, float *percent);
+
+/** Changes a camera or video attribute in percentage of the valid range value. \n
+ * Returns zero if failed or attribute not supported.
+ *
+ * \verbatim vc:SetAttribute(attrib: string, percent: number) -> error: number [in Lua 5] \endverbatim
+ * \ingroup capture */
+int IM_DECL imVideoCaptureSetAttribute(imVideoCapture* vc, const char* attrib, float percent);
+
+/** Returns a list of the description of the valid attributes for the device class. \n
+ * But each device may still not support some of the returned attributes. \n
+ * Use the return value of \ref imVideoCaptureGetAttribute to check if the attribute is supported.
+ *
+ * \verbatim vc:GetAttributeList() -> attrib_list: table of strings [in Lua 5] \endverbatim
+ * \ingroup capture */
+const char** IM_DECL imVideoCaptureGetAttributeList(imVideoCapture* vc, int *num_attrib);
+
+
+/** \defgroup winattrib Windows Attributes Names
+ * Not all attributes are supported by each device.
+ * Use the return value of \ref imVideoCaptureGetAttribute to check if the attribute is supported.
+\verbatim
+ VideoBrightness - Specifies the brightness, also called the black level.
+ VideoContrast - Specifies the contrast, expressed as gain factor.
+ VideoHue - Specifies the hue angle.
+ VideoSaturation - Specifies the saturation.
+ VideoSharpness - Specifies the sharpness.
+ VideoGamma - Specifies the gamma.
+ VideoColorEnable - Specifies the color enable setting. (0/100)
+ VideoWhiteBalance - Specifies the white balance, as a color temperature in degrees Kelvin.
+ VideoBacklightCompensation - Specifies the backlight compensation setting. (0/100)
+ VideoGain - Specifies the gain adjustment.
+ CameraPanAngle - Specifies the camera's pan angle. To 100 rotate right, To 0 rotate left (view from above).
+ CameraTiltAngle - Specifies the camera's tilt angle. To 100 rotate up, To 0 rotate down.
+ CameraRollAngle - Specifies the camera's roll angle. To 100 rotate right, To 0 rotate left.
+ CameraLensZoom - Specifies the camera's zoom setting.
+ CameraExposure - Specifies the exposure setting.
+ CameraIris - Specifies the camera's iris setting.
+ CameraFocus - Specifies the camera's focus setting, as the distance to the optimally focused target.
+ FlipHorizontal - Specifies the video will be flipped in the horizontal direction.
+ FlipVertical - Specifies the video will be flipped in the vertical direction.
+ AnalogFormat - Specifies the video format standard NTSC, PAL, etc. Valid values:
+ NTSC_M = 0
+ NTSC_M_J = 1
+ NTSC_433 = 2
+ PAL_B = 3
+ PAL_D = 4
+ PAL_H = 5
+ PAL_I = 6
+ PAL_M = 7
+ PAL_N = 8
+ PAL_60 = 9
+ SECAM_B = 10
+ SECAM_D = 11
+ SECAM_G = 12
+ SECAM_H = 13
+ SECAM_K = 14
+ SECAM_K1 = 15
+ SECAM_L = 16
+ SECAM_L1 = 17
+ PAL_N_COMBO = 18
+\endverbatim
+ * \ingroup capture */
+
+
+#if defined(__cplusplus)
+}
+
+/** A C++ Wrapper for the imVideoCapture structure functions.
+ * \ingroup capture */
+class imCapture
+{
+public:
+ imCapture()
+ { vc = imVideoCaptureCreate(); }
+
+ ~imCapture()
+ { if (vc) imVideoCaptureDestroy(vc); }
+
+ int Failed()
+ { if (!vc) return 0; else return 1; }
+
+ int Connect(int device)
+ { return imVideoCaptureConnect(vc, device); }
+
+ void Disconnect()
+ { imVideoCaptureDisconnect(vc); }
+
+ int DialogCount()
+ { return imVideoCaptureDialogCount(vc); }
+
+ int ShowDialog(int dialog, void* parent)
+ { return imVideoCaptureShowDialog(vc, dialog, parent); }
+
+ const char* DialogDescription(int dialog)
+ { return imVideoCaptureDialogDesc(vc, dialog); }
+
+ int FormatCount()
+ { return imVideoCaptureFormatCount(vc); }
+
+ int GetFormat(int format, int *width, int *height, char* desc)
+ { return imVideoCaptureGetFormat(vc, format, width, height, desc); }
+
+ int SetFormat(int format)
+ { return imVideoCaptureSetFormat(vc, format); }
+
+ void GetImageSize(int *width, int *height)
+ { imVideoCaptureGetImageSize(vc, width, height); }
+
+ int SetImageSize(int width, int height)
+ { return imVideoCaptureSetImageSize(vc, width, height); }
+
+ int GetFrame(unsigned char* data, int color_mode, int timeout)
+ { return imVideoCaptureFrame(vc, data, color_mode, timeout); }
+
+ int GetOneFrame(unsigned char* data, int color_mode)
+ { return imVideoCaptureOneFrame(vc, data, color_mode); }
+
+ int Live(int live)
+ { return imVideoCaptureLive(vc, live); }
+
+ int ResetAttribute(const char* attrib, int fauto)
+ { return imVideoCaptureResetAttribute(vc, attrib, fauto); }
+
+ int GetAttribute(const char* attrib, float *percent)
+ { return imVideoCaptureGetAttribute(vc, attrib, percent); }
+
+ int SetAttribute(const char* attrib, float percent)
+ { return imVideoCaptureSetAttribute(vc, attrib, percent); }
+
+ const char** GetAttributeList(int *num_attrib)
+ { return imVideoCaptureGetAttributeList(vc, num_attrib); }
+
+protected:
+ imVideoCapture* vc;
+};
+
+#endif
+
+#endif