mlt_producer result = NULL;
// 1st Line - check for service:resource handling
- if ( strchr( file, ':' ) )
+ // And ignore drive letters on Win32 - no single char services supported.
+ if ( strchr( file, ':' ) > file + 1 )
{
char *temp = strdup( file );
char *service = temp;
char *lookup = strdup( file );
char *p = lookup;
+ // Make backup of profile for determining if we need to use 'consumer' producer.
+ mlt_profile backup_profile = mlt_profile_clone( profile );
+
// We only need to load the dictionary once
if ( dictionary == NULL )
{
char *name = mlt_properties_get_name( dictionary, i );
if ( fnmatch( name, lookup, 0 ) == 0 )
result = create_from( profile, file, mlt_properties_get_value( dictionary, i ) );
+ }
+
+ // Check if the producer changed the profile - xml does this.
+ // The consumer producer does not handle frame rate differences.
+ if ( result && backup_profile->is_explicit && (
+ profile->width != backup_profile->width ||
+ profile->height != backup_profile->height ||
+ profile->sample_aspect_num != backup_profile->sample_aspect_num ||
+ profile->sample_aspect_den != backup_profile->sample_aspect_den ||
+ profile->colorspace != backup_profile->colorspace ) )
+ {
+ // Restore the original profile attributes.
+ profile->display_aspect_den = backup_profile->display_aspect_den;
+ profile->display_aspect_num = backup_profile->display_aspect_num;
+ profile->frame_rate_den = backup_profile->frame_rate_den;
+ profile->frame_rate_num = backup_profile->frame_rate_num;
+ profile->height = backup_profile->height;
+ profile->progressive = backup_profile->progressive;
+ profile->sample_aspect_den = backup_profile->sample_aspect_den;
+ profile->sample_aspect_num = backup_profile->sample_aspect_num;
+ profile->width = backup_profile->width;
+
+ // Use the 'consumer' producer.
+ mlt_producer_close( result );
+ result = mlt_factory_producer( profile, "consumer", file );
}
+ mlt_profile_close( backup_profile );
free( lookup );
}