From 1fcd5e9c6cec812a621bcfed5a96bb50957602e3 Mon Sep 17 00:00:00 2001 From: lilo_booter Date: Wed, 22 Sep 2004 12:28:08 +0000 Subject: [PATCH] Event and frame handling git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt++@437 d19143bc-622f-0410-bfdd-b5b2a6649095 --- mlt++/src/MltFrame.cpp | 1 + mlt++/src/MltProperties.cpp | 9 ++------- mlt++/src/MltProperties.h | 2 +- mlt++/swig/mltpp.i | 11 ++++++++++- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/mlt++/src/MltFrame.cpp b/mlt++/src/MltFrame.cpp index dc242f4..4457cec 100644 --- a/mlt++/src/MltFrame.cpp +++ b/mlt++/src/MltFrame.cpp @@ -24,6 +24,7 @@ using namespace Mlt; Frame::Frame( mlt_frame frame ) : instance( frame ) { + inc_ref( ); } Frame::Frame( Frame &frame ) : diff --git a/mlt++/src/MltProperties.cpp b/mlt++/src/MltProperties.cpp index 13b8198..403fcc8 100644 --- a/mlt++/src/MltProperties.cpp +++ b/mlt++/src/MltProperties.cpp @@ -189,15 +189,10 @@ int Properties::save( char *file ) return error; } -void Properties::listen( char *id, void *object, mlt_listener listener ) +Event *Properties::listen( char *id, void *object, mlt_listener listener ) { - char key[ 128 ]; mlt_event event = mlt_events_listen( get_properties( ), object, id, listener ); - if ( event != NULL ) - { - sprintf( key, "_%p", event ); - mlt_properties_set_data( get_properties( ), key, event, 0, ( mlt_destructor )mlt_event_close, NULL ); - } + return new Event( event ); } Event *Properties::setup_wait_for( char *id ) diff --git a/mlt++/src/MltProperties.h b/mlt++/src/MltProperties.h index 6dae382..33d92f4 100644 --- a/mlt++/src/MltProperties.h +++ b/mlt++/src/MltProperties.h @@ -67,7 +67,7 @@ namespace Mlt void dump( FILE *output = stderr ); void debug( char *title = "Object", FILE *output = stderr ); int save( char *file ); - void listen( char *id, void *object, mlt_listener listener ); + Event *listen( char *id, void *object, mlt_listener listener ); Event *setup_wait_for( char *id ); void wait_for( Event *, bool destroy = true ); }; diff --git a/mlt++/swig/mltpp.i b/mlt++/swig/mltpp.i index 8f49724..bc38fa9 100644 --- a/mlt++/swig/mltpp.i +++ b/mlt++/swig/mltpp.i @@ -34,6 +34,7 @@ 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 ); @@ -79,11 +80,19 @@ static void ruby_listener( mlt_properties owner, void *object ); class RubyListener { + private: + Mlt::Event *event; + public: RubyListener( Mlt::Properties &properties, char *id, VALUE callback ) : callback( callback ) { - properties.listen( id, this, ( mlt_listener )ruby_listener ); + event = properties.listen( id, this, ( mlt_listener )ruby_listener ); + } + + ~RubyList( ) + { + delete event; } void mark( ) -- 1.7.4.4