diff --git a/ext/opencv/cvcapture.cpp b/ext/opencv/cvcapture.cpp index dd11630..1023c9c 100644 --- a/ext/opencv/cvcapture.cpp +++ b/ext/opencv/cvcapture.cpp @@ -11,8 +11,7 @@ /* * Document-class: OpenCV::CvCapture * - * Capture image from video stream. - * + * Class for video capturing from video files or cameras */ __NAMESPACE_BEGIN_OPENCV __NAMESPACE_BEGIN_CVCAPTURE @@ -40,8 +39,10 @@ define_ruby_class() rb_klass = rb_define_class_under(opencv, "CvCapture", rb_cData); VALUE video_interface = rb_hash_new(); - /* {:any, :mil, :vfw, :v4l, :v4l2, :fireware, :ieee1394, :dc1394, :cmu1394, :stereo, - :tyzx, :tyzx_left, :tyzx_right, :tyzx_color, :tyzx_z, :qt, :qtuicktime}: video source */ + /* + * :any, :mil, :vfw, :v4l, :v4l2, :fireware, :ieee1394, :dc1394, :cmu1394, + * :stereo, :tyzx, :tyzx_left, :tyzx_right, :tyzx_color, :tyzx_z, :qt, :qtuicktime + */ rb_define_const(rb_klass, "INTERFACE", video_interface); rb_hash_aset(video_interface, ID2SYM(rb_intern("any")), INT2FIX(CV_CAP_ANY)); rb_hash_aset(video_interface, ID2SYM(rb_intern("mil")), INT2FIX(CV_CAP_MIL)); @@ -102,20 +103,16 @@ cvcapture_free(void *ptr) } /* - * call-seq: - * CvCapture.open([dev = -1]) - * - * Reading video stream from the specified file or camera device. - * If dev is string (i.e "stream.avi"), reading video stream from file. - * If dev is number or symbol(include CvCapture::INTERFACE), - * reading video stream from camera. - * Currently two camera interfaces can be used on Windows: - * * Video for Windows(VFW) - * * Matrox Imaging Library(MIL) - * and two on Linux - * * V4L - * * FireWire(IEEE1394). - * If there is only one camera or it does not matter what camera to use nil may be passed. + * Open video file or a capturing device for video capturing + * @scope class + * @overload open(dev = nil) + * @param dev [String,Fixnum,Simbol,nil] Video capturing device + * * If dev is a string (i.e "stream.avi"), reads video stream from a file. + * * If dev is a number or symbol (included in CvCapture::INTERFACE), reads video stream from a device. + * * If dev is a nil, same as CvCapture.open(:any) + * @return [CvCapture] Opened CvCapture instance + * @opencv_func cvCaptureFromCAM + * @opencv_func cvCaptureFromFile */ VALUE rb_open(int argc, VALUE *argv, VALUE self) @@ -151,18 +148,11 @@ rb_open(int argc, VALUE *argv, VALUE self) return Data_Wrap_Struct(rb_klass, 0, cvcapture_free, capture); } - /* - * call-seq: - * grab -> true or false - * - * Grabbed frame is stored internally. To grab frame - * fast that is important for syncronization in case of reading from - * several cameras simultaneously. The grabbed frames are not exposed because - * they may be stored in compressed format (as defined by camera/driver). - * To retrieve the grabbed frame, retrieve should be used. - * - * If grabbed frame was success, return true. Otherwise return false. + * Grabs the next frame from video file or capturing device. + * @overload grab + * @return [Boolean] If grabbing a frame successed, returns true, otherwise returns false. + * @opencv_func cvGrabFrame */ VALUE rb_grab(VALUE self) @@ -178,10 +168,11 @@ rb_grab(VALUE self) } /* - * call-seq: - * retrieve -> IplImage or nil - * - * Gets the image grabbed with grab. + * Decodes and returns the grabbed video frame. + * @overload retrieve + * @return [IplImage] Grabbed video frame + * @return [nil] Failed to grabbing a frame + * @opencv_func cvRetrieveFrame */ VALUE rb_retrieve(VALUE self) @@ -205,10 +196,11 @@ rb_retrieve(VALUE self) } /* - * call-seq: - * query -> IplImage or nil - * - * Grabs and returns a frame camera or file. Just a combination of grab and retrieve in one call. + * Grabs, decodes and returns the next video frame. + * @overload query + * @return [IplImage] Next video frame + * @return [nil] Failed to read next video frame + * @opencv_func cvQueryFrame */ VALUE rb_query(VALUE self) @@ -259,30 +251,47 @@ rb_set_capture_property(VALUE self, int id, VALUE value) /* * Get film current position in milliseconds or video capture timestamp. + * @overload millisecond + * @return [Number] Current position of the video file in milliseconds or video capture timestamp + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_POS_MSEC) */ VALUE rb_get_millisecond(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_POS_MSEC); } + /* * Set film current position in milliseconds or video capture timestamp. + * @overload millisecond=value + * @param value [Number] Position in milliseconds or video capture timestamp. + * @return [Number] + * @opencv_func cvSetCaptureProperty (propId=CV_CAP_PROP_POS_MSEC) */ VALUE rb_set_millisecond(VALUE self, VALUE value) { return rb_set_capture_property(self, CV_CAP_PROP_POS_MSEC, value); } + /* * Get 0-based index of the frame to be decoded/captured next + * @overload frames + * @return [Number] 0-based index of the frame to be decoded/captured next + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_POS_FRAMES) */ VALUE rb_get_frames(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_POS_FRAMES); } + /* * Set 0-based index of the frame to be decoded/captured next + * @overload frames=value + * @param value [Number] 0-based index of the frame to be decoded/captured next + * @return [Number] + * @opencv_func cvSetCaptureProperty (propId=CV_CAP_PROP_POS_FRAMES) */ VALUE rb_set_frames(VALUE self, VALUE value) @@ -290,7 +299,10 @@ rb_set_frames(VALUE self, VALUE value) return rb_set_capture_property(self, CV_CAP_PROP_POS_FRAMES, value); } /* - * Get relative position of video file (0 - start of the film, 1 - end of the film) + * Get relative position of video file + * @overload avi_ratio + * @return [Number] Relative position of video file (0: Start of the film, 1: End of the film) + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_POS_AVI_RATIO) */ VALUE rb_get_avi_ratio(VALUE self) @@ -298,15 +310,23 @@ rb_get_avi_ratio(VALUE self) return rb_get_capture_property(self, CV_CAP_PROP_POS_AVI_RATIO); } /* - * Set relative position of video file (0 - start of the film, 1 - end of the film) + * Set relative position of video file + * @overload avi_ratio=value + * @param value [Number] Relative position of video file (0: Start of the film, 1: End of the film) + * @return [Number] + * @opencv_func cvSetCaptureProperty (propId=CV_CAP_PROP_POS_AVI_RATIO) */ VALUE rb_set_avi_ratio(VALUE self, VALUE value) { return rb_set_capture_property(self, CV_CAP_PROP_POS_AVI_RATIO, value); } + /* * Get size of frames in the video stream. + * @overload size + * @return [Size] Size of frames in the video stream. + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_FRAME_WIDTH,CV_CAP_PROP_FRAME_HEIGHT) */ VALUE rb_get_size(VALUE self) @@ -322,8 +342,13 @@ rb_get_size(VALUE self) } return cCvSize::new_object(size); } + /* * Set size of frames in the video stream. + * @overload size=value + * @param value [CvSize] Size of frames + * @return [Number] + * @opencv_func cvSetCaptureProperty (propId=CV_CAP_PROP_FRAME_WIDTH,CV_CAP_PROP_FRAME_HEIGHT) */ VALUE rb_set_size(VALUE self, VALUE value) @@ -340,56 +365,87 @@ rb_set_size(VALUE self, VALUE value) } return DBL2NUM(result); } + /* * Get width of frames in the video stream. + * @overload width + * @return [Number] Width of frames in the video stream. + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_FRAME_WIDTH) */ VALUE rb_get_width(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_FRAME_WIDTH); } + /* * Set width of frames in the video stream. + * @overload width=value + * @param value [Number] Width of frames + * @return [Number] + * @opencv_func cvSetCaptureProperty (propId=CV_CAP_PROP_FRAME_WIDTH) */ VALUE rb_set_width(VALUE self, VALUE value) { return rb_set_capture_property(self, CV_CAP_PROP_FRAME_WIDTH, value); } + /* * Get height of frames in the video stream. + * @overload height + * @return [Number] Height of frames in the video stream. + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_FRAME_HEIGHT) */ VALUE rb_get_height(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_FRAME_HEIGHT); } + /* * Set height of frames in the video stream. + * @overload height=value + * @param value [Number] Height of frames + * @return [Number] + * @opencv_func cvSetCaptureProperty (propId=CV_CAP_PROP_FRAME_HEIGHT) */ VALUE rb_set_height(VALUE self, VALUE value) { return rb_set_capture_property(self, CV_CAP_PROP_FRAME_HEIGHT, value); } + /* * Get frame rate + * @overload fps + * @return [Number] Frame rate + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_FPS) */ VALUE rb_get_fps(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_FPS); } + /* * Set frame rate + * @overload fps=value + * @param value [Number] Frame rate + * @return [Number] + * @opencv_func cvSetCaptureProperty (propId=CV_CAP_PROP_FPS) */ VALUE rb_set_fps(VALUE self, VALUE value) { return rb_set_capture_property(self, CV_CAP_PROP_FPS, value); } + /* - * Get 4character code of codec. see http://www.fourcc.org/ + * Get 4 character code of codec. see http://www.fourcc.org/ + * @overload fourcc + * @return [Number] Codec code + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_FOURCC) */ VALUE rb_get_fourcc(VALUE self) @@ -399,48 +455,72 @@ rb_get_fourcc(VALUE self) sprintf(str, "%s", (char*)&fourcc); return rb_str_new2(str); } + /* * Get number of frames in video file. + * @overload frame_count + * @return [Number] Number of frames + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_FRAME_COUNT) */ VALUE rb_get_frame_count(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_FRAME_COUNT); } + /* - * Get the format of the Mat objects returned by CvCapture#retrieve + * Get format of images returned by CvCapture#retrieve + * @overload format + * @return [Number] format + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_FORMAT) */ VALUE rb_get_format(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_FORMAT); } + /* * Get a backend-specific value indicating the current capture mode + * @overload mode + * @return [Number] Backend-specific value indicating the current capture mode + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_MODE) */ VALUE rb_get_mode(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_MODE); } + /* * Get brightness of the image (only for cameras) + * @overload brightness + * @return [Number] Brightness + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_BRIGHTNESS) */ VALUE rb_get_brightness(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_BRIGHTNESS); } + /* * Get contrast of the image (only for cameras) + * @overload contrast + * @return [Number] Contrast + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_CONTRAST) */ VALUE rb_get_contrast(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_CONTRAST); } + /* * Get saturation of the image (only for cameras) + * @overload saturation + * @return [Number] Saturation + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_SATURATION) */ VALUE rb_get_saturation(VALUE self) @@ -449,30 +529,45 @@ rb_get_saturation(VALUE self) } /* * Get hue of the image (only for cameras) + * @overload hue + * @return [Number] Hue + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_HUE) */ VALUE rb_get_hue(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_HUE); } + /* * Get gain of the image (only for cameras) + * @overload gain + * @return [Number] Gain + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_GAIN) */ VALUE rb_get_gain(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_GAIN); } + /* * Get exposure (only for cameras) + * @overload exposure + * @return [Number] Exposure + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_EXPOSURE) */ VALUE rb_get_exposure(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_EXPOSURE); } + /* * Get boolean flags indicating whether images should be converted to RGB + * @overload convert_rgb + * @return [Boolean] Whether images should be converted to RGB + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_CONVERT_RGB) */ VALUE rb_get_convert_rgb(VALUE self) @@ -486,14 +581,19 @@ rb_get_convert_rgb(VALUE self) } return flag ? Qtrue : Qfalse; } + /* - * Get TOWRITE (note: only supported by DC1394 v 2.x backend currently) + * Get rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently) + * @overload rectification + * @return [Number] Rectification flag + * @opencv_func cvGetCaptureProperty (propId=CV_CAP_PROP_RECTIFICATION) */ VALUE rb_get_rectification(VALUE self) { return rb_get_capture_property(self, CV_CAP_PROP_RECTIFICATION); } + __NAMESPACE_END_CVCAPTURE __NAMESPACE_END_OPENCV