result = context->stack_service[ -- context->stack_service_size ];
if ( type != NULL )
*type = context->stack_types[ context->stack_service_size ];
+ // Set the service's profile and locale so mlt_property time-to-position conversions can get fps
+ mlt_properties_set_data( MLT_SERVICE_PROPERTIES( result ), "_profile", context->profile, 0, NULL, NULL );
+ mlt_properties_set_lcnumeric( MLT_SERVICE_PROPERTIES( result ), context->lc_numeric );
}
return result;
}
mlt_properties_set( properties, (const char*) atts[0], atts[1] == NULL ? "" : (const char*) atts[1] );
}
-// Parse a SMIL clock value (as produced by Kino 0.9.1) and return position in frames
-static mlt_position parse_clock_value( char *value, double fps )
-{
- // This implementation expects a fully specified clock value - no optional
- // parts (e.g. 1:05)
- char *pos, *copy = strdup( value );
- int hh, mm, ss, ms;
- mlt_position result = -1;
-
- value = copy;
- pos = strchr( value, ':' );
- if ( !pos )
- return result;
- *pos = '\0';
- hh = atoi( value );
- value = pos + 1;
-
- pos = strchr( value, ':' );
- if ( !pos )
- return result;
- *pos = '\0';
- mm = atoi( value );
- value = pos + 1;
-
- pos = strchr( value, '.' );
- if ( !pos )
- return result;
- *pos = '\0';
- ss = atoi( value );
- value = pos + 1;
-
- ms = atoi( value );
- free( copy );
- result = ( fps * ( ( (hh * 3600) + (mm * 60) + ss ) * 1000 + ms ) / 1000 + 0.5 );
-
- return result;
-}
-
static void on_end_producer( deserialise_context context, const xmlChar *name )
{
enum service_type type;
mlt_position out = -1;
// Get in
- if ( mlt_properties_get( properties, "in" ) != NULL )
+ if ( mlt_properties_get( properties, "in" ) )
in = mlt_properties_get_position( properties, "in" );
// Let Kino-SMIL clipBegin be a synonym for in
- if ( mlt_properties_get( properties, "clipBegin" ) != NULL )
- {
- if ( strchr( mlt_properties_get( properties, "clipBegin" ), ':' ) )
- // Parse clock value
- in = parse_clock_value( mlt_properties_get( properties, "clipBegin" ),
- mlt_producer_get_fps( MLT_PRODUCER( producer ) ) );
- else
- // Parse frames value
- in = mlt_properties_get_position( properties, "clipBegin" );
- }
+ else if ( mlt_properties_get( properties, "clipBegin" ) )
+ in = mlt_properties_get_position( properties, "clipBegin" );
// Get out
- if ( mlt_properties_get( properties, "out" ) != NULL )
+ if ( mlt_properties_get( properties, "out" ) )
out = mlt_properties_get_position( properties, "out" );
// Let Kino-SMIL clipEnd be a synonym for out
- if ( mlt_properties_get( properties, "clipEnd" ) != NULL )
- {
- if ( strchr( mlt_properties_get( properties, "clipEnd" ), ':' ) )
- // Parse clock value
- out = parse_clock_value( mlt_properties_get( properties, "clipEnd" ),
- mlt_producer_get_fps( MLT_PRODUCER( producer ) ) );
- else
- // Parse frames value
- out = mlt_properties_get_position( properties, "clipEnd" );
- }
+ else if ( mlt_properties_get( properties, "clipEnd" ) )
+ out = mlt_properties_get_position( properties, "clipEnd" );
// Remove in and out
mlt_properties_set( properties, "in", NULL );
mlt_properties_set( properties, "out", NULL );
{
mlt_producer entry = NULL;
mlt_properties temp = mlt_properties_new( );
+ mlt_properties_set_data( temp, "_profile", context->profile, 0, NULL, NULL );
+ mlt_properties_set_lcnumeric( temp, context->lc_numeric );
for ( ; atts != NULL && *atts != NULL; atts += 2 )
{