X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_playlist.c;h=27c44435271f1423ac1adc68c930057d5c86fdb7;hb=803598588d14d90ced4324a90456bca641f17bc9;hp=084af24f55a3acc0cf576b4645f9c349cfde012d;hpb=b85660b63fd9e5becfdbea592a28ae18fa5f991e;p=melted diff --git a/src/framework/mlt_playlist.c b/src/framework/mlt_playlist.c index 084af24..27c4443 100644 --- a/src/framework/mlt_playlist.c +++ b/src/framework/mlt_playlist.c @@ -132,28 +132,31 @@ static int mlt_playlist_virtual_refresh( mlt_playlist this ) { // Get the producer mlt_producer producer = this->list[ i ]->producer; - int current_length = mlt_producer_get_out( producer ) - mlt_producer_get_in( producer ) + 1; - - // Check if the length of the producer has changed - if ( this->list[ i ]->frame_in != mlt_producer_get_in( producer ) || - this->list[ i ]->frame_out != mlt_producer_get_out( producer ) ) + if ( producer ) { - // This clip should be removed... - if ( current_length < 1 ) - { - this->list[ i ]->frame_in = 0; - this->list[ i ]->frame_out = -1; - this->list[ i ]->frame_count = 0; - } - else + int current_length = mlt_producer_get_out( producer ) - mlt_producer_get_in( producer ) + 1; + + // Check if the length of the producer has changed + if ( this->list[ i ]->frame_in != mlt_producer_get_in( producer ) || + this->list[ i ]->frame_out != mlt_producer_get_out( producer ) ) { - this->list[ i ]->frame_in = mlt_producer_get_in( producer ); - this->list[ i ]->frame_out = mlt_producer_get_out( producer ); - this->list[ i ]->frame_count = current_length; + // This clip should be removed... + if ( current_length < 1 ) + { + this->list[ i ]->frame_in = 0; + this->list[ i ]->frame_out = -1; + this->list[ i ]->frame_count = 0; + } + else + { + this->list[ i ]->frame_in = mlt_producer_get_in( producer ); + this->list[ i ]->frame_out = mlt_producer_get_out( producer ); + this->list[ i ]->frame_count = current_length; + } + + // Update the producer_length + this->list[ i ]->producer_length = current_length; } - - // Update the producer_length - this->list[ i ]->producer_length = current_length; } // Calculate the frame_count @@ -518,7 +521,7 @@ mlt_position mlt_playlist_clip( mlt_playlist this, mlt_whence whence, int index int mlt_playlist_get_clip_info( mlt_playlist this, mlt_playlist_clip_info *info, int index ) { - int error = index < 0 || index >= this->count; + int error = index < 0 || index >= this->count || this->list[ index ]->producer == NULL; memset( info, 0, sizeof( mlt_playlist_clip_info ) ); if ( !error ) { @@ -590,7 +593,10 @@ int mlt_playlist_append_io( mlt_playlist this, mlt_producer producer, mlt_positi int mlt_playlist_blank( mlt_playlist this, mlt_position length ) { // Append to the virtual list - return mlt_playlist_virtual_append( this, &this->blank, 0, length ); + if (length >= 0) + return mlt_playlist_virtual_append( this, &this->blank, 0, length ); + else + return 1; } /** Insert a producer into the playlist.