* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include "config.h"
-
#include "mlt_playlist.h"
#include "mlt_tractor.h"
#include "mlt_multitrack.h"
{
// Obtain the properties
mlt_properties properties = MLT_PLAYLIST_PROPERTIES( this );
-
- // Get the fps of the first producer
- double fps = mlt_properties_get_double( properties, "first_fps" );
int i = 0;
mlt_position frame_count = 0;
mlt_producer producer = this->list[ i ]->producer;
int current_length = mlt_producer_get_out( producer ) - mlt_producer_get_in( producer ) + 1;
- // If fps is 0
- if ( fps == 0 )
- {
- // Inherit it from the producer
- fps = mlt_producer_get_fps( producer );
- }
- else if ( fps != mlt_properties_get_double( MLT_PRODUCER_PROPERTIES( producer ), "fps" ) )
- {
- // Generate a warning for now - the following attempt to fix may fail
- fprintf( stderr, "Warning: fps mismatch on playlist producer %d\n", this->count );
-
- // It should be safe to impose fps on an image producer, but not necessarily safe for video
- mlt_properties_set_double( MLT_PRODUCER_PROPERTIES( producer ), "fps", fps );
- }
-
// 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 ) )
}
// Refresh all properties
- mlt_properties_set_double( properties, "first_fps", fps );
- mlt_properties_set_double( properties, "fps", fps == 0 ? 25 : fps );
mlt_events_block( properties, properties );
mlt_properties_set_position( properties, "length", frame_count );
mlt_events_unblock( properties, properties );
mlt_producer_close( this->list[ i ]->producer );
}
this->count = 0;
- mlt_properties_set_double( MLT_PLAYLIST_PROPERTIES( this ), "first_fps", 0 );
return mlt_playlist_virtual_refresh( this );
}
if ( clip < this->count && mlt_playlist_is_blank( this, clip ) )
{
// Split and move to new clip if need be
- if ( position != info.start && mlt_playlist_split( this, clip, position - info.start ) == 0 )
+ if ( position != info.start && mlt_playlist_split( this, clip, position - info.start - 1 ) == 0 )
mlt_playlist_get_clip_info( this, &info, ++ clip );
// Split again if need be
}
else
{
- if ( mode == 1 )
- mlt_playlist_blank( this, position - mlt_properties_get_int( properties, "length" ) );
+ if ( mode == 1 ) {
+ if ( position == info.start )
+ mlt_playlist_remove( this, clip );
+ else
+ mlt_playlist_blank( this, position - mlt_properties_get_int( properties, "length" ) - 1 );
+ }
mlt_playlist_append( this, producer );
ret = this->count - 1;
}
// Check that we have a producer
if ( producer == NULL )
{
- *frame = mlt_frame_init( );
- return 0;
+ *frame = NULL;
+ return -1;
}
// Get this mlt_playlist
// Check that we have a producer
if ( real == NULL )
{
- *frame = mlt_frame_init( );
+ *frame = mlt_frame_init( MLT_PRODUCER_SERVICE( producer ) );
return 0;
}
else
{
mlt_producer parent = mlt_producer_cut_parent( ( mlt_producer )real );
- *frame = mlt_frame_init( );
+ *frame = mlt_frame_init( MLT_PRODUCER_SERVICE( parent ) );
mlt_properties_set_int( MLT_FRAME_PROPERTIES( *frame ), "fx_cut", 1 );
mlt_frame_push_service( *frame, NULL );
mlt_frame_push_audio( *frame, NULL );