X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=mlt%2B%2B%2Fswig%2Fmltpp.i;h=7793f781d3927f72a4ab48cb05e1a934b5527808;hb=a73dbca8c02fda57a6789d08d716a20e1ba43c59;hp=31f0b39fc65762f9f3109763a9a5d6941132f335;hpb=1d262eab5f8850bf2603a405e09ad213341f4ab7;p=melted diff --git a/mlt++/swig/mltpp.i b/mlt++/swig/mltpp.i index 31f0b39..7793f78 100644 --- a/mlt++/swig/mltpp.i +++ b/mlt++/swig/mltpp.i @@ -19,6 +19,8 @@ */ %module mltpp +%include "carrays.i" +%array_class(unsigned char, unsignedCharArray); %{ #include @@ -32,18 +34,30 @@ namespace Mlt { %newobject Factory::filter( char *, char * ); %newobject Factory::transition( char *, char * ); %newobject Factory::consumer( char *, char * ); +%newobject Properties::listen( char *, void *, mlt_listener ); %newobject Service::producer( ); %newobject Service::consumer( ); %newobject Service::get_frame( int ); +%newobject Service::filter( int ); +%newobject Producer::filter( int ); +%newobject Producer::cut( int, int ); %newobject Playlist::current( ); %newobject Playlist::clip_info( int ); +%newobject Multitrack::track( int ); +%newobject Tractor::multitrack( ); +%newobject Tractor::field( ); +%newobject Tractor::track( int ); +%newobject Miracle::execute( char * ); +%newobject Miracle::push( char *, Service & ); } /** Classes to wrap. */ %include +%include %include +%include %include %include %include @@ -51,6 +65,73 @@ namespace Mlt { %include %include %include +%include +%include +%include +%include %include -%include +%include +%include + +#if defined(SWIGRUBY) + +%{ + +static void ruby_listener( mlt_properties owner, void *object ); + +class RubyListener +{ + private: + VALUE callback; + Mlt::Event *event; + + public: + RubyListener( Mlt::Properties &properties, char *id, VALUE callback ) : + callback( callback ) + { + event = properties.listen( id, this, ( mlt_listener )ruby_listener ); + } + + ~RubyListener( ) + { + delete event; + } + + void mark( ) + { + ((void (*)(VALUE))(rb_gc_mark))( callback ); + } + + void doit( ) + { + ID method = rb_intern( "call" ); + rb_funcall( callback, method, 0 ); + } +}; + +static void ruby_listener( mlt_properties owner, void *object ) +{ + RubyListener *o = static_cast< RubyListener * >( object ); + o->doit( ); +} + +void markRubyListener( void* p ) +{ + RubyListener *o = static_cast( p ); + o->mark( ); +} + +%} + +// Ruby wrapper +%rename( Listener ) RubyListener; +%markfunc RubyListener "markRubyListener"; + +class RubyListener +{ + public: + RubyListener( Mlt::Properties &properties, char *id, VALUE callback ); +}; + +#endif