#include <stdlib.h>
#include <string.h>
#include <libgen.h>
+#include <math.h>
/** the default subdirectory of the datadir for holding profiles */
mlt_profile mlt_profile_load_string( const char *string )
{
mlt_properties properties = mlt_properties_new();
+ mlt_profile profile = NULL;
+
if ( properties )
{
const char *p = string;
p = strchr( p, '\n' );
if ( p ) p++;
}
+ profile = mlt_profile_load_properties( properties );
+ mlt_properties_close( properties );
}
- return mlt_profile_load_properties( properties );
+ return profile;
}
/** Get the video frame rate as a floating point value.
void mlt_profile_from_producer( mlt_profile profile, mlt_producer producer )
{
mlt_frame fr = NULL;
- uint8_t *buffer;
- mlt_image_format fmt = mlt_image_yuv422;
+ uint8_t *buffer = NULL;
+ mlt_image_format fmt = mlt_image_none;
mlt_properties p;
int w = profile->width;
int h = profile->height;
if ( ! mlt_service_get_frame( MLT_PRODUCER_SERVICE(producer), &fr, 0 ) && fr )
{
- mlt_properties_set_double( MLT_FRAME_PROPERTIES( fr ), "consumer_aspect_ratio", mlt_profile_sar( profile ) );
if ( ! mlt_frame_get_image( fr, &buffer, &fmt, &w, &h, 0 ) )
{
// Some source properties are not exposed until after the first get_image call.
mlt_service_get_frame( MLT_PRODUCER_SERVICE(producer), &fr, 0 );
p = MLT_FRAME_PROPERTIES( fr );
// mlt_properties_dump(p, stderr);
- if ( mlt_properties_get_int( p, "meta.media.frame_rate_den" ) && mlt_properties_get_int( p, "meta.media.sample_aspect_den" ) )
+ if ( mlt_properties_get_int( p, "meta.media.frame_rate_den" ) &&
+ mlt_properties_get_int( p, "meta.media.sample_aspect_den" ) )
{
profile->width = mlt_properties_get_int( p, "meta.media.width" );
profile->height = mlt_properties_get_int( p, "meta.media.height" );
profile->progressive = mlt_properties_get_int( p, "meta.media.progressive" );
- profile->frame_rate_num = mlt_properties_get_int( p, "meta.media.frame_rate_num" );
- profile->frame_rate_den = mlt_properties_get_int( p, "meta.media.frame_rate_den" );
+ if ( 1000 > mlt_properties_get_double( p, "meta.media.frame_rate_num" )
+ / mlt_properties_get_double( p, "meta.media.frame_rate_den" ) )
+ {
+ profile->frame_rate_num = mlt_properties_get_int( p, "meta.media.frame_rate_num" );
+ profile->frame_rate_den = mlt_properties_get_int( p, "meta.media.frame_rate_den" );
+ } else {
+ profile->frame_rate_num = 60;
+ profile->frame_rate_den = 1;
+ }
// AVCHD is mis-reported as double frame rate.
if ( profile->progressive == 0 && (
profile->frame_rate_num / profile->frame_rate_den == 50 ||
profile->sample_aspect_num = mlt_properties_get_int( p, "meta.media.sample_aspect_num" );
profile->sample_aspect_den = mlt_properties_get_int( p, "meta.media.sample_aspect_den" );
profile->colorspace = mlt_properties_get_int( p, "meta.media.colorspace" );
- profile->display_aspect_num = (int) ( (double) profile->sample_aspect_num * profile->width / profile->sample_aspect_den + 0.5 );
+ profile->display_aspect_num = lrint( (double) profile->sample_aspect_num * profile->width
+ / profile->sample_aspect_den );
profile->display_aspect_den = profile->height;
free( profile->description );
profile->description = strdup( "automatic" );