X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_properties.c;h=d047da0c2ae503d23fd2c32d64695ca5e3e6717b;hb=6336039a203c6496691784682f9ad56eb13abcc3;hp=233e8aced35de29e58700d0ecf6cf9301f7e00f5;hpb=661165812e3410fe2f6f49d7af882b36a0efcf82;p=melted diff --git a/src/framework/mlt_properties.c b/src/framework/mlt_properties.c index 233e8ac..d047da0 100644 --- a/src/framework/mlt_properties.c +++ b/src/framework/mlt_properties.c @@ -57,6 +57,39 @@ int mlt_properties_init( mlt_properties this, void *child ) return this->private == NULL; } +/** Constructor for stand alone object. +*/ + +mlt_properties mlt_properties_new( ) +{ + // Construct a standalone properties object + mlt_properties this = calloc( sizeof( struct mlt_properties_s ), 1 ); + + // Initialise this + mlt_properties_init( this, NULL ); + + // Return the pointer + return this; +} + +/** Inherit all serialisable properties from that into this. +*/ + +int mlt_properties_inherit( mlt_properties this, mlt_properties that ) +{ + int count = mlt_properties_count( that ); + while ( count -- ) + { + char *value = mlt_properties_get_value( that, count ); + if ( value != NULL ) + { + char *name = mlt_properties_get_name( that, count ); + mlt_properties_set( this, name, value ); + } + } + return 0; +} + /** Locate a property by name */ @@ -252,16 +285,16 @@ int mlt_properties_set_double( mlt_properties this, char *name, double value ) /** Get a value associated to the name. */ -mlt_timecode mlt_properties_get_timecode( mlt_properties this, char *name ) +mlt_position mlt_properties_get_position( mlt_properties this, char *name ) { mlt_property value = mlt_properties_find( this, name ); - return value == NULL ? 0 : mlt_property_get_timecode( value ); + return value == NULL ? 0 : mlt_property_get_position( value ); } /** Set a value associated to the name. */ -int mlt_properties_set_timecode( mlt_properties this, char *name, mlt_timecode value ) +int mlt_properties_set_position( mlt_properties this, char *name, mlt_position value ) { int error = 1; @@ -270,7 +303,7 @@ int mlt_properties_set_timecode( mlt_properties this, char *name, mlt_timecode v // Set it if not NULL if ( property != NULL ) - error = mlt_property_set_timecode( property, value ); + error = mlt_property_set_position( property, value ); return error; } @@ -309,9 +342,13 @@ void mlt_properties_close( mlt_properties this ) property_list *list = this->private; int index = 0; + int debug = mlt_properties_get_int( this, "debug" ); + // Clean up names and values for ( index = 0; index < list->count; index ++ ) { + if ( debug ) + fprintf( stderr, "closing %s\n", list->name[ index ] ); free( list->name[ index ] ); mlt_property_close( list->value[ index ] ); } @@ -320,5 +357,9 @@ void mlt_properties_close( mlt_properties this ) free( list->name ); free( list->value ); free( list ); + + // Free this now if this has no child + if ( this->child == NULL ) + free( this ); }