X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=mlt%2B%2B%2Fswig%2Fmltpp.i;h=f6060b739d4c38f17679011d813388a60c5ba908;hb=f5a43889f0ea29962f2d32b5dab0fcd25bebb945;hp=b06d82920fd9eb9ff59e276ae1062ee6a0c12316;hpb=caa3ad0c7c7cece4045e78484e0c7724706a01e3;p=melted diff --git a/mlt++/swig/mltpp.i b/mlt++/swig/mltpp.i index b06d829..f6060b7 100644 --- a/mlt++/swig/mltpp.i +++ b/mlt++/swig/mltpp.i @@ -30,16 +30,34 @@ */ namespace Mlt { -%newobject Factory::producer( char *, char * ); -%newobject Factory::filter( char *, char * ); -%newobject Factory::transition( char *, char * ); -%newobject Factory::consumer( char *, char * ); +%newobject Factory::init( const char * ); +%newobject Factory::producer( Profile &, char *, char * ); +%newobject Factory::filter( Profile &, char *, char * ); +%newobject Factory::transition( Profile &, char *, char * ); +%newobject Factory::consumer( Profile &, 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 Playlist::get_clip( int ); +%newobject Multitrack::track( int ); +%newobject Tractor::multitrack( ); +%newobject Tractor::field( ); +%newobject Tractor::track( int ); +%newobject Frame::get_original_producer( ); +%newobject Miracle::execute( char * ); +%newobject Miracle::push( char *, Service & ); +%newobject Miracle::unit( int ); +%newobject Repository::consumers( ); +%newobject Repository::filters( ); +%newobject Repository::producers( ); +%newobject Repository::transitions( ); +%newobject Repository::metadata( mlt_service_type, const char * ); } /** Classes to wrap. @@ -48,12 +66,85 @@ namespace Mlt { %include %include %include +%include +%include %include %include +%include %include %include +%include %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