X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_properties.c;h=b42d02a4c90cd44f22dec0dea7eaf0d8088d9a25;hb=e6c03148e1dc3b0e363c9f304b3ed93fbc1a91a9;hp=01c4ba2d9a736a1ed04565d238abe14281ec0b27;hpb=ebcbb3571620a43fe24b3f8fa0161096ef628dbe;p=melted diff --git a/src/framework/mlt_properties.c b/src/framework/mlt_properties.c index 01c4ba2..b42d02a 100644 --- a/src/framework/mlt_properties.c +++ b/src/framework/mlt_properties.c @@ -47,7 +47,7 @@ property_list; /** Memory leak checks. */ -//#define _MLT_PROPERTY_CHECKS_ +//#define _MLT_PROPERTY_CHECKS_ 2 #ifdef _MLT_PROPERTY_CHECKS_ static int properties_created = 0; @@ -101,7 +101,7 @@ mlt_properties mlt_properties_new( ) /** Load properties from a file. */ -mlt_properties mlt_properties_load( char *filename ) +mlt_properties mlt_properties_load( const char *filename ) { // Construct a standalone properties object mlt_properties this = mlt_properties_new( ); @@ -151,7 +151,7 @@ mlt_properties mlt_properties_load( char *filename ) return this; } -static inline int generate_hash( char *name ) +static inline int generate_hash( const char *name ) { int hash = 0; int i = 1; @@ -165,7 +165,7 @@ static inline int generate_hash( char *name ) real producer. */ -static inline void mlt_properties_do_mirror( mlt_properties this, char *name ) +static inline void mlt_properties_do_mirror( mlt_properties this, const char *name ) { property_list *list = this->local; if ( list->mirror != NULL ) @@ -202,6 +202,19 @@ int mlt_properties_dec_ref( mlt_properties this ) return 0; } +/** Return the ref count of this object. +*/ + +int mlt_properties_ref_count( mlt_properties this ) +{ + if ( this != NULL ) + { + property_list *list = this->local; + return list->ref_count; + } + return 0; +} + /** Allow the specification of a mirror. */ @@ -233,7 +246,7 @@ int mlt_properties_inherit( mlt_properties this, mlt_properties that ) /** Pass all properties from 'that' that match the prefix to 'this' (excluding the prefix). */ -int mlt_properties_pass( mlt_properties this, mlt_properties that, char *prefix ) +int mlt_properties_pass( mlt_properties this, mlt_properties that, const char *prefix ) { int count = mlt_properties_count( that ); int length = strlen( prefix ); @@ -254,7 +267,7 @@ int mlt_properties_pass( mlt_properties this, mlt_properties that, char *prefix /** Locate a property by name */ -static inline mlt_property mlt_properties_find( mlt_properties this, char *name ) +static inline mlt_property mlt_properties_find( mlt_properties this, const char *name ) { property_list *list = this->local; mlt_property value = NULL; @@ -281,7 +294,7 @@ static inline mlt_property mlt_properties_find( mlt_properties this, char *name /** Add a new property. */ -static mlt_property mlt_properties_add( mlt_properties this, char *name ) +static mlt_property mlt_properties_add( mlt_properties this, const char *name ) { property_list *list = this->local; int key = generate_hash( name ); @@ -290,7 +303,7 @@ static mlt_property mlt_properties_add( mlt_properties this, char *name ) if ( list->count == list->size ) { list->size += 50; - list->name = realloc( list->name, list->size * sizeof( char * ) ); + list->name = realloc( list->name, list->size * sizeof( const char * ) ); list->value = realloc( list->value, list->size * sizeof( mlt_property ) ); } @@ -309,7 +322,7 @@ static mlt_property mlt_properties_add( mlt_properties this, char *name ) /** Fetch a property by name - this includes add if not found. */ -static mlt_property mlt_properties_fetch( mlt_properties this, char *name ) +static mlt_property mlt_properties_fetch( mlt_properties this, const char *name ) { // Try to find an existing property first mlt_property property = mlt_properties_find( this, name ); @@ -325,7 +338,7 @@ static mlt_property mlt_properties_fetch( mlt_properties this, char *name ) /** Set the property. */ -int mlt_properties_set( mlt_properties this, char *name, char *value ) +int mlt_properties_set( mlt_properties this, const char *name, const char *value ) { int error = 1; @@ -333,12 +346,21 @@ int mlt_properties_set( mlt_properties this, char *name, char *value ) mlt_property property = mlt_properties_fetch( this, name ); // Set it if not NULL - if ( property != NULL && ( value == NULL || value[ 0 ] != '@' ) ) + if ( property == NULL ) + { + fprintf( stderr, "Whoops - %s not found (should never occur)\n", name ); + } + else if ( value == NULL ) + { + error = mlt_property_set_string( property, value ); + mlt_properties_do_mirror( this, name ); + } + else if ( *value != '@' ) { error = mlt_property_set_string( property, value ); mlt_properties_do_mirror( this, name ); } - else if ( property != NULL && value[ 0 ] == '@' ) + else if ( value[ 0 ] == '@' ) { int total = 0; int current = 0; @@ -395,7 +417,7 @@ int mlt_properties_set( mlt_properties this, char *name, char *value ) /** Set or default the property. */ -int mlt_properties_set_or_default( mlt_properties this, char *name, char *value, char *def ) +int mlt_properties_set_or_default( mlt_properties this, const char *name, const char *value, const char *def ) { return mlt_properties_set( this, name, value == NULL ? def : value ); } @@ -403,7 +425,7 @@ int mlt_properties_set_or_default( mlt_properties this, char *name, char *value, /** Get a string value by name. */ -char *mlt_properties_get( mlt_properties this, char *name ) +char *mlt_properties_get( mlt_properties this, const char *name ) { mlt_property value = mlt_properties_find( this, name ); return value == NULL ? NULL : mlt_property_get_string( value ); @@ -454,7 +476,7 @@ int mlt_properties_count( mlt_properties this ) /** Set a value by parsing a name=value string */ -int mlt_properties_parse( mlt_properties this, char *namevalue ) +int mlt_properties_parse( mlt_properties this, const char *namevalue ) { char *name = strdup( namevalue ); char *value = NULL; @@ -493,7 +515,7 @@ int mlt_properties_parse( mlt_properties this, char *namevalue ) /** Get a value associated to the name. */ -int mlt_properties_get_int( mlt_properties this, char *name ) +int mlt_properties_get_int( mlt_properties this, const char *name ) { mlt_property value = mlt_properties_find( this, name ); return value == NULL ? 0 : mlt_property_get_int( value ); @@ -502,7 +524,7 @@ int mlt_properties_get_int( mlt_properties this, char *name ) /** Set a value associated to the name. */ -int mlt_properties_set_int( mlt_properties this, char *name, int value ) +int mlt_properties_set_int( mlt_properties this, const char *name, int value ) { int error = 1; @@ -524,7 +546,7 @@ int mlt_properties_set_int( mlt_properties this, char *name, int value ) /** Get a value associated to the name. */ -double mlt_properties_get_double( mlt_properties this, char *name ) +double mlt_properties_get_double( mlt_properties this, const char *name ) { mlt_property value = mlt_properties_find( this, name ); return value == NULL ? 0 : mlt_property_get_double( value ); @@ -533,7 +555,7 @@ double mlt_properties_get_double( mlt_properties this, char *name ) /** Set a value associated to the name. */ -int mlt_properties_set_double( mlt_properties this, char *name, double value ) +int mlt_properties_set_double( mlt_properties this, const char *name, double value ) { int error = 1; @@ -555,7 +577,7 @@ int mlt_properties_set_double( mlt_properties this, char *name, double value ) /** Get a value associated to the name. */ -mlt_position mlt_properties_get_position( mlt_properties this, char *name ) +mlt_position mlt_properties_get_position( mlt_properties this, const char *name ) { mlt_property value = mlt_properties_find( this, name ); return value == NULL ? 0 : mlt_property_get_position( value ); @@ -564,7 +586,7 @@ mlt_position mlt_properties_get_position( mlt_properties this, char *name ) /** Set a value associated to the name. */ -int mlt_properties_set_position( mlt_properties this, char *name, mlt_position value ) +int mlt_properties_set_position( mlt_properties this, const char *name, mlt_position value ) { int error = 1; @@ -586,7 +608,7 @@ int mlt_properties_set_position( mlt_properties this, char *name, mlt_position v /** Get a value associated to the name. */ -void *mlt_properties_get_data( mlt_properties this, char *name, int *length ) +void *mlt_properties_get_data( mlt_properties this, const char *name, int *length ) { mlt_property value = mlt_properties_find( this, name ); return value == NULL ? NULL : mlt_property_get_data( value, length ); @@ -595,7 +617,7 @@ void *mlt_properties_get_data( mlt_properties this, char *name, int *length ) /** Set a value associated to the name. */ -int mlt_properties_set_data( mlt_properties this, char *name, void *value, int length, mlt_destructor destroy, mlt_serialiser serialise ) +int mlt_properties_set_data( mlt_properties this, const char *name, void *value, int length, mlt_destructor destroy, mlt_serialiser serialise ) { int error = 1; @@ -614,7 +636,7 @@ int mlt_properties_set_data( mlt_properties this, char *name, void *value, int l /** Rename a property. */ -int mlt_properties_rename( mlt_properties this, char *source, char *dest ) +int mlt_properties_rename( mlt_properties this, const char *source, const char *dest ) { mlt_property value = mlt_properties_find( this, dest ); @@ -651,9 +673,9 @@ void mlt_properties_dump( mlt_properties this, FILE *output ) fprintf( output, "%s=%s\n", list->name[ i ], mlt_properties_get( this, list->name[ i ] ) ); } -void mlt_properties_debug( mlt_properties this, char *title, FILE *output ) +void mlt_properties_debug( mlt_properties this, const char *title, FILE *output ) { - fprintf( stderr, "%s: ", title ); + fprintf( output, "%s: ", title ); if ( this != NULL ) { property_list *list = this->local; @@ -666,7 +688,7 @@ void mlt_properties_debug( mlt_properties this, char *title, FILE *output ) fprintf( output, ", %s=%p", list->name[ i ], mlt_properties_get_data( this, list->name[ i ], NULL ) ); fprintf( output, " ]" ); } - fprintf( stderr, "\n" ); + fprintf( output, "\n" ); } /** Close the list. @@ -685,10 +707,12 @@ void mlt_properties_close( mlt_properties this ) property_list *list = this->local; int index = 0; -#ifdef _MLT_PROPERTY_CHECKS_ +#if _MLT_PROPERTY_CHECKS_ == 1 // Show debug info mlt_properties_debug( this, "Closing", stderr ); +#endif +#ifdef _MLT_PROPERTY_CHECKS_ // Increment destroyed count properties_destroyed ++;