]> git.sesse.net Git - mlt/blobdiff - src/modules/opengl/filter_movit_opacity.cpp
Change get_effect/add_effect to take in mlt_service.
[mlt] / src / modules / opengl / filter_movit_opacity.cpp
index 6a7333d17be4fa93cd3e611a5378496005b2608f..be80239d76f344182a71ba3aa3ec5215d3ff2361 100644 (file)
 #include <string.h>
 #include <assert.h>
 
-#include "glsl_manager.h"
+#include "filter_glsl_manager.h"
 #include <movit/mix_effect.h>
 
 static int get_image( mlt_frame frame, uint8_t **image, mlt_image_format *format, int *width, int *height, int writable )
 {
        mlt_filter filter = (mlt_filter) mlt_frame_pop_service( frame );
        mlt_properties properties = MLT_FILTER_PROPERTIES( filter );
-       Effect* effect = GlslManager::get_effect( filter, frame );
-       bool ok = effect->set_float( "strength_first", mlt_properties_get_double( properties, "opacity" ) );
-       assert(ok);
+       GlslManager::get_instance()->lock_service( frame );
+       Effect* effect = GlslManager::get_effect( MLT_FILTER_SERVICE( filter ), frame );
+       if ( effect ) {
+               mlt_position position = mlt_filter_get_position( filter, frame );
+               mlt_position length = mlt_filter_get_length2( filter, frame );
+               bool ok = effect->set_float( "strength_first",
+                       mlt_properties_anim_get_double( properties, "opacity", position, length ) );
+               assert(ok);
+       }
+       GlslManager::get_instance()->unlock_service( frame );
        *format = mlt_image_glsl;
        return mlt_frame_get_image( frame, image, format, width, height, writable );
 }
@@ -38,9 +45,9 @@ static int get_image( mlt_frame frame, uint8_t **image, mlt_image_format *format
 static mlt_frame process( mlt_filter filter, mlt_frame frame )
 {
        if ( !mlt_frame_is_test_card( frame ) ) {
-               Effect* effect = GlslManager::get_effect( filter, frame );
+               Effect* effect = GlslManager::get_effect( MLT_FILTER_SERVICE( filter ), frame );
                if ( !effect ) {
-                       effect = GlslManager::add_effect( filter, frame, new MixEffect, 0 );
+                       effect = GlslManager::add_effect( MLT_FILTER_SERVICE( filter ), frame, new MixEffect, 0 );
                        assert(effect);
                        bool ok = effect->set_float( "strength_first", 1.0f );
                        ok |= effect->set_float( "strength_second", 0.0f );