mlt_properties_set_int( properties, "test_image", 1 );
}
- mlt_properties_set_int( properties, "scaled_width", *width );
- mlt_properties_set_int( properties, "scaled_height", *height );
-
return error;
}
alpha = mlt_properties_get_data( &this->parent, "alpha", NULL );
if ( alpha == NULL )
{
- int size = mlt_properties_get_int( &this->parent, "scaled_width" ) * mlt_properties_get_int( &this->parent, "scaled_height" );
+ int size = mlt_properties_get_int( &this->parent, "width" ) * mlt_properties_get_int( &this->parent, "height" );
alpha = mlt_pool_alloc( size );
memset( alpha, 255, size );
mlt_properties_set_data( &this->parent, "alpha", alpha, size, mlt_pool_release, NULL );
double fps = mlt_producer_get_fps( mlt_producer_cut_parent( producer ) );
int samples = mlt_sample_calculator( fps, frequency, mlt_frame_get_position( this ) );
+ // Increase audio resolution proportional to requested image size
+ while ( samples < w )
+ {
+ frequency += 16000;
+ samples = mlt_sample_calculator( fps, frequency, mlt_frame_get_position( this ) );
+ }
+
// Get the pcm data
mlt_frame_get_audio( this, (void**)&pcm, &format, &frequency, &channels, &samples );
// Render vertical lines
int16_t *ubound = pcm + samples * channels;
int skip = samples / w;
- if ( !skip )
- return NULL;
+ skip = !skip ? 1 : skip;
unsigned char gray = 0xFF / skip;
int i, j, k;
return samples;
}
+
+void mlt_frame_write_ppm( mlt_frame frame )
+{
+ int width;
+ int height;
+ mlt_image_format format = mlt_image_rgb24;
+ uint8_t *image;
+
+ if ( mlt_frame_get_image( frame, &image, &format, &width, &height, 0 ) == 0 )
+ {
+ FILE *file;
+ char filename[16];
+
+ sprintf( filename, "frame-%05d.ppm", mlt_frame_get_position( frame ) );
+ file = fopen( filename, "wb" );
+ if ( !file )
+ return;
+ fprintf( file, "P6\n%d %d\n255\n", width, height);
+ fwrite( image, width * height * 3, 1, file );
+ fclose( file );
+ }
+}