// Get the properties
mlt_properties properties = MLT_PLAYLIST_PROPERTIES( this );
+ // Automatically close previous producers if requested
+ if ( i > 1 // keep immediate previous in case app wants to get info about what just finished
+ && position < 2 // tolerate off-by-one error on going to next clip
+ && mlt_properties_get_int( properties, "autoclose" ) )
+ {
+ int j;
+ // They might have jumped ahead!
+ for ( j = 0; j < i - 1; j++ )
+ {
+ mlt_service_lock( MLT_PRODUCER_SERVICE( this->list[ j ]->producer ) );
+ mlt_producer p = this->list[ j ]->producer;
+ if ( p )
+ {
+ this->list[ j ]->producer = NULL;
+ mlt_service_unlock( MLT_PRODUCER_SERVICE( p ) );
+ mlt_producer_close( p );
+ }
+ // If p is null, the lock will not have been "taken"
+ }
+ }
+
// Get the eof handling
char *eof = mlt_properties_get( properties, "eof" );