MLT_REGISTER( filter_type, "resize", filter_resize_init );
MLT_REGISTER( filter_type, "transition", filter_transition_init );
MLT_REGISTER( filter_type, "watermark", filter_watermark_init );
+ MLT_REGISTER( producer_type, "abnormal", producer_loader_init );
MLT_REGISTER( producer_type, "color", producer_colour_init );
MLT_REGISTER( producer_type, "colour", producer_colour_init );
MLT_REGISTER( producer_type, "consumer", producer_consumer_init );
properties = MLT_PRODUCER_PROPERTIES( producer );
// Attach filters if we have a producer and it isn't already xml'd :-)
- if ( producer != NULL && mlt_properties_get( properties, "xml" ) == NULL && \
- mlt_properties_get( properties, "_xml" ) == NULL && \
+ if ( producer && strcmp( id, "abnormal" ) &&
+ mlt_properties_get( properties, "xml" ) == NULL &&
+ mlt_properties_get( properties, "_xml" ) == NULL &&
mlt_properties_get( properties, "loader_normalised" ) == NULL )
attach_normalisers( profile, producer );
*image = image_copy;
mlt_properties_set_data( frame_properties, "image", image_copy, size, ( mlt_destructor )mlt_pool_release, NULL );
- // Make sure that no further scaling is done
- mlt_properties_set( frame_properties, "rescale.interps", "none" );
- mlt_properties_set( frame_properties, "scale", "off" );
+ *width = mlt_properties_get_int( properties, "_output_width" );
+ *height = mlt_properties_get_int( properties, "_output_height" );
+ *format = mlt_properties_get_int( properties, "_output_format" );
+
return 0;
}
memcpy( output, first_image, size );
// Let someone else clean up
mlt_properties_set_data( properties, "output_buffer", output, size, mlt_pool_release, NULL );
+ mlt_properties_set_int( properties, "_output_width", *width );
+ mlt_properties_set_int( properties, "_output_height", *height );
+ mlt_properties_set_int( properties, "_output_format", *format );
}
*image = image_copy;
mlt_properties_set_data( frame_properties, "image", *image, size, ( mlt_destructor )mlt_pool_release, NULL );
- // Make sure that no further scaling is done
- mlt_properties_set( frame_properties, "rescale.interps", "none" );
- mlt_properties_set( frame_properties, "scale", "off" );
-
return 0;
}
// Give the returned frame temporal identity
mlt_frame_set_position( *frame, mlt_producer_position( this ) );
+
+ mlt_properties_set_int( MLT_FRAME_PROPERTIES(*frame), "real_width", mlt_properties_get_int( MLT_PRODUCER_PROPERTIES(this), "width" ) );
+ mlt_properties_set_int( MLT_FRAME_PROPERTIES(*frame), "real_height", mlt_properties_get_int( MLT_PRODUCER_PROPERTIES(this), "height" ) );
+ mlt_properties_pass_list( MLT_FRAME_PROPERTIES(*frame), MLT_PRODUCER_PROPERTIES(this), "width, height, aspect_ratio" );
}
return 0;
*ptr = '\0';
}
- real_producer = mlt_factory_producer( profile, NULL, props );
+ real_producer = mlt_factory_producer( profile, "abnormal", props );
free( props );
if (speed == 0.0) speed = 1.0;
mlt_properties_set_data( properties, "producer", real_producer, 0, ( mlt_destructor )mlt_producer_close, NULL );
// Grab some stuff from the real_producer
- mlt_properties_pass_list( properties, MLT_PRODUCER_PROPERTIES( real_producer ), "length, width,height" );
+ mlt_properties_pass_list( properties, MLT_PRODUCER_PROPERTIES( real_producer ), "length, width, height, aspect_ratio" );
if ( speed < 0 )
{