]> git.sesse.net Git - mlt/commitdiff
Filter cleanup and fixes
authorlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Thu, 15 Jul 2004 21:34:15 +0000 (21:34 +0000)
committerlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Thu, 15 Jul 2004 21:34:15 +0000 (21:34 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@337 d19143bc-622f-0410-bfdd-b5b2a6649095

src/framework/mlt_consumer.c
src/framework/mlt_factory.c
src/framework/mlt_filter.c
src/framework/mlt_filter.h
src/framework/mlt_service.c
src/framework/mlt_service.h
src/modules/westley/consumer_westley.c

index cfdc4ac9aae6b24fb76a33d098949bbdcc0f2d40..e6e5caf838bef068e3b97d8180b60111da3d1021 100644 (file)
@@ -155,7 +155,6 @@ int mlt_consumer_start( mlt_consumer this )
                                // Set the test card on the consumer
                                mlt_properties_set_data( properties, "test_card_producer", producer, 0, ( mlt_destructor )mlt_producer_close, NULL );
                        }
-
                }
        }
        else
index e7aac0f59d6a32e114685abbecbc5fefc1a41008..699dca30898d3462a331bc27a0d2e1544c7f338a 100644 (file)
@@ -47,7 +47,7 @@ int mlt_factory_init( char *prefix )
        if ( mlt_prefix == NULL )
        {
                // Allow user over rides
-               if ( prefix == NULL )
+               if ( prefix == NULL || !strcmp( prefix, "" ) )
                        prefix = getenv( "MLT_REPOSITORY" );
 
                // If no directory is specified, default to install directory
index 6e82f5ea688c33522189d97e199a8644e6ee3b84..5aefd13b015580396ff4bc671fcb046c59d12ba1 100644 (file)
@@ -93,7 +93,6 @@ int mlt_filter_connect( mlt_filter this, mlt_service producer, int index )
        if ( ret == 0 )
        {
                mlt_properties properties = mlt_service_properties( &this->parent );
-               this->producer = producer;
                mlt_properties_set_position( properties, "in", 0 );
                mlt_properties_set_position( properties, "out", 0 );
                mlt_properties_set_int( properties, "track", index );
@@ -162,10 +161,13 @@ static int filter_get_frame( mlt_service service, mlt_frame_ptr frame, int index
        int in = mlt_filter_get_in( this );
        int out = mlt_filter_get_out( this );
        
+       // Get the producer this is connected to
+       mlt_service producer = mlt_service_producer( &this->parent );
+
        // If the frame request is for this filters track, we need to process it
        if ( index == track )
        {
-               int ret = mlt_service_get_frame( this->producer, frame, index );
+               int ret = mlt_service_get_frame( producer, frame, index );
                if ( ret == 0 )
                {
                        mlt_position position = mlt_frame_get_position( *frame );
@@ -181,7 +183,7 @@ static int filter_get_frame( mlt_service service, mlt_frame_ptr frame, int index
        }
        else
        {
-               return mlt_service_get_frame( this->producer, frame, index );
+               return mlt_service_get_frame( producer, frame, index );
        }
 }
 
index 6d87933372efdeda57552db0128908a27ea9a552..20b119bdece133a32d3449b0e3ae67761118728a 100644 (file)
@@ -37,9 +37,6 @@ struct mlt_filter_s
        // protected filter method
        mlt_frame ( *process )( mlt_filter, mlt_frame );
 
-       // track and in/out points
-       mlt_service producer;
-
        // Protected
        void *child;
 };
index dcd0742fef7c14728da16616f6596e367205f177..0509b767cc43eab9810483df24aeb4f4fcc4b282 100644 (file)
@@ -144,7 +144,31 @@ static void mlt_service_disconnect( mlt_service this )
        base->out = NULL;
 }
 
-/** Associate this service to the its consumer.
+/** Obtain the consumer this service is connected to.
+*/
+
+mlt_service mlt_service_consumer( mlt_service this )
+{
+       // Get the service base
+       mlt_service_base *base = this->local;
+
+       // Return the connected consumer
+       return base->out;
+}
+
+/** Obtain the producer this service is connected to.
+*/
+
+mlt_service mlt_service_producer( mlt_service this )
+{
+       // Get the service base
+       mlt_service_base *base = this->local;
+
+       // Return the connected producer
+       return base->count > 0 ? base->in[ base->count - 1 ] : NULL;
+}
+
+/** Associate this service to the consumer.
 */
 
 static void mlt_service_connect( mlt_service this, mlt_service that )
@@ -201,7 +225,10 @@ mlt_properties mlt_service_properties( mlt_service self )
 
 int mlt_service_get_frame( mlt_service this, mlt_frame_ptr frame, int index )
 {
-       return this->get_frame( this, frame, index );
+       if ( this != NULL )
+               return this->get_frame( this, frame, index );
+       *frame = mlt_frame_init( );
+       return 0;
 }
 
 /** Close the service.
index 98ef43a706718e3cd574c4a1ba4eb3931126858a..627bbbeb977d5ee584f4c721f2d59b1ad391d29f 100644 (file)
@@ -46,6 +46,8 @@ extern int mlt_service_init( mlt_service self, void *child );
 extern int mlt_service_connect_producer( mlt_service self, mlt_service producer, int index );
 extern int mlt_service_get_frame( mlt_service self, mlt_frame_ptr frame, int index );
 extern mlt_properties mlt_service_properties( mlt_service self );
+extern mlt_service mlt_service_consumer( mlt_service self );
+extern mlt_service mlt_service_producer( mlt_service self );
 extern void mlt_service_close( mlt_service self );
 
 // I'm not sure about self one - leaving it out of docs for now (only used in consumer_westley)
index 0b15204c7fd1fee51e7a67a7e0dec13619a5351c..85f21c8facb3a2d60e20fbd83bc3786e6d7a5eb8 100644 (file)
@@ -300,7 +300,7 @@ static void serialise_filter( serialise_context context, mlt_service service, xm
        id[ ID_SIZE ] = '\0';
        
        // Recurse on connected producer
-       serialise_service( context, MLT_SERVICE( MLT_FILTER( service )->producer ), node );
+       serialise_service( context, mlt_service_producer( service ), node );
 
        if ( context->pass == 1 )
        {