Event and frame handling
authorlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Wed, 22 Sep 2004 12:28:08 +0000 (12:28 +0000)
committerlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Wed, 22 Sep 2004 12:28:08 +0000 (12:28 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt++@437 d19143bc-622f-0410-bfdd-b5b2a6649095

mlt++/src/MltFrame.cpp
mlt++/src/MltProperties.cpp
mlt++/src/MltProperties.h
mlt++/swig/mltpp.i

index dc242f4..4457cec 100644 (file)
@@ -24,6 +24,7 @@ using namespace Mlt;
 Frame::Frame( mlt_frame frame ) :
        instance( frame )
 {
+       inc_ref( );
 }
 
 Frame::Frame( Frame &frame ) :
index 13b8198..403fcc8 100644 (file)
@@ -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 )
index 6dae382..33d92f4 100644 (file)
@@ -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 );
        };
index 8f49724..bc38fa9 100644 (file)
@@ -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( )