#include "mlt_frame.h"
#include "mlt_producer.h"
#include "mlt_factory.h"
+#include "mlt_profile.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
if ( this != NULL )
{
- // Get the normalisation
- char *normalisation = mlt_environment( "MLT_NORMALISATION" );
-
// Initialise the properties
mlt_properties properties = &this->parent;
mlt_properties_init( properties, this );
// Set default properties on the frame
mlt_properties_set_position( properties, "_position", 0.0 );
mlt_properties_set_data( properties, "image", NULL, 0, NULL, NULL );
-
- if ( normalisation == NULL || strcmp( normalisation, "NTSC" ) )
- {
- mlt_properties_set_int( properties, "width", 720 );
- mlt_properties_set_int( properties, "height", 576 );
- mlt_properties_set_int( properties, "normalised_width", 720 );
- mlt_properties_set_int( properties, "normalised_height", 576 );
- mlt_properties_set_double( properties, "aspect_ratio", 59.0/54.0 );
- }
- else
- {
- mlt_properties_set_int( properties, "width", 720 );
- mlt_properties_set_int( properties, "height", 480 );
- mlt_properties_set_int( properties, "normalised_width", 720 );
- mlt_properties_set_int( properties, "normalised_height", 480 );
- mlt_properties_set_double( properties, "aspect_ratio", 10.0/11.0 );
- }
-
+ mlt_properties_set_int( properties, "width", mlt_profile_get()->width );
+ mlt_properties_set_int( properties, "height", mlt_profile_get()->height );
+ mlt_properties_set_int( properties, "normalised_width", mlt_profile_get()->width );
+ mlt_properties_set_int( properties, "normalised_height", mlt_profile_get()->height );
+ mlt_properties_set_double( properties, "aspect_ratio", mlt_profile_sar( NULL ) );
mlt_properties_set_data( properties, "audio", NULL, 0, NULL, NULL );
mlt_properties_set_data( properties, "alpha", NULL, 0, NULL, NULL );
register uint8_t *d = yuv;
register int i, j;
+ if ( alpha )
for ( i = 0; i < height; i++ )
{
register uint8_t *s = rgba + ( stride * i );
*d++ = u0;
}
}
+ else
+ for ( i = 0; i < height; i++ )
+ {
+ register uint8_t *s = rgba + ( stride * i );
+ for ( j = 0; j < ( width / 2 ); j++ )
+ {
+ r = *s++;
+ g = *s++;
+ b = *s++;
+ s++;
+ RGB2YUV (r, g, b, y0, u0 , v0);
+ r = *s++;
+ g = *s++;
+ b = *s++;
+ s++;
+ RGB2YUV (r, g, b, y1, u1 , v1);
+ *d++ = y0;
+ *d++ = (u0+u1) >> 1;
+ *d++ = y1;
+ *d++ = (v0+v1) >> 1;
+ }
+ if ( width % 2 )
+ {
+ r = *s++;
+ g = *s++;
+ b = *s++;
+ s++;
+ RGB2YUV (r, g, b, y0, u0 , v0);
+ *d++ = y0;
+ *d++ = u0;
+ }
+ }
+
return ret;
}
register uint8_t *d = yuv;
register int i, j;
+ if ( alpha )
for ( i = 0; i < height; i++ )
{
register uint8_t *s = rgba + ( stride * i );
*d++ = u0;
}
}
+ else
+ for ( i = 0; i < height; i++ )
+ {
+ register uint8_t *s = rgba + ( stride * i );
+ for ( j = 0; j < ( width / 2 ); j++ )
+ {
+ b = *s++;
+ g = *s++;
+ r = *s++;
+ s++;
+ RGB2YUV (r, g, b, y0, u0 , v0);
+ b = *s++;
+ g = *s++;
+ r = *s++;
+ s++;
+ RGB2YUV (r, g, b, y1, u1 , v1);
+ *d++ = y0;
+ *d++ = (u0+u1) >> 1;
+ *d++ = y1;
+ *d++ = (v0+v1) >> 1;
+ }
+ if ( width % 2 )
+ {
+ b = *s++;
+ g = *s++;
+ r = *s++;
+ s++;
+ RGB2YUV (r, g, b, y0, u0 , v0);
+ *d++ = y0;
+ *d++ = u0;
+ }
+ }
return ret;
}
register uint8_t *d = yuv;
register int i, j;
+ if ( alpha )
for ( i = 0; i < height; i++ )
{
register uint8_t *s = rgba + ( stride * i );
*d++ = u0;
}
}
+ else
+ for ( i = 0; i < height; i++ )
+ {
+ register uint8_t *s = rgba + ( stride * i );
+ for ( j = 0; j < ( width / 2 ); j++ )
+ {
+ s++;
+ r = *s++;
+ g = *s++;
+ b = *s++;
+ RGB2YUV (r, g, b, y0, u0 , v0);
+ s++;
+ r = *s++;
+ g = *s++;
+ b = *s++;
+ RGB2YUV (r, g, b, y1, u1 , v1);
+ *d++ = y0;
+ *d++ = (u0+u1) >> 1;
+ *d++ = y1;
+ *d++ = (v0+v1) >> 1;
+ }
+ if ( width % 2 )
+ {
+ s++;
+ r = *s++;
+ g = *s++;
+ b = *s++;
+ RGB2YUV (r, g, b, y0, u0 , v0);
+ *d++ = y0;
+ *d++ = u0;
+ }
+ }
return ret;
}