// Specify the eof condition
mlt_properties_set( mlt_playlist_properties( this ), "eof", "pause" );
mlt_properties_set( mlt_playlist_properties( this ), "resource", "<playlist>" );
+ mlt_properties_set( mlt_playlist_properties( this ), "mlt_type", "mlt_producer" );
+
+ this->size = 10;
+ this->list = malloc( this->size * sizeof( playlist_entry * ) );
}
return this;
{
int i;
this->list = realloc( this->list, ( this->size + 10 ) * sizeof( playlist_entry * ) );
- for ( i = this->size; i < this->size + 10; i ++ )
- this->list[ i ] = NULL;
+ for ( i = this->size; i < this->size + 10; i ++ ) this->list[ i ] = NULL;
this->size += 10;
}
/** Seek in the virtual playlist.
*/
-static mlt_producer mlt_playlist_virtual_seek( mlt_playlist this )
+static mlt_service mlt_playlist_virtual_seek( mlt_playlist this )
{
// Default producer to blank
mlt_producer producer = NULL;
+ mlt_service service = NULL;
// Map playlist position to real producer in virtual playlist
mlt_position position = mlt_producer_frame( &this->parent );
producer = &this->blank;
}
- return producer;
+ if ( producer != NULL )
+ {
+ service = mlt_producer_service( producer );
+ while ( mlt_service_consumer( service ) != NULL )
+ service = mlt_service_consumer( service );
+ }
+
+ return service;
}
/** Invoked when a producer indicates that it has prematurely reached its end.
info->length = mlt_producer_get_length( producer );
info->fps = mlt_producer_get_fps( producer );
}
+
+ // Determine the consuming filter service
+ if ( info->producer != NULL )
+ {
+ info->service = mlt_producer_service( info->producer );
+ while ( mlt_service_consumer( info->service ) != NULL )
+ info->service = mlt_service_consumer( info->service );
+ }
+
return error;
}
mlt_playlist this = producer->child;
// Get the real producer
- mlt_producer real = mlt_playlist_virtual_seek( this );
+ mlt_service real = mlt_playlist_virtual_seek( this );
// Get the frame
- mlt_service_get_frame( mlt_producer_service( real ), frame, index );
+ mlt_service_get_frame( real, frame, index );
// Check if we're at the end of the clip
mlt_properties properties = mlt_frame_properties( *frame );
void mlt_playlist_close( mlt_playlist this )
{
+ int i = 0;
mlt_producer_close( &this->parent );
mlt_producer_close( &this->blank );
+ for ( i = 0; i < this->count; i ++ )
+ free( this->list[ i ] );
+ free( this->list );
free( this );
}