fingerprint->push_back( '(' );
fingerprint->append( mlt_properties_get( MLT_SERVICE_PROPERTIES( service ), "_unique_id" ) );
+
+ const char* effect_fingerprint = mlt_properties_get( MLT_SERVICE_PROPERTIES( service ), "_movit fingerprint" );
+ if ( effect_fingerprint ) {
+ fingerprint->push_back( '[' );
+ fingerprint->append( effect_fingerprint );
+ fingerprint->push_back( ']' );
+ }
+
bool disable = mlt_properties_get_int( MLT_SERVICE_PROPERTIES( service ), "movit.parms.int.disable" );
if ( disable ) {
fingerprint->push_back( 'd' );
GlslManager::get_instance()->lock_service( frame );
mlt_position position = mlt_filter_get_position( filter, frame );
mlt_position length = mlt_filter_get_length2( filter, frame );
- mlt_properties_set_int( properties, "movit.parms.int.matrix_size",
- mlt_properties_anim_get_int( properties, "matrix_size", position, length ) );
+ int matrix_size = mlt_properties_anim_get_int( properties, "matrix_size", position, length );
+ mlt_properties_set_int( properties, "movit.parms.int.matrix_size", matrix_size );
mlt_properties_set_double( properties, "movit.parms.float.circle_radius",
mlt_properties_anim_get_double( properties, "circle_radius", position, length ) );
mlt_properties_set_double( properties, "movit.parms.float.gaussian_radius",
mlt_properties_anim_get_double( properties, "correlation", position, length ) );
mlt_properties_set_double( properties, "movit.parms.float.noise",
mlt_properties_anim_get_double( properties, "noise", position, length ) );
+
+ // DeconvolutionSharpenEffect compiles the matrix size into the shader,
+ // so we need to regenerate the chain if this changes.
+ char fingerprint[256];
+ snprintf( fingerprint, sizeof( fingerprint ), "s=%d", matrix_size );
+ mlt_properties_set( properties, "_movit fingerprint", fingerprint );
+
GlslManager::get_instance()->unlock_service( frame );
*format = mlt_image_glsl;
int error = mlt_frame_get_image( frame, image, format, width, height, writable );