this->tractor = mlt_tractor_init( );
// The first plant will be connected to the mulitrack
- this->producer = mlt_multitrack_service( this->multitrack );
+ this->producer = MLT_MULTITRACK_SERVICE( this->multitrack );
+
+ // Connect the tractor to the multitrack
+ mlt_tractor_connect( this->tractor, this->producer );
+ }
+
+ // Return this
+ return this;
+}
+
+mlt_field mlt_field_new( mlt_multitrack multitrack, mlt_tractor tractor )
+{
+ // Initialise the field
+ mlt_field this = calloc( sizeof( struct mlt_field_s ), 1 );
+
+ // Initialise it
+ if ( this != NULL )
+ {
+ // Construct a multitrack
+ this->multitrack = multitrack;
+
+ // Construct a tractor
+ this->tractor = tractor;
+
+ // The first plant will be connected to the mulitrack
+ this->producer = MLT_MULTITRACK_SERVICE( this->multitrack );
// Connect the tractor to the multitrack
mlt_tractor_connect( this->tractor, this->producer );
mlt_service mlt_field_service( mlt_field this )
{
- return mlt_tractor_service( this->tractor );
+ return MLT_TRACTOR_SERVICE( this->tractor );
}
/** Get the multi track.
mlt_multitrack mlt_field_multitrack( mlt_field this )
{
- return this->multitrack;
+ return this != NULL ? this->multitrack : NULL;
+}
+
+/** Get the tractor.
+*/
+
+mlt_tractor mlt_field_tractor( mlt_field this )
+{
+ return this != NULL ? this->tractor : NULL;
}
/** Get the properties associated to this field.
mlt_properties mlt_field_properties( mlt_field this )
{
- return mlt_service_properties( mlt_field_service( this ) );
+ return MLT_SERVICE_PROPERTIES( mlt_field_service( this ) );
}
/** Plant a filter.
if ( result == 0 )
{
// This is now the new producer
- this->producer = mlt_filter_service( that );
+ this->producer = MLT_FILTER_SERVICE( that );
// Reconnect tractor to new producer
mlt_tractor_connect( this->tractor, this->producer );
+
+ // Fire an event
+ mlt_events_fire( mlt_field_properties( this ), "service-changed", NULL );
}
return result;
if ( result == 0 )
{
// This is now the new producer
- this->producer = mlt_transition_service( that );
+ this->producer = MLT_TRANSITION_SERVICE( that );
// Reconnect tractor to new producer
mlt_tractor_connect( this->tractor, this->producer );
+
+ // Fire an event
+ mlt_events_fire( mlt_field_properties( this ), "service-changed", NULL );
}
return 0;
void mlt_field_close( mlt_field this )
{
- mlt_tractor_close( this->tractor );
- mlt_multitrack_close( this->multitrack );
- free( this );
+ if ( this != NULL && mlt_properties_dec_ref( mlt_field_properties( this ) ) <= 0 )
+ {
+ //mlt_tractor_close( this->tractor );
+ //mlt_multitrack_close( this->multitrack );
+ free( this );
+ }
}