diff --git a/ext/opencv/videocapture.cpp b/ext/opencv/videocapture.cpp index 7d006c1..b85d589 100644 --- a/ext/opencv/videocapture.cpp +++ b/ext/opencv/videocapture.cpp @@ -248,6 +248,25 @@ namespace rubyopencv { return (ret) ? Mat::mat2obj(dstptr) : Qnil; } + /* + * Closes video file or capturing device. + * + * @overload release + * @return [nil] + * @opencv_func cv::VideCapture::release + */ + VALUE rb_release(VALUE self) { + cv::VideoCapture* selfptr = obj2videocapture(self); + try { + selfptr->release(); + } + catch (cv::Exception& e) { + Error::raise(e); + } + + return Qnil; + } + void init() { VALUE opencv = rb_define_module("Cv"); @@ -261,6 +280,7 @@ namespace rubyopencv { rb_define_method(rb_klass, "set", RUBY_METHOD_FUNC(rb_set), 2); rb_define_method(rb_klass, "grab", RUBY_METHOD_FUNC(rb_grab), 0); rb_define_method(rb_klass, "retrieve", RUBY_METHOD_FUNC(rb_retrieve), -1); + rb_define_method(rb_klass, "release", RUBY_METHOD_FUNC(rb_release), 0); } } } diff --git a/test/test_videocapture.rb b/test/test_videocapture.rb index df3bd9c..f57b72f 100755 --- a/test/test_videocapture.rb +++ b/test/test_videocapture.rb @@ -56,4 +56,9 @@ class TestVideoCapture < OpenCVTestCase @cap.set(CAP_PROP_POS_MSEC, 1000) assert_equal(1000, @cap.get(CAP_PROP_POS_MSEC)) end + + def test_release + @cap.release + assert_false(@cap.opened?) + end end