Fix up warnings about explicit base initializers in copy constructors
[melted] / mlt++ / src / MltPlaylist.cpp
index 15c27b3..1424594 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 #include "MltPlaylist.h"
+#include "MltTransition.h"
 using namespace Mlt;
 
+ClipInfo::ClipInfo( ) :
+       clip( 0 ),
+       producer( NULL ),
+       cut( NULL ),
+       start( 0 ),
+       resource( NULL ),
+       frame_in( 0 ),
+       frame_out( 0 ),
+       frame_count( 0 ),
+       length( 0 ),
+       fps( 0 ),
+       repeat( 0 )
+{
+}
+
 ClipInfo::ClipInfo( mlt_playlist_clip_info *info ) :
        clip( info->clip ),
        producer( new Producer( info->producer ) ),
-       service( new Service( info->service ) ),
+       cut( new Producer( info->cut ) ),
        start( info->start ),
-       resource( strdup( info->resource ) ),
+       resource( info->resource? strdup( info->resource )  : 0 ),
        frame_in( info->frame_in ),
        frame_out( info->frame_out ),
        frame_count( info->frame_count ),
        length( info->length ),
-       fps( info->fps )
+       fps( info->fps ),
+       repeat( info->repeat )
 {
 }
 
 ClipInfo::~ClipInfo( )
 {
        delete producer;
-       delete service;
+       delete cut;
+       free( resource );
+}
+
+void ClipInfo::update( mlt_playlist_clip_info *info )
+{
+       delete producer;
+       delete cut;
        free( resource );
+       clip = info->clip;
+       producer = new Producer( info->producer );
+       cut = new Producer( info->cut );
+       start = info->start;
+       resource = strdup( info->resource );
+       frame_in = info->frame_in;
+       frame_out = info->frame_out;
+       frame_count = info->frame_count;
+       length = info->length;
+       fps = info->fps;
+       repeat = info->repeat;
 }
 
 Playlist::Playlist( ) :
@@ -50,7 +85,18 @@ Playlist::Playlist( ) :
        instance = mlt_playlist_init( );
 }
 
+Playlist::Playlist( Service &producer ) :
+       instance( NULL )
+{
+       if ( producer.type( ) == playlist_type )
+       {
+               instance = ( mlt_playlist )producer.get_service( );
+               inc_ref( );
+       }
+}
+
 Playlist::Playlist( Playlist &playlist ) :
+       Mlt::Producer( playlist ),
        instance( playlist.get_playlist( ) )
 {
        inc_ref( );
@@ -112,11 +158,20 @@ Producer *Playlist::current( )
        return new Producer( mlt_playlist_current( get_playlist( ) ) );
 }
 
-ClipInfo *Playlist::clip_info( int index )
+ClipInfo *Playlist::clip_info( int index, ClipInfo *info )
+{
+       mlt_playlist_clip_info clip_info;
+       if ( mlt_playlist_get_clip_info( get_playlist( ), &clip_info, index ) )
+               return NULL;
+       if ( info == NULL )
+               return new ClipInfo( &clip_info );
+       info->update( &clip_info );
+       return info;
+}
+
+void Playlist::delete_clip_info( ClipInfo *info )
 {
-       mlt_playlist_clip_info info;
-       mlt_playlist_get_clip_info( get_playlist( ), &info, index );
-       return new ClipInfo( &info );
+       delete info;
 }
 
 int Playlist::insert( Producer &producer, int where, int in, int out )
@@ -144,7 +199,118 @@ int Playlist::split( int clip, int position )
        return mlt_playlist_split( get_playlist( ), clip, position );
 }
 
+int Playlist::split_at( int position, bool left )
+{
+       return mlt_playlist_split_at( get_playlist( ), position, left );
+}
+
 int Playlist::join( int clip, int count, int merge )
 {
        return mlt_playlist_join( get_playlist( ), clip, count, merge );
 }
+
+int Playlist::mix( int clip, int length, Transition *transition )
+{
+       return mlt_playlist_mix( get_playlist( ), clip, length, transition == NULL ? NULL : transition->get_transition( ) );
+}
+
+int Playlist::mix_add( int clip, Transition *transition )
+{
+       return mlt_playlist_mix_add( get_playlist( ), clip, transition == NULL ? NULL : transition->get_transition( ) );
+}
+
+int Playlist::repeat( int clip, int count )
+{
+       return mlt_playlist_repeat_clip( get_playlist( ), clip, count );
+}
+
+Producer *Playlist::get_clip( int clip )
+{
+       mlt_producer producer = mlt_playlist_get_clip( get_playlist( ), clip );
+       return producer != NULL ? new Producer( producer ) : NULL;
+}
+
+Producer *Playlist::get_clip_at( int position )
+{
+       mlt_producer producer = mlt_playlist_get_clip_at( get_playlist( ), position );
+       return producer != NULL ? new Producer( producer ) : NULL;
+}
+
+int Playlist::get_clip_index_at( int position )
+{
+       return mlt_playlist_get_clip_index_at( get_playlist( ), position );
+}
+
+bool Playlist::is_mix( int clip )
+{
+       return mlt_playlist_clip_is_mix( get_playlist( ), clip ) != 0;
+}
+
+bool Playlist::is_blank( int clip )
+{
+       return mlt_playlist_is_blank( get_playlist( ), clip ) != 0;
+}
+
+bool Playlist::is_blank_at( int position )
+{
+       return mlt_playlist_is_blank_at( get_playlist( ), position ) != 0;
+}
+
+Producer *Playlist::replace_with_blank( int clip )
+{
+       mlt_producer producer = mlt_playlist_replace_with_blank( get_playlist( ), clip );
+       Producer *object = producer != NULL ? new Producer( producer ) : NULL;
+       mlt_producer_close( producer );
+       return object;
+}
+
+void Playlist::consolidate_blanks( int keep_length )
+{
+       return mlt_playlist_consolidate_blanks( get_playlist( ), keep_length );
+}
+
+void Playlist::insert_blank( int clip, int length )
+{
+       mlt_playlist_insert_blank( get_playlist( ), clip, length );
+}
+
+void Playlist::pad_blanks( int position, int length, int find )
+{
+       mlt_playlist_pad_blanks( get_playlist( ), position, length, find );
+}
+
+int Playlist::insert_at( int position, Producer *producer, int mode )
+{
+       return mlt_playlist_insert_at( get_playlist( ), position, producer->get_producer( ), mode );
+}
+
+int Playlist::insert_at( int position, Producer &producer, int mode )
+{
+       return mlt_playlist_insert_at( get_playlist( ), position, producer.get_producer( ), mode );
+}
+
+int Playlist::clip_start( int clip )
+{
+       return mlt_playlist_clip_start( get_playlist( ), clip );
+}
+
+int Playlist::blanks_from( int clip, int bounded )
+{
+       return mlt_playlist_blanks_from( get_playlist( ), clip, bounded );
+}
+
+int Playlist::clip_length( int clip )
+{
+       return mlt_playlist_clip_length( get_playlist( ), clip );
+}
+
+int Playlist::remove_region( int position, int length )
+{
+       return mlt_playlist_remove_region( get_playlist( ), position, length );
+}
+
+int Playlist::move_region( int position, int length, int new_position )
+{
+       return mlt_playlist_move_region( get_playlist( ), position, length, new_position );
+}
+