X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_profile.c;h=e9565ecfed9a9060f3528a699487f7cce32dab20;hb=9eb9a8df9b30d23c517eb7e5e999a2d34dd71c21;hp=8d0e07122317fd335f914ed08a07793c8281f90f;hpb=f8223eabd6120f991f8b264e95fa123b6e20c6e3;p=melted diff --git a/src/framework/mlt_profile.c b/src/framework/mlt_profile.c index 8d0e071..e9565ec 100644 --- a/src/framework/mlt_profile.c +++ b/src/framework/mlt_profile.c @@ -63,14 +63,43 @@ mlt_profile mlt_profile_get( ) mlt_profile mlt_profile_select( const char *name ) { - const char *prefix = PREFIX; - char *filename = calloc( 1, strlen( prefix ) + strlen( PROFILES_DIR ) + strlen( name ) + 2 ); - strcpy( filename, prefix ); - if ( filename[ strlen( filename ) - 1 ] != '/' ) - filename[ strlen( filename ) ] = '/'; - strcat( filename, PROFILES_DIR ); + char *filename = NULL; + const char *prefix = getenv( "MLT_PROFILES_PATH" ); + mlt_properties properties = mlt_properties_load( name ); + + // Try to load from file specification + if ( properties && mlt_properties_get_int( properties, "width" ) ) + { + filename = calloc( 1, strlen( name ) + 1 ); + } + // Load from $prefix/share/mlt/profiles + else if ( prefix == NULL ) + { + prefix = PREFIX; + filename = calloc( 1, strlen( prefix ) + strlen( PROFILES_DIR ) + strlen( name ) + 2 ); + strcpy( filename, prefix ); + if ( filename[ strlen( filename ) - 1 ] != '/' ) + filename[ strlen( filename ) ] = '/'; + strcat( filename, PROFILES_DIR ); + } + // Use environment variable instead + else + { + filename = calloc( 1, strlen( prefix ) + strlen( name ) + 2 ); + strcpy( filename, prefix ); + if ( filename[ strlen( filename ) - 1 ] != '/' ) + filename[ strlen( filename ) ] = '/'; + } + + // Finish loading strcat( filename, name ); - return mlt_profile_load_file( filename ); + mlt_profile_load_file( filename ); + + // Cleanup + mlt_properties_close( properties ); + free( filename ); + + return profile; } /** Load a profile from specific file