mirror of
https://github.com/ruby-opencv/ruby-opencv
synced 2023-03-27 23:22:12 -04:00
added CvVideoWriter (not fully tested)
This commit is contained in:
parent
bff95e942a
commit
aae092dc04
5 changed files with 75 additions and 13 deletions
|
@ -29,7 +29,7 @@ rb_class()
|
|||
void
|
||||
define_ruby_class()
|
||||
{
|
||||
if(rb_klass)
|
||||
if (rb_klass)
|
||||
return;
|
||||
/*
|
||||
* opencv = rb_define_module("OpenCV");
|
||||
|
@ -45,8 +45,8 @@ define_ruby_class()
|
|||
|
||||
/*
|
||||
* call-seq:
|
||||
* CvVideoWriter.new(<i>filanem, fourcc, fps, size</i>) -> cvvideowriter
|
||||
* CvVideoWriter.new(<i>filanem, fourcc, fps, size</i>){|vw| ... } -> nil
|
||||
* CvVideoWriter.new(<i>filname, fourcc, fps, size[, is_color]</i>) -> cvvideowriter
|
||||
* CvVideoWriter.new(<i>filname, fourcc, fps, size[, is_color]</i>){|vw| ... } -> nil
|
||||
*
|
||||
* Open new video writer. If block given, writer is closed automatically when end of block.
|
||||
*
|
||||
|
@ -55,8 +55,8 @@ define_ruby_class()
|
|||
VALUE
|
||||
rb_initialize(int argc, VALUE *argv, VALUE self)
|
||||
{
|
||||
VALUE filename, fourcc, fps, size;
|
||||
rb_scan_args(argc, argv, "40", &filename, &fourcc, &fps, &size);
|
||||
VALUE filename, fourcc, fps, size, is_color_val;
|
||||
rb_scan_args(argc, argv, "41", &filename, &fourcc, &fps, &size, &is_color_val);
|
||||
char codec[4] = {' ', ' ', ' ', ' '};
|
||||
int codec_number;
|
||||
Check_Type(filename, T_STRING);
|
||||
|
@ -69,19 +69,27 @@ rb_initialize(int argc, VALUE *argv, VALUE self)
|
|||
if (RSTRING_LEN(fourcc) > 4)
|
||||
rb_raise(rb_eStandardError, "argument 2 (fourcc) should be specific 4-character. (i.e \"PIM1\",\"MJPG\")");
|
||||
else {
|
||||
for (int i = 0; i < RSTRING_LEN(fourcc); i++)
|
||||
int len = RSTRING_LEN(fourcc);
|
||||
for (int i = 0; i < len; ++i)
|
||||
codec[i] = RSTRING_PTR(fourcc)[i];
|
||||
codec_number = CV_FOURCC(codec[0], codec[1], codec[2], codec[3]);
|
||||
}
|
||||
}
|
||||
DATA_PTR(self) = cvCreateVideoWriter(StringValueCStr(filename), codec_number, FIX2INT(fps), VALUE_TO_CVSIZE(size));
|
||||
int is_color;
|
||||
if (NIL_P(is_color_val))
|
||||
is_color = 1;
|
||||
else
|
||||
is_color = (is_color_val == Qtrue) ? 1 : 0;
|
||||
|
||||
DATA_PTR(self) = cvCreateVideoWriter(StringValueCStr(filename), codec_number,
|
||||
NUM2DBL(fps), VALUE_TO_CVSIZE(size), is_color);
|
||||
if (rb_block_given_p()) {
|
||||
rb_yield(self);
|
||||
rb_close(self);
|
||||
return Qnil;
|
||||
} else {
|
||||
return self;
|
||||
}
|
||||
else
|
||||
return self;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -107,7 +115,8 @@ VALUE
|
|||
rb_close(VALUE self)
|
||||
{
|
||||
CvVideoWriter *writer = CVVIDEOWRITER(self);
|
||||
cvReleaseVideoWriter(&writer);
|
||||
if (writer)
|
||||
cvReleaseVideoWriter(&writer);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,9 +31,11 @@ __NAMESPACE_END_CVVIDEOWRITER
|
|||
inline CvVideoWriter*
|
||||
CVVIDEOWRITER(VALUE object)
|
||||
{
|
||||
CvVideoWriter *ptr;
|
||||
Data_Get_Struct(object, CvVideoWriter, ptr);
|
||||
return ptr;
|
||||
// CvVideoWriter is
|
||||
// CvVideoWriter *ptr;
|
||||
// Data_Get_Struct(object, CvVideoWriter, ptr);
|
||||
// return ptr;
|
||||
return (CvVideoWriter*)DATA_PTR(object);
|
||||
}
|
||||
|
||||
__NAMESPACE_END_OPENCV
|
||||
|
|
|
@ -765,6 +765,7 @@ extern "C"{
|
|||
mOpenCV::cCvSparseMat::define_ruby_class();
|
||||
mOpenCV::cCvHistogram::define_ruby_class();
|
||||
mOpenCV::cCvCapture::define_ruby_class();
|
||||
mOpenCV::cCvVideoWriter::define_ruby_class();
|
||||
|
||||
mOpenCV::cCvLine::define_ruby_class();
|
||||
mOpenCV::cCvTwoPoints::define_ruby_class();
|
||||
|
|
|
@ -115,6 +115,7 @@ extern "C"{
|
|||
#include "cvsparsemat.h"
|
||||
#include "cvhistogram.h"
|
||||
#include "cvcapture.h"
|
||||
#include "cvvideowriter.h"
|
||||
|
||||
#include "cvline.h"
|
||||
#include "cvtwopoints.h"
|
||||
|
|
49
test/test_cvvideowriter.rb
Executable file
49
test/test_cvvideowriter.rb
Executable file
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env ruby
|
||||
# -*- mode: ruby; coding: utf-8-unix -*-
|
||||
require 'test/unit'
|
||||
require 'opencv'
|
||||
require File.expand_path(File.dirname(__FILE__)) + '/helper'
|
||||
|
||||
include OpenCV
|
||||
|
||||
# Tests for OpenCV::CvVideoWriter
|
||||
class TestCvVideoWriter < OpenCVTestCase
|
||||
def test_initialize
|
||||
vw = CvVideoWriter.new('foo.avi', 'MJPG', 15, CvSize.new(320, 240))
|
||||
assert_equal(CvVideoWriter, vw.class)
|
||||
vw.close
|
||||
|
||||
vw = CvVideoWriter.new('foo.avi', 'MJPG', 15, CvSize.new(320, 240), false)
|
||||
assert_equal(CvVideoWriter, vw.class)
|
||||
vw.close
|
||||
|
||||
## Supported only Windows(?)
|
||||
# vw = CvVideoWriter.new('foo.avi', nil, 15, CvSize.new(320, 240), false)
|
||||
# assert_equal(CvVideoWriter, vw.class)
|
||||
# vw.close
|
||||
|
||||
CvVideoWriter.new('foo.avi', 'MJPG', 15, CvSize.new(320, 240)) { |vw|
|
||||
assert_equal(CvVideoWriter, vw.class)
|
||||
}
|
||||
|
||||
assert_raise(TypeError) {
|
||||
vw = CvVideoWriter.new(123, 'MJPG', 15, CvSize.new(320, 240), false)
|
||||
}
|
||||
end
|
||||
|
||||
def test_write
|
||||
vw = CvVideoWriter.new('foo.avi', 'MJPG', 15, CvSize.new(256, 256))
|
||||
vw.write CvMat.load(FILENAME_LENA256x256)
|
||||
vw.close
|
||||
|
||||
CvVideoWriter.new('foo.avi', 'MJPG', 15, CvSize.new(256, 256)) { |vw|
|
||||
vw.write CvMat.load(FILENAME_LENA256x256)
|
||||
}
|
||||
end
|
||||
|
||||
def test_close
|
||||
vw = CvVideoWriter.new('foo.avi', 'MJPG', 15, CvSize.new(320, 240))
|
||||
vw.close
|
||||
end
|
||||
end
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue