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
|
void
|
||||||
define_ruby_class()
|
define_ruby_class()
|
||||||
{
|
{
|
||||||
if(rb_klass)
|
if (rb_klass)
|
||||||
return;
|
return;
|
||||||
/*
|
/*
|
||||||
* opencv = rb_define_module("OpenCV");
|
* opencv = rb_define_module("OpenCV");
|
||||||
|
@ -45,8 +45,8 @@ define_ruby_class()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* CvVideoWriter.new(<i>filanem, fourcc, fps, size</i>) -> cvvideowriter
|
* CvVideoWriter.new(<i>filname, fourcc, fps, size[, is_color]</i>) -> cvvideowriter
|
||||||
* CvVideoWriter.new(<i>filanem, fourcc, fps, size</i>){|vw| ... } -> nil
|
* 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.
|
* Open new video writer. If block given, writer is closed automatically when end of block.
|
||||||
*
|
*
|
||||||
|
@ -55,8 +55,8 @@ define_ruby_class()
|
||||||
VALUE
|
VALUE
|
||||||
rb_initialize(int argc, VALUE *argv, VALUE self)
|
rb_initialize(int argc, VALUE *argv, VALUE self)
|
||||||
{
|
{
|
||||||
VALUE filename, fourcc, fps, size;
|
VALUE filename, fourcc, fps, size, is_color_val;
|
||||||
rb_scan_args(argc, argv, "40", &filename, &fourcc, &fps, &size);
|
rb_scan_args(argc, argv, "41", &filename, &fourcc, &fps, &size, &is_color_val);
|
||||||
char codec[4] = {' ', ' ', ' ', ' '};
|
char codec[4] = {' ', ' ', ' ', ' '};
|
||||||
int codec_number;
|
int codec_number;
|
||||||
Check_Type(filename, T_STRING);
|
Check_Type(filename, T_STRING);
|
||||||
|
@ -69,19 +69,27 @@ rb_initialize(int argc, VALUE *argv, VALUE self)
|
||||||
if (RSTRING_LEN(fourcc) > 4)
|
if (RSTRING_LEN(fourcc) > 4)
|
||||||
rb_raise(rb_eStandardError, "argument 2 (fourcc) should be specific 4-character. (i.e \"PIM1\",\"MJPG\")");
|
rb_raise(rb_eStandardError, "argument 2 (fourcc) should be specific 4-character. (i.e \"PIM1\",\"MJPG\")");
|
||||||
else {
|
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[i] = RSTRING_PTR(fourcc)[i];
|
||||||
codec_number = CV_FOURCC(codec[0], codec[1], codec[2], codec[3]);
|
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()) {
|
if (rb_block_given_p()) {
|
||||||
rb_yield(self);
|
rb_yield(self);
|
||||||
rb_close(self);
|
rb_close(self);
|
||||||
return Qnil;
|
return Qnil;
|
||||||
} else {
|
|
||||||
return self;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -107,7 +115,8 @@ VALUE
|
||||||
rb_close(VALUE self)
|
rb_close(VALUE self)
|
||||||
{
|
{
|
||||||
CvVideoWriter *writer = CVVIDEOWRITER(self);
|
CvVideoWriter *writer = CVVIDEOWRITER(self);
|
||||||
cvReleaseVideoWriter(&writer);
|
if (writer)
|
||||||
|
cvReleaseVideoWriter(&writer);
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,9 +31,11 @@ __NAMESPACE_END_CVVIDEOWRITER
|
||||||
inline CvVideoWriter*
|
inline CvVideoWriter*
|
||||||
CVVIDEOWRITER(VALUE object)
|
CVVIDEOWRITER(VALUE object)
|
||||||
{
|
{
|
||||||
CvVideoWriter *ptr;
|
// CvVideoWriter is
|
||||||
Data_Get_Struct(object, CvVideoWriter, ptr);
|
// CvVideoWriter *ptr;
|
||||||
return ptr;
|
// Data_Get_Struct(object, CvVideoWriter, ptr);
|
||||||
|
// return ptr;
|
||||||
|
return (CvVideoWriter*)DATA_PTR(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
__NAMESPACE_END_OPENCV
|
__NAMESPACE_END_OPENCV
|
||||||
|
|
|
@ -765,6 +765,7 @@ extern "C"{
|
||||||
mOpenCV::cCvSparseMat::define_ruby_class();
|
mOpenCV::cCvSparseMat::define_ruby_class();
|
||||||
mOpenCV::cCvHistogram::define_ruby_class();
|
mOpenCV::cCvHistogram::define_ruby_class();
|
||||||
mOpenCV::cCvCapture::define_ruby_class();
|
mOpenCV::cCvCapture::define_ruby_class();
|
||||||
|
mOpenCV::cCvVideoWriter::define_ruby_class();
|
||||||
|
|
||||||
mOpenCV::cCvLine::define_ruby_class();
|
mOpenCV::cCvLine::define_ruby_class();
|
||||||
mOpenCV::cCvTwoPoints::define_ruby_class();
|
mOpenCV::cCvTwoPoints::define_ruby_class();
|
||||||
|
|
|
@ -115,6 +115,7 @@ extern "C"{
|
||||||
#include "cvsparsemat.h"
|
#include "cvsparsemat.h"
|
||||||
#include "cvhistogram.h"
|
#include "cvhistogram.h"
|
||||||
#include "cvcapture.h"
|
#include "cvcapture.h"
|
||||||
|
#include "cvvideowriter.h"
|
||||||
|
|
||||||
#include "cvline.h"
|
#include "cvline.h"
|
||||||
#include "cvtwopoints.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