X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_properties.c;h=a774ca1d06727cfc5640d394f14fc6cf3b543547;hb=0ef075de03b447797a8530585815c8c86aae5178;hp=dbce362301e285de1fa45cbc583e896e04d5732e;hpb=8a3795b090723264c973d274eedc28da480e76fd;p=melted diff --git a/src/framework/mlt_properties.c b/src/framework/mlt_properties.c index dbce362..a774ca1 100644 --- a/src/framework/mlt_properties.c +++ b/src/framework/mlt_properties.c @@ -105,18 +105,40 @@ void mlt_properties_mirror( mlt_properties this, mlt_properties that ) int mlt_properties_inherit( mlt_properties this, mlt_properties that ) { int count = mlt_properties_count( that ); - while ( count -- ) + int i = 0; + for ( i = 0; i < count; i ++ ) { - char *value = mlt_properties_get_value( that, count ); + char *value = mlt_properties_get_value( that, i ); if ( value != NULL ) { - char *name = mlt_properties_get_name( that, count ); + char *name = mlt_properties_get_name( that, i ); mlt_properties_set( this, name, value ); } } return 0; } +/** 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 count = mlt_properties_count( that ); + int length = strlen( prefix ); + int i = 0; + for ( i = 0; i < count; i ++ ) + { + char *name = mlt_properties_get_name( that, i ); + if ( !strncmp( name, prefix, length ) ) + { + char *value = mlt_properties_get_value( that, i ); + if ( value != NULL ) + mlt_properties_set( this, name + length, value ); + } + } + return 0; +} + /** Locate a property by name */ @@ -144,7 +166,7 @@ static mlt_property mlt_properties_add( mlt_properties this, char *name ) // Check that we have space and resize if necessary if ( list->count == list->size ) { - list->size += 10; + list->size += 50; list->name = realloc( list->name, list->size * sizeof( char * ) ); list->value = realloc( list->value, list->size * sizeof( mlt_property ) ); } @@ -224,6 +246,17 @@ char *mlt_properties_get_value( mlt_properties this, int index ) return NULL; } +/** Get a data value by index. +*/ + +void *mlt_properties_get_data_at( mlt_properties this, int index, int *size ) +{ + property_list *list = this->private; + if ( index >= 0 && index < list->count ) + return mlt_property_get_data( list->value[ index ], size ); + return NULL; +} + /** Return the number of items in the list. */