X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_properties.c;h=be4d66fc811f705bfb6c092ae39cfe2768ef58ec;hb=19d5d8f23b0930d8d10b0c9075830415cd5fec4d;hp=233e8aced35de29e58700d0ecf6cf9301f7e00f5;hpb=661165812e3410fe2f6f49d7af882b36a0efcf82;p=melted diff --git a/src/framework/mlt_properties.c b/src/framework/mlt_properties.c index 233e8ac..be4d66f 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; } @@ -310,7 +343,7 @@ void mlt_properties_close( mlt_properties this ) int index = 0; // Clean up names and values - for ( index = 0; index < list->count; index ++ ) + for ( index = list->count - 1; index >= 0; index -- ) { free( list->name[ index ] ); mlt_property_close( list->value[ index ] ); @@ -320,5 +353,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 ); }