* \brief interface for all frame classes
* \see mlt_frame_s
*
- * Copyright (C) 2003-2009 Ushodaya Enterprises Limited
+ * Copyright (C) 2003-2013 Ushodaya Enterprises Limited
* \author Charles Yates <charles.yates@pandora.be>
+ * \author Dan Dennedy <dan@dennedy.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
*
* \public \memberof mlt_frame_s
* \param self a frame
- * \param the get_image callback
+ * \param get_image the get_image callback
* \return true if error
*/
case mlt_image_yuv420p:
if ( bpp ) *bpp = 3 / 2;
return width * height * 3 / 2;
+ case mlt_image_glsl:
+ case mlt_image_glsl_texture:
+ if ( bpp ) *bpp = 0;
+ return 4;
default:
if ( bpp ) *bpp = 0;
return 0;
mlt_properties_set_data( properties, "test_card_frame", test_frame, 0, ( mlt_destructor )mlt_frame_close, NULL );
mlt_properties_set( test_properties, "rescale.interp", mlt_properties_get( properties, "rescale.interp" ) );
error = mlt_frame_get_image( test_frame, buffer, format, width, height, writable );
- if ( !error && *buffer )
+ if ( !error && buffer && *buffer )
{
mlt_properties_set_double( properties, "aspect_ratio", mlt_frame_get_aspect_ratio( test_frame ) );
mlt_properties_set_int( properties, "width", *width );
mlt_properties_set_int( properties, "height", *height );
- if ( test_frame->convert_image && *buffer && requested_format != mlt_image_none )
+ if ( test_frame->convert_image && requested_format != mlt_image_none )
test_frame->convert_image( test_frame, buffer, format, requested_format );
mlt_properties_set_int( properties, "format", *format );
}
mlt_properties_set_data( properties, "test_card_producer", NULL, 0, NULL, NULL );
}
}
- if ( error && *buffer && *format != mlt_image_none )
+ if ( error && buffer && *format != mlt_image_none )
{
int size = 0;
{
mlt_properties_set_int( properties, "image_count", mlt_properties_get_int( properties, "image_count" ) - 1 );
error = get_image( self, buffer, format, width, height, writable );
- if ( !error && *buffer )
+ if ( !error && buffer && *buffer )
{
mlt_properties_set_int( properties, "width", *width );
mlt_properties_set_int( properties, "height", *height );
- if ( self->convert_image && *buffer && requested_format != mlt_image_none )
+ if ( self->convert_image && requested_format != mlt_image_none )
self->convert_image( self, buffer, format, requested_format );
mlt_properties_set_int( properties, "format", *format );
}
error = generate_test_image( properties, buffer, format, width, height, writable );
}
}
- else if ( mlt_properties_get_data( properties, "image", NULL ) )
+ else if ( mlt_properties_get_data( properties, "image", NULL ) && buffer )
{
*format = mlt_properties_get_int( properties, "format" );
*buffer = mlt_properties_get_data( properties, "image", NULL );
mlt_properties_set_int( properties, "audio_samples", *samples );
mlt_properties_set_int( properties, "audio_format", *format );
- switch( *format )
- {
- case mlt_image_none:
- size = 0;
- *buffer = NULL;
- break;
- case mlt_audio_s16:
- size = *samples * *channels * sizeof( int16_t );
- break;
- case mlt_audio_s32:
- size = *samples * *channels * sizeof( int32_t );
- break;
- case mlt_audio_float:
- size = *samples * *channels * sizeof( float );
- break;
- default:
- break;
- }
+ size = mlt_audio_format_size( *format, *samples, *channels );
if ( size )
*buffer = mlt_pool_alloc( size );
+ else
+ *buffer = NULL;
if ( *buffer )
memset( *buffer, 0, size );
mlt_properties_set_data( properties, "audio", *buffer, size, ( mlt_destructor )mlt_pool_release, NULL );
FILE *file;
char filename[16];
- sprintf( filename, "frame-%05d.ppm", mlt_frame_get_position( frame ) );
+ sprintf( filename, "frame-%05d.ppm", (int)mlt_frame_get_position( frame ) );
file = fopen( filename, "wb" );
if ( !file )
return;
data = mlt_properties_get_data( properties, "image", &size );
if ( data )
{
+ int width = mlt_properties_get_int( properties, "width" );
+ int height = mlt_properties_get_int( properties, "height" );
+
if ( ! size )
size = mlt_image_format_size( mlt_properties_get_int( properties, "format" ),
- mlt_properties_get_int( properties, "width" ),
- mlt_properties_get_int( properties, "height" ), NULL );
+ width, height, NULL );
copy = mlt_pool_alloc( size );
memcpy( copy, data, size );
mlt_properties_set_data( new_props, "image", copy, size, mlt_pool_release, NULL );
if ( data )
{
if ( ! size )
- size = mlt_properties_get_int( properties, "width" ) *
- mlt_properties_get_int( properties, "height" );
+ size = width * height;
copy = mlt_pool_alloc( size );
memcpy( copy, data, size );
mlt_properties_set_data( new_props, "alpha", copy, size, mlt_pool_release, NULL );