mlt_log_debug( MLT_FILTER_SERVICE(filter), "%dx%d -> %dx%d\n", *width, *height, owidth, oheight);
+ GlslManager::get_instance()->lock_service( frame );
Effect* effect = GlslManager::get_effect( filter, frame );
if ( effect ) {
bool ok = effect->set_int( "width", owidth );
*width = owidth;
*height = oheight;
}
+ GlslManager::get_instance()->unlock_service( frame );
}
return error;
{
mlt_filter filter = (mlt_filter) mlt_frame_pop_service( frame );
mlt_properties properties = MLT_FILTER_PROPERTIES( filter );
+ GlslManager::get_instance()->lock_service( frame );
Effect* effect = GlslManager::get_effect( filter, frame );
- bool ok = effect->set_float( "strength_first", mlt_properties_get_double( properties, "opacity" ) );
- assert(ok);
+ if ( effect ) {
+ bool ok = effect->set_float( "strength_first", mlt_properties_get_double( properties, "opacity" ) );
+ assert(ok);
+ }
+ GlslManager::get_instance()->unlock_service( frame );
*format = mlt_image_glsl;
return mlt_frame_get_image( frame, image, format, width, height, writable );
}
*format = mlt_image_glsl;
error = mlt_frame_get_image( frame, image, format, &iwidth, &iheight, writable );
if ( !error ) {
+ GlslManager::get_instance()->lock_service( frame );
Effect* effect = GlslManager::get_effect( filter, frame );
if ( effect ) {
bool ok = effect->set_int( "width", owidth );
*width = owidth;
*height = oheight;
}
+ GlslManager::get_instance()->unlock_service( frame );
}
return error;
}
if ( !error ) {
+ GlslManager::get_instance()->lock_service( frame );
Effect* effect = GlslManager::get_effect( filter, frame );
if ( effect ) {
bool ok = effect->set_int( "width", *width );
ok |= effect->set_float( "top", geometry_item.y );
assert(ok);
}
+ GlslManager::get_instance()->unlock_service( frame );
}
return error;
// Get the movit objects
mlt_service service = MLT_TRANSITION_SERVICE( transition );
+ mlt_service_lock( service );
EffectChain* chain = GlslManager::get_chain( service );
Effect* effect = (Effect*) mlt_properties_get_data( properties, "movit effect", NULL );
MltInput* a_input = GlslManager::get_input( service );
MltInput* b_input = (MltInput*) mlt_properties_get_data( properties, "movit input B", NULL );
mlt_image_format output_format = *format;
+ if ( !chain || !a_input ) {
+ mlt_service_unlock( service );
+ return 2;
+ }
+
// Get the transition parameters
int reverse = mlt_properties_get_int( properties, "reverse" );
double mix = mlt_properties_get( properties, "mix" ) ?
}
}
if ( fbo ) GlslManager::release_fbo( fbo );
+ mlt_service_unlock( service );
return error;
}
// Get the movit objects
mlt_service service = MLT_TRANSITION_SERVICE( transition );
+ mlt_service_lock( service );
EffectChain* chain = GlslManager::get_chain( service );
MltInput* a_input = GlslManager::get_input( service );
MltInput* b_input = (MltInput*) mlt_properties_get_data( properties, "movit input B", NULL );
mlt_image_format output_format = *format;
+ if ( !chain || !a_input ) {
+ mlt_service_unlock( service );
+ return 2;
+ }
+
// Get the frames' textures
GLuint* texture_id[2] = {0, 0};
*format = mlt_image_glsl_texture;
}
}
if ( fbo ) GlslManager::release_fbo( fbo );
+ mlt_service_lock( service );
return error;
}