fingerprint->push_back( ')' );
}
+ GlslManager::get_effect_third_input( service, frame, &input_b, &frame_b );
+ if ( input_b ) {
+ fingerprint->push_back( '(' );
+ build_fingerprint( input_b, frame_b, fingerprint );
+ fingerprint->push_back( ')' );
+ }
+
fingerprint->push_back( '(' );
fingerprint->append( mlt_properties_get( MLT_SERVICE_PROPERTIES( service ), "_unique_id" ) );
GlslManager::set_effect( service, frame, NULL );
mlt_service input_a = GlslManager::get_effect_input( service, frame );
- mlt_service input_b;
- mlt_frame frame_b;
+ mlt_service input_b, input_c;
+ mlt_frame frame_b, frame_c;
GlslManager::get_effect_secondary_input( service, frame, &input_b, &frame_b );
+ GlslManager::get_effect_third_input( service, frame, &input_c, &frame_c );
Effect *effect_a = build_movit_chain( input_a, frame, chain );
- if ( input_b ) {
+ if ( input_c && input_b ) {
+ Effect *effect_b = build_movit_chain( input_b, frame_b, chain );
+ Effect *effect_c = build_movit_chain( input_c, frame_c, chain );
+ chain->effect_chain->add_effect( effect, effect_a, effect_b, effect_c );
+ } else if ( input_b ) {
Effect *effect_b = build_movit_chain( input_b, frame_b, chain );
chain->effect_chain->add_effect( effect, effect_a, effect_b );
} else {
if ( input_b ) {
dispose_movit_effects( input_b, frame_b );
}
+ GlslManager::get_effect_third_input( service, frame, &input_b, &frame_b );
+ if ( input_b ) {
+ dispose_movit_effects( input_b, frame_b );
+ }
}
static void finalize_movit_chain( mlt_service leaf_service, mlt_frame frame )
if ( input_b ) {
set_movit_parameters( chain, input_b, frame_b );
}
-
+ GlslManager::get_effect_third_input( service, frame, &input_b, &frame_b );
+ if ( input_b ) {
+ set_movit_parameters( chain, input_b, frame_b );
+ }
+
mlt_properties properties = MLT_SERVICE_PROPERTIES( service );
int count = mlt_properties_count( properties );
for (int i = 0; i < count; ++i) {
const char *name = mlt_properties_get_name( properties, i );
- if (strncmp(name, "movit.parms.float.", strlen("movit.parms.float.")) == 0) {
+ if (strncmp(name, "movit.parms.float.", strlen("movit.parms.float.")) == 0 &&
+ mlt_properties_get_value( properties, i )) {
bool ok = effect->set_float(name + strlen("movit.parms.float."),
mlt_properties_get_double( properties, name ));
assert(ok);
}
- if (strncmp(name, "movit.parms.int.", strlen("movit.parms.int.")) == 0) {
+ if (strncmp(name, "movit.parms.int.", strlen("movit.parms.int.")) == 0 &&
+ mlt_properties_get_value( properties, i )) {
bool ok = effect->set_int(name + strlen("movit.parms.int."),
mlt_properties_get_int( properties, name ));
assert(ok);
}
if (strncmp(name, "movit.parms.vec3.", strlen("movit.parms.vec3.")) == 0 &&
- strcmp(name + strlen(name) - 3, "[0]") == 0) {
+ strcmp(name + strlen(name) - 3, "[0]") == 0 &&
+ mlt_properties_get_value( properties, i )) {
float val[3];
char *name_copy = strdup(name);
char *index_char = name_copy + strlen(name_copy) - 2;
free(name_copy);
}
if (strncmp(name, "movit.parms.vec4.", strlen("movit.parms.vec4.")) == 0 &&
- strcmp(name + strlen(name) - 3, "[0]") == 0) {
+ strcmp(name + strlen(name) - 3, "[0]") == 0 &&
+ mlt_properties_get_value( properties, i )) {
float val[4];
char *name_copy = strdup(name);
char *index_char = name_copy + strlen(name_copy) - 2;
if ( input_b ) {
dispose_pixel_pointers( chain, input_b, frame_b );
}
+ GlslManager::get_effect_third_input( service, frame, &input_b, &frame_b );
+ if ( input_b ) {
+ dispose_pixel_pointers( chain, input_b, frame_b );
+ }
}
static int movit_render( EffectChain *chain, mlt_frame frame, mlt_image_format *format, mlt_image_format output_format, int width, int height, uint8_t **image )