]> git.sesse.net Git - mlt/blobdiff - src/modules/core/filter_watermark.c
Add service locks for parallelism.
[mlt] / src / modules / core / filter_watermark.c
index 8136958c8388613d1ea7a5fd65803dcba511a64a..bb9ffd889ac7924d68fbb3f8a7819d65e5ee3dc3 100644 (file)
@@ -42,6 +42,8 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format
        // Get the properties of the filter
        mlt_properties properties = MLT_FILTER_PROPERTIES( this );
 
+       mlt_service_lock( MLT_FILTER_SERVICE( this ) );
+
        // Get the producer from the filter
        mlt_producer producer = mlt_properties_get_data( properties, "producer", NULL );
 
@@ -115,6 +117,8 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format
                mlt_properties_pass( producer_properties, properties, "producer." );
        }
 
+       mlt_service_unlock( MLT_FILTER_SERVICE( this ) );
+
        // Only continue if we have both producer and composite
        if ( composite != NULL && producer != NULL )
        {
@@ -147,7 +151,7 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format
                        mlt_frame_set_position( b_frame, position );
                        mlt_properties_set_double( b_props, "consumer_aspect_ratio", mlt_properties_get_double( a_props, "consumer_aspect_ratio" ) );
                        mlt_properties_set_int( b_props, "consumer_deinterlace", mlt_properties_get_int( a_props, "consumer_deinterlace" ) || mlt_properties_get_int( properties, "deinterlace" ) );
-                       mlt_properties_set_int( b_props, "output_ratio", mlt_properties_get_double( a_props, "output_ratio" ) );
+                       mlt_properties_set_double( b_props, "output_ratio", mlt_properties_get_double( a_props, "output_ratio" ) );
 
                        // Check for the special case - no aspect ratio means no problem :-)
                        if ( mlt_frame_get_aspect_ratio( b_frame ) == 0 )
@@ -165,6 +169,7 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format
                                mlt_properties_set_int( b_props, "distort", 1 );
                        }
 
+                       *format = mlt_image_yuv422;
                        if ( mlt_properties_get_int( properties, "reverse" ) == 0 )
                        {
                                // Apply all filters that are attached to this filter to the b frame
@@ -181,7 +186,7 @@ static int filter_get_image( mlt_frame frame, uint8_t **image, mlt_image_format
                                char temp[ 132 ];
                                int count = 0;
                                uint8_t *alpha = NULL;
-                               char *rescale = mlt_properties_get( a_props, "rescale.interp" );
+                               const char *rescale = mlt_properties_get( a_props, "rescale.interp" );
                                if ( rescale == NULL || !strcmp( rescale, "none" ) )
                                        rescale = "hyper";
                                mlt_transition_process( composite, b_frame, frame );
@@ -253,7 +258,7 @@ mlt_filter filter_watermark_init( mlt_profile profile, mlt_service_type type, co
        {
                mlt_properties properties = MLT_FILTER_PROPERTIES( this );
                this->process = filter_process;
-               mlt_properties_set( properties, "factory", "fezzik" );
+               mlt_properties_set( properties, "factory", mlt_environment( "MLT_PRODUCER" ) );
                if ( arg != NULL )
                        mlt_properties_set( properties, "resource", arg );
                // Ensure that attached filters are handled privately