X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fkdenlive%2Fproducer_framebuffer.c;h=4bdf92a04474199ed122e7665600009daef8bffb;hb=67852388ef853a47d2e4e16a544bb35e8c174d22;hp=9e6ba2da4e4be9d4fca83105732b900a73bbb493;hpb=83018fd07d3ef9881a7feafbefb29e417035a7d7;p=melted diff --git a/src/modules/kdenlive/producer_framebuffer.c b/src/modules/kdenlive/producer_framebuffer.c index 9e6ba2d..4bdf92a 100644 --- a/src/modules/kdenlive/producer_framebuffer.c +++ b/src/modules/kdenlive/producer_framebuffer.c @@ -50,20 +50,23 @@ static int framebuffer_get_image( mlt_frame this, uint8_t **image, mlt_image_for *width = mlt_properties_get_int( frame_properties, "width" ); *height = mlt_properties_get_int( frame_properties, "height" ); - // image stride - int size, xstride, ystride; - switch( *format ){ - case mlt_image_yuv422: - size = *width * *height * 2; - xstride = 2; - ystride = 2 * *width; + int size; + switch ( *format ) + { + case mlt_image_yuv420p: + size = *width * 3 * ( *height + 1 ) / 2; + break; + case mlt_image_rgb24: + size = *width * ( *height + 1 ) * 3; break; default: - fprintf(stderr, "Unsupported image format\n"); - return -1; + *format = mlt_image_yuv422; + size = *width * ( *height + 1 ) * 2; + break; } - uint8_t *output = mlt_properties_get_data( producer_properties, "output_buffer", 0 ); + uint8_t *output = mlt_properties_get_data( producer_properties, "output_buffer", NULL ); + if( output == NULL ) { output = mlt_pool_alloc( size ); @@ -165,7 +168,9 @@ static int producer_get_frame( mlt_producer this, mlt_frame_ptr frame, int index // Get the frame mlt_service_get_frame( MLT_PRODUCER_SERVICE( real_producer ), &first_frame, index ); - double ratio = (double) mlt_properties_get_int( MLT_FRAME_PROPERTIES( first_frame ), "width" ) / (double) mlt_properties_get_int( MLT_FRAME_PROPERTIES( first_frame ), "height" ) / ( (double) mlt_properties_get_int(MLT_FRAME_PROPERTIES( *frame ), "width" ) / (double) mlt_properties_get_int( MLT_FRAME_PROPERTIES( *frame ), "height" )); + double ratio = mlt_properties_get_double( MLT_PRODUCER_PROPERTIES( real_producer ), "aspect_ratio" ) * (double) mlt_properties_get_int( MLT_FRAME_PROPERTIES( first_frame ), "width" ) / (double) mlt_properties_get_int( MLT_FRAME_PROPERTIES( first_frame ), "height" ) / ( (double) mlt_properties_get_int(MLT_FRAME_PROPERTIES( *frame ), "width" ) / (double) mlt_properties_get_int( MLT_FRAME_PROPERTIES( *frame ), "height" )); + + mlt_properties_set_double( properties, "ratio_fix", ratio ); } // Make sure things are in their place