]> git.sesse.net Git - mlt/commitdiff
Add property animation to the other movit services.
authorDan Dennedy <dan@dennedy.org>
Sat, 1 Jun 2013 06:40:50 +0000 (23:40 -0700)
committerDan Dennedy <dan@dennedy.org>
Sat, 1 Jun 2013 06:40:50 +0000 (23:40 -0700)
18 files changed:
src/modules/opengl/filter_deconvolution_sharpen.cpp
src/modules/opengl/filter_deconvolution_sharpen.yml
src/modules/opengl/filter_lift_gamma_gain.cpp
src/modules/opengl/filter_lift_gamma_gain.yml
src/modules/opengl/filter_movit_diffusion.cpp
src/modules/opengl/filter_movit_diffusion.yml
src/modules/opengl/filter_movit_glow.cpp
src/modules/opengl/filter_movit_glow.yml
src/modules/opengl/filter_movit_opacity.cpp
src/modules/opengl/filter_movit_opacity.yml
src/modules/opengl/filter_movit_saturation.cpp
src/modules/opengl/filter_movit_saturation.yml
src/modules/opengl/filter_movit_vignette.cpp
src/modules/opengl/filter_movit_vignette.yml
src/modules/opengl/filter_white_balance.cpp
src/modules/opengl/filter_white_balance.yml
src/modules/opengl/transition_movit_mix.cpp
src/modules/opengl/transition_movit_mix.yml

index 546c489f915d12d1672b53938dfb5e11b1d85379..f93a4674e87b06cb2381a22a447043e978d18441 100644 (file)
 #include "glsl_manager.h"
 #include <movit/deconvolution_sharpen_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 );
+       GlslManager::get_instance()->lock_service( frame );
+       Effect* effect = GlslManager::get_effect( 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_int( "matrix_size",
+                       mlt_properties_anim_get_int( properties, "matrix_size", position, length ) );
+               ok |= effect->set_float( "cirlce_radius",
+                       mlt_properties_anim_get_double( properties, "circle_radius", position, length ) );
+               ok |= effect->set_float( "gaussian_radius",
+                       mlt_properties_anim_get_double( properties, "gaussian_radius", position, length ) );
+               ok |= effect->set_float( "correlation",
+                       mlt_properties_anim_get_double( properties, "correlation", position, length ) );
+               ok |= effect->set_float( "noise",
+                       mlt_properties_anim_get_double( properties, "noise", 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 );
+}
+
 static mlt_frame process( mlt_filter filter, mlt_frame frame )
 {
        if ( !mlt_frame_is_test_card( frame ) ) {
-               Effect* effect = GlslManager::get_effect( filter, frame );
-               if ( !effect )
+               if ( !GlslManager::get_effect( filter, frame ) )
                        GlslManager::add_effect( filter, frame, new DeconvolutionSharpenEffect() );
-               if ( effect ) {
-                       mlt_properties filter_props = MLT_FILTER_PROPERTIES( filter );
-                       bool ok = effect->set_int( "matrix_size", mlt_properties_get_int( filter_props, "matrix_size" ) );
-                       ok |= effect->set_float( "circle_radius", mlt_properties_get_double( filter_props, "circle_radius" ) );
-                       ok |= effect->set_float( "gaussian_radius", mlt_properties_get_double( filter_props, "gaussian_radius" ) );
-                       ok |= effect->set_float( "correlation", mlt_properties_get_double( filter_props, "correlation" ) );
-                       ok |= effect->set_float( "noise", mlt_properties_get_double( filter_props, "noise" ) );
-                       assert(ok);
-               }
        }
+       mlt_frame_push_service( frame, filter );
+       mlt_frame_push_get_image( frame, get_image );
        return frame;
 }
 
index 825fc52ef18e13ee0c1d33ec3c10d229f1f3d107..86b4262589928e40cec6c8da7cfcb922d94612f3 100644 (file)
@@ -26,28 +26,32 @@ parameters:
     minimum: 0
     maximum: 10
     default: 5
+    mutable: yes
 
   - identifier: circle_radius
     title: Circle Radius
     type: float
     minimum: 0
     default: 2
+    mutable: yes
 
   - identifier: gaussian_radius
     title: Gaussian Radius
     type: float
     minimum: 0
     default: 0
+    mutable: yes
 
   - identifier: correlation
     title: Correlation
     type: float
     minimum: 0
     default: 0.95
+    mutable: yes
 
   - identifier: noise
     title: Noise Level
     type: float
     minimum: 0
     default: 0.01
-
+    mutable: yes
index 8129063ab824e9ba0cd2e57bf5a43828fb6b45ef..5bc3a6a26c05d5218dd487337748566ecec690c4 100644 (file)
 #include "glsl_manager.h"
 #include <movit/lift_gamma_gain_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 );
+       GlslManager::get_instance()->lock_service( frame );
+       Effect* effect = GlslManager::get_effect( filter, frame );
+       if ( effect ) {
+               mlt_position position = mlt_filter_get_position( filter, frame );
+               mlt_position length = mlt_filter_get_length2( filter, frame );
+               RGBTriplet triplet(
+                       mlt_properties_anim_get_double( properties, "lift_r", position, length ),
+                       mlt_properties_anim_get_double( properties, "lift_g", position, length ),
+                       mlt_properties_anim_get_double( properties, "lift_b", position, length )
+               );
+               bool ok = effect->set_vec3( "lift", (float*) &triplet );
+               triplet.r = mlt_properties_anim_get_double( properties, "gamma_r", position, length );
+               triplet.g = mlt_properties_anim_get_double( properties, "gamma_g", position, length );
+               triplet.b = mlt_properties_anim_get_double( properties, "gamma_b", position, length );
+               ok |= effect->set_vec3( "gamma", (float*) &triplet );
+               triplet.r = mlt_properties_anim_get_double( properties, "gain_r", position, length );
+               triplet.g = mlt_properties_anim_get_double( properties, "gain_g", position, length );
+               triplet.b = mlt_properties_anim_get_double( properties, "gain_b", position, length );
+               ok |= effect->set_vec3( "gain", (float*) &triplet );
+               assert(ok);
+       }
+       GlslManager::get_instance()->unlock_service( frame );
+       *format = mlt_image_glsl;
+       return mlt_frame_get_image( frame, image, format, width, height, writable );
+}
+
 static mlt_frame process( mlt_filter filter, mlt_frame frame )
 {
        if ( !mlt_frame_is_test_card( frame ) ) {
-               Effect* effect = GlslManager::get_effect( filter, frame );
-               if ( !effect )
-                       effect = GlslManager::add_effect( filter, frame, new LiftGammaGainEffect );
-               if ( effect ) {
-                       mlt_properties filter_props = MLT_FILTER_PROPERTIES( filter );
-                       RGBTriplet triplet(
-                               mlt_properties_get_double( filter_props, "lift_r" ),
-                               mlt_properties_get_double( filter_props, "lift_g" ),
-                               mlt_properties_get_double( filter_props, "lift_b" )
-                       );
-                       bool ok = effect->set_vec3( "lift", (float*) &triplet );
-                       triplet.r = mlt_properties_get_double( filter_props, "gamma_r" );
-                       triplet.g = mlt_properties_get_double( filter_props, "gamma_g" );
-                       triplet.b = mlt_properties_get_double( filter_props, "gamma_b" );
-                       ok |= effect->set_vec3( "gamma", (float*) &triplet );
-                       triplet.r = mlt_properties_get_double( filter_props, "gain_r" );
-                       triplet.g = mlt_properties_get_double( filter_props, "gain_g" );
-                       triplet.b = mlt_properties_get_double( filter_props, "gain_b" );
-                       ok |= effect->set_vec3( "gain", (float*) &triplet );
-                       assert(ok);
-               }
+               if ( !GlslManager::get_effect( filter, frame ) )
+                       GlslManager::add_effect( filter, frame, new LiftGammaGainEffect );
        }
+       mlt_frame_push_service( frame, filter );
+       mlt_frame_push_get_image( frame, get_image );
        return frame;
 }
 
index 09dfed259634259bceffad5ddd5a89623ddf6abc..fcc55b3d023a4321f3a79c8a6f1d0ed64265fe8d 100644 (file)
@@ -30,51 +30,60 @@ parameters:
     type: float
     minimum: 0.0
     default: 0.0
+    mutable: yes
 
   - identifier: lift_g
     title: Lift Green
     type: float
     minimum: 0.0
     default: 0.0
+    mutable: yes
 
   - identifier: lift_b
     title: Lift Blue
     type: float
     minimum: 0.0
     default: 0.0
+    mutable: yes
 
   - identifier: gamma_r
     title: Gamma Red
     type: float
     minimum: 0.0
     default: 1.0
+    mutable: yes
 
   - identifier: gamma_g
     title: Gamma Green
     type: float
     minimum: 0.0
     default: 1.0
+    mutable: yes
 
   - identifier: gamma_b
     title: Gamma Blue
     type: float
     minimum: 0.0
     default: 1.0
+    mutable: yes
 
   - identifier: gain_r
     title: Gain Red
     type: float
     minimum: 0.0
     default: 1.0
+    mutable: yes
 
   - identifier: gain_g
     title: Gain Green
     type: float
     minimum: 0.0
     default: 1.0
+    mutable: yes
 
   - identifier: gain_b
     title: Gain Blue
     type: float
     minimum: 0.0
     default: 1.0
+    mutable: yes
index 31d705bd3e568fae822b6179a27be17b7e662120..7434937b55691ce5f03da7bc3b6cbdd1ea934c2d 100644 (file)
 #include "glsl_manager.h"
 #include <movit/diffusion_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 );
+       GlslManager::get_instance()->lock_service( frame );
+       Effect* effect = GlslManager::get_effect( 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( "radius",
+                       mlt_properties_anim_get_double( properties, "radius", position, length ) );
+               ok |= effect->set_float( "blurred_mix_amount",
+                       mlt_properties_anim_get_double( properties, "mix", 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 );
+}
+
 static mlt_frame process( mlt_filter filter, mlt_frame frame )
 {
        if ( !mlt_frame_is_test_card( frame ) ) {
-               Effect* effect = GlslManager::get_effect( filter, frame );
-               if ( !effect )
-                       effect = GlslManager::add_effect( filter, frame, new DiffusionEffect() );
-               if ( effect ) {
-                       mlt_properties filter_props = MLT_FILTER_PROPERTIES( filter );
-                       bool ok = effect->set_float( "radius", mlt_properties_get_double( filter_props, "radius" ) );
-                       ok |= effect->set_float( "blurred_mix_amount", mlt_properties_get_double( filter_props, "mix" ) );
-                       assert(ok);
-               }
+               if ( !GlslManager::get_effect( filter, frame ) )
+                       GlslManager::add_effect( filter, frame, new DiffusionEffect() );
        }
+       mlt_frame_push_service( frame, filter );
+       mlt_frame_push_get_image( frame, get_image );
        return frame;
 }
 
index e97d123398455e62dea9f294957ab0f9eeb78ebf..6ce14bf433f4ab7880914a18cd7a5c1da5d6487b 100644 (file)
@@ -26,6 +26,7 @@ parameters:
     type: float
     minimum: 0.0
     default: 3.0
+    mutable: yes
 
   - identifier: mix
     title: Blurriness
@@ -33,3 +34,4 @@ parameters:
     minimum: 0.0
     maximum: 1.0
     default: 0.3
+    mutable: yes
index 4026477aee32b560f8ecef1a6a14b67e84f2de33..b333359771e6f4a639085c12784a22719e11a0e8 100644 (file)
 #include "glsl_manager.h"
 #include <movit/glow_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 );
+       GlslManager::get_instance()->lock_service( frame );
+       Effect* effect = GlslManager::get_effect( 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( "radius",
+                       mlt_properties_anim_get_double( properties, "radius", position, length ) );
+               ok |= effect->set_float( "blurred_mix_amount",
+                       mlt_properties_anim_get_double( properties, "blur_mix", position, length ) );
+               ok |= effect->set_float( "highlight_cutoff",
+                       mlt_properties_anim_get_double( properties, "highlight_cutoff", 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 );
+}
+
 static mlt_frame process( mlt_filter filter, mlt_frame frame )
 {
        if ( !mlt_frame_is_test_card( frame ) ) {
-               Effect* effect = GlslManager::get_effect( filter, frame );
-               if ( !effect )
-                       effect = GlslManager::add_effect( filter, frame, new GlowEffect() );
-               if ( effect ) {
-                       mlt_properties filter_props = MLT_FILTER_PROPERTIES( filter );
-                       bool ok = effect->set_float( "radius", mlt_properties_get_double( filter_props, "radius" ) );
-                       ok |= effect->set_float( "blurred_mix_amount", mlt_properties_get_double( filter_props, "blur_mix" ) );
-                       ok |= effect->set_float( "highlight_cutoff", mlt_properties_get_double( filter_props, "highlight_cutoff" ) );
-                       assert(ok);
-               }
+               if ( !GlslManager::get_effect( filter, frame ) )
+                       GlslManager::add_effect( filter, frame, new GlowEffect() );
        }
+       mlt_frame_push_service( frame, filter );
+       mlt_frame_push_get_image( frame, get_image );
        return frame;
 }
 
index 258f68327f7d4ec12321dd47f4f8dee64111b691..6a3028e304b38140f27636d20a997e32ac189735 100644 (file)
@@ -19,6 +19,7 @@ parameters:
     type: float
     minimum: 0.0
     default: 20.0
+    mutable: yes
 
   - identifier: blur_mix
     title: Highlight Blurriness
@@ -26,6 +27,7 @@ parameters:
     minimum: 0.0
     maximum: 1.0
     default: 1.0
+    mutable: yes
 
   - identifier: highlight_cutoff
     title: Highlight Cutoff Threshold
@@ -33,3 +35,4 @@ parameters:
     minimum: 0.0
     maximum: 1.0
     default: 0.2
+    mutable: yes
index 8586182a9a0f2c2c3913597463506d821dd5a040..d0a815350c10dba3fa6e5adaf3f419dcae4a0fda 100644 (file)
@@ -31,7 +31,10 @@ static int get_image( mlt_frame frame, uint8_t **image, mlt_image_format *format
        GlslManager::get_instance()->lock_service( frame );
        Effect* effect = GlslManager::get_effect( filter, frame );
        if ( effect ) {
-               bool ok = effect->set_float( "strength_first", mlt_properties_get_double( properties, "opacity" ) );
+               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 );
index fa82b60d8272fb0681227bebb78de3b178c4dcd7..cf4d1d65dac2107114ede725c6ffd7c6080bf0cb 100644 (file)
@@ -23,3 +23,4 @@ parameters:
     minimum: 0
     maximum: 1
     default: 1
+    mutable: yes
index 1e8f9211fb1da791fd7f119247dfd2c433e7a493..9e77c10ed25611a8b8dcbf954310bac155a21527 100644 (file)
 #include "glsl_manager.h"
 #include <movit/saturation_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 );
+       GlslManager::get_instance()->lock_service( frame );
+       Effect* effect = GlslManager::get_effect( 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( "saturation",
+                       mlt_properties_anim_get_double( properties, "saturation", 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 );
+}
+
 static mlt_frame process( mlt_filter filter, mlt_frame frame )
 {
        if ( !mlt_frame_is_test_card( frame ) ) {
-               Effect* effect = GlslManager::get_effect( filter, frame );
-               if ( !effect )
-                       effect = GlslManager::add_effect( filter, frame, new SaturationEffect() );
-               if ( effect ) {
-                       mlt_properties filter_props = MLT_FILTER_PROPERTIES( filter );
-                       bool ok = effect->set_float( "saturation", mlt_properties_get_double( filter_props, "saturation" ) );
-                       assert(ok);
-               }
+               if ( !GlslManager::get_effect( filter, frame ) )
+                       GlslManager::add_effect( filter, frame, new SaturationEffect() );
        }
+       mlt_frame_push_service( frame, filter );
+       mlt_frame_push_get_image( frame, get_image );
        return frame;
 }
 
index 535af59ac1dbb452f34b1edee22684b1da377252..6681222c882936c2ff63aec4d436f1de9af36660 100644 (file)
@@ -22,3 +22,4 @@ parameters:
     type: float
     minimum: 0
     default: 1
+    mutable: yes
index b0e33f7eb69f65ab44fbdc844efe8fc405be49d7..7259d9bf0be0c566c3e1d507b52152c375ab0cc3 100644 (file)
 #include "glsl_manager.h"
 #include <movit/vignette_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 );
+       GlslManager::get_instance()->lock_service( frame );
+       Effect* effect = GlslManager::get_effect( 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( "radius",
+                       mlt_properties_anim_get_double( properties, "radius", position, length ) );
+               ok |= effect->set_float( "inner_radius",
+                       mlt_properties_anim_get_double( properties, "inner_radius", 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 );
+}
+
 static mlt_frame process( mlt_filter filter, mlt_frame frame )
 {
        if ( !mlt_frame_is_test_card( frame ) ) {
-               Effect* effect = GlslManager::get_effect( filter, frame );
-               if ( !effect ) {
-                       effect = GlslManager::add_effect( filter, frame, new VignetteEffect() );
-               }
-               if ( effect ) {
-                       mlt_properties filter_props = MLT_FILTER_PROPERTIES( filter );
-                       bool ok = effect->set_float( "radius", mlt_properties_get_double( filter_props, "radius" ) );
-                       ok |= effect->set_float( "inner_radius", mlt_properties_get_double( filter_props, "inner_radius" ) );
-                       assert(ok);
-               }
+               if ( !GlslManager::get_effect( filter, frame ) )
+                       GlslManager::add_effect( filter, frame, new VignetteEffect() );
        }
+       mlt_frame_push_service( frame, filter );
+       mlt_frame_push_get_image( frame, get_image );
        return frame;
 }
 
index 3355bd30b23f33f77a1fe59adec4a11b685d38b7..409b8eb0b9f0858f90bd872926af72f6adbb2764 100644 (file)
@@ -20,6 +20,7 @@ parameters:
     minimum: 0.0
     maximum: 1.0
     default: 0.3
+    mutable: yes
 
   - identifier: inner_radius
     title: Inner Radius
@@ -27,3 +28,4 @@ parameters:
     minimum: 0.0
     maximum: 1.0
     default: 0.3
+    mutable: yes
index e3f1d9c5352df84b576c17b555b093a273d35e9f..1b458e7dab6ef12b6d04aba3093decd43166308b 100644 (file)
 #include "glsl_manager.h"
 #include <movit/white_balance_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 );
+       GlslManager::get_instance()->lock_service( frame );
+       Effect* effect = GlslManager::get_effect( filter, frame );
+       if ( effect ) {
+               mlt_position position = mlt_filter_get_position( filter, frame );
+               mlt_position length = mlt_filter_get_length2( filter, frame );
+               int color_int = mlt_properties_anim_get_int( properties, "neutral_color", position, length );
+               RGBTriplet color(
+                       float((color_int >> 24) & 0xff) / 255.0f,
+                       float((color_int >> 16) & 0xff) / 255.0f,
+                       float((color_int >> 8) & 0xff) / 255.0f
+               );
+               bool ok = effect->set_vec3( "neutral_color", (float*) &color );
+               ok |= effect->set_float( "output_color_temperature",
+                       mlt_properties_anim_get_double( properties, "color_temperature", 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 );
+}
+
 static mlt_frame process( mlt_filter filter, mlt_frame frame )
 {
        if ( !mlt_frame_is_test_card( frame ) ) {
-               Effect* effect = GlslManager::get_effect( filter, frame );
-               if ( !effect )
-                       effect = GlslManager::add_effect( filter, frame, new WhiteBalanceEffect );
-               if ( effect ) {
-                       mlt_properties filter_props = MLT_FILTER_PROPERTIES( filter );
-                       int color_int = mlt_properties_get_int( filter_props, "neutral_color" );
-                       RGBTriplet color(
-                               float((color_int >> 24) & 0xff) / 255.0f,
-                               float((color_int >> 16) & 0xff) / 255.0f,
-                               float((color_int >> 8) & 0xff) / 255.0f
-                       );
-                       bool ok = effect->set_vec3( "neutral_color", (float*) &color );
-                       ok |= effect->set_float( "output_color_temperature", mlt_properties_get_double( filter_props, "color_temperature" ) );
-                       assert(ok);
-               }
+               if ( !GlslManager::get_effect( filter, frame ) )
+                       GlslManager::add_effect( filter, frame, new WhiteBalanceEffect );
        }
+       mlt_frame_push_service( frame, filter );
+       mlt_frame_push_get_image( frame, get_image );
        return frame;
 }
 
index 6c63d335b2a8d9cdd59d1ccfe057f0a439517b72..0d1b6b4db7ece04966f647e2122570915e55d145 100644 (file)
@@ -17,6 +17,7 @@ parameters:
     type: string
     widget: color
     default: 0x7f7f7f00
+    mutable: yes
 
   - identifier: color_temperature
     title: Color Temperature
@@ -25,3 +26,4 @@ parameters:
     maximum: 15000.0
     default: 6500.0
     unit: Kelvin
+    mutable: yes
index 176798a52440ea3f9bb06a09009058fe1993d047..e05c7eab829ed07d0c770f5d46a34033bb07d03c 100644 (file)
@@ -61,9 +61,11 @@ static int get_image( mlt_frame a_frame, uint8_t **image, mlt_image_format *form
        }
 
        // Get the transition parameters
+       mlt_position position = mlt_transition_get_position( transition, a_frame );
+       mlt_position length = mlt_transition_get_length( transition );
        int reverse = mlt_properties_get_int( properties, "reverse" );
        double mix = mlt_properties_get( properties, "mix" ) ?
-               mlt_properties_get_double( properties, "mix" ) :
+               mlt_properties_anim_get_double( properties, "mix", position, length ) :
                mlt_transition_get_progress( transition, a_frame );
        double inverse = 1.0 - mix;
 
index f814850798853731ed2ba9d6aacd3ab49951b81e..b0711ed046c380c88286d62992042caaaf8e51fd 100644 (file)
@@ -18,6 +18,7 @@ parameters:
     type: float
     minimum: 0
     maximum: 1
+    mutable: yes
 
   - identifier: mix
     title: Mix Level
@@ -25,6 +26,7 @@ parameters:
     type: float
     minimum: 0
     maximum: 1
+    mutable: yes
 
   - identifier: reverse
     title: Reverse