X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_multitrack.c;h=2c3d927b0b59c12da543d0ad8af7c48e74e7e127;hb=4db14da139d0cce1807d5f3530b271238786b795;hp=ca3103acc2483dcc7c71924719d310841aa4a511;hpb=0b288164cbeb9a3c98107d439d86844be13ba910;p=melted diff --git a/src/framework/mlt_multitrack.c b/src/framework/mlt_multitrack.c index ca3103a..2c3d927 100644 --- a/src/framework/mlt_multitrack.c +++ b/src/framework/mlt_multitrack.c @@ -78,7 +78,7 @@ mlt_multitrack mlt_multitrack_init( ) mlt_producer mlt_multitrack_producer( mlt_multitrack this ) { - return &this->parent; + return this != NULL ? &this->parent : NULL; } /** Get the service associated this multitrack. @@ -127,7 +127,8 @@ void mlt_multitrack_refresh( mlt_multitrack this ) mlt_properties_set( mlt_producer_properties( producer ), "eof", "continue" ); // Determine the longest length - length = mlt_producer_get_playtime( producer ) > length ? mlt_producer_get_playtime( producer ) : length; + if ( !mlt_properties_get_int( mlt_producer_properties( producer ), "hide" ) ) + length = mlt_producer_get_playtime( producer ) > length ? mlt_producer_get_playtime( producer ) : length; // Handle fps if ( fps == 0 ) @@ -212,7 +213,7 @@ mlt_producer mlt_multitrack_track( mlt_multitrack this, int track ) static int position_compare( const void *p1, const void *p2 ) { - return *( int64_t * )p1 - *( int64_t * )p2; + return *( mlt_position * )p1 - *( mlt_position * )p2; } static int add_unique( mlt_position *array, int size, mlt_position position ) @@ -251,7 +252,7 @@ mlt_position mlt_multitrack_clip( mlt_multitrack this, mlt_whence whence, int in mlt_position position = 0; int i = 0; int j = 0; - int64_t *map = malloc( 1000 * sizeof( mlt_position ) ); + mlt_position *map = malloc( 1000 * sizeof( mlt_position ) ); int count = 0; for ( i = 0; i < this->count; i ++ ) @@ -259,7 +260,7 @@ mlt_position mlt_multitrack_clip( mlt_multitrack this, mlt_whence whence, int in // Get the producer for this track mlt_producer producer = this->list[ i ]; - // If it's assigned... + // If it's assigned and not a hidden track if ( producer != NULL ) { // Get the properties of this producer @@ -284,7 +285,7 @@ mlt_position mlt_multitrack_clip( mlt_multitrack this, mlt_whence whence, int in } // Now sort the map - qsort( map, count, sizeof( int64_t ), position_compare ); + qsort( map, count, sizeof( mlt_position ), position_compare ); // Now locate the requested index switch( whence ) @@ -374,6 +375,7 @@ static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int ind double speed = mlt_properties_get_double( producer_properties, "_speed" ); mlt_properties properties = mlt_frame_properties( *frame ); mlt_properties_set_double( properties, "_speed", speed ); + mlt_properties_set_int( properties, "hide", mlt_properties_get_int( mlt_producer_properties( producer ), "hide" ) ); } else {