void ServiceManager::onConsumerStopping() { mlt_events_disconnect(event, this); event = 0; if (effects) effects->renderComplete(false); }
int mlt_service_detach( mlt_service self, mlt_filter filter ) { int error = self == NULL || filter == NULL; if ( error == 0 ) { int i = 0; mlt_service_base *base = self->local; mlt_properties properties = MLT_SERVICE_PROPERTIES( self ); for ( i = 0; i < base->filter_count; i ++ ) if ( base->filters[ i ] == filter ) break; if ( i < base->filter_count ) { base->filters[ i ] = NULL; for ( i ++ ; i < base->filter_count; i ++ ) base->filters[ i - 1 ] = base->filters[ i ]; base->filter_count --; mlt_events_disconnect( MLT_FILTER_PROPERTIES( filter ), self ); mlt_filter_close( filter ); mlt_events_fire( properties, "service-changed", NULL ); } } return error; }
ServiceManager::~ServiceManager() { mlt_events_disconnect(event, this); if (effects) effects->destroy(); if (imageProducers) { for (std::vector<ImageProducer*>::iterator it = imageProducers->begin(); it != imageProducers->end(); it++) { delete *it; } delete imageProducers; } }