mlt_properties_set_int( MLT_FILTER_PROPERTIES( filter ), "_fezzik", 1 );
mlt_producer_attach( result, filter );
mlt_filter_close( filter );
- mlt_events_unblock( MLT_PRODUCER_PROPERTIES( result ), MLT_PRODUCER_PROPERTIES( result ) );
return result;
}
// We're done with the clone now
mlt_properties_set_data( parent_properties, "use_clone", NULL, 0, NULL, NULL );
+ // This is useful and required by always_active transitions to determine in/out points of the cut
+ if ( mlt_properties_get_data( MLT_FRAME_PROPERTIES( *frame ), "_producer", NULL ) == MLT_PRODUCER_SERVICE( parent ) )
+ mlt_properties_set_data( MLT_FRAME_PROPERTIES( *frame ), "_producer", this, 0, NULL, NULL );
+
mlt_properties_set_double( MLT_FRAME_PROPERTIES( *frame ), "_speed", speed );
mlt_producer_prepare_next( this );
}
}
else
{
+ int destroy = mlt_producer_is_cut( this );
+
#if _MLT_PRODUCER_CHECKS_ == 1
// Show debug info
mlt_properties_debug( MLT_PRODUCER_PROPERTIES( this ), "Producer closing", stderr );
#endif
mlt_service_close( &this->parent );
+
+ if ( destroy )
+ free( this );
}
}
}