X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Favformat%2Fconsumer_avformat.c;h=5cf2b2e796f0d6b0ca5fda23ade84865b848e233;hb=d5fa53ca96e2cf875f7de0890292d9db2abbda80;hp=e6fa1c3e147a0537d4f75c1e761622f08627694d;hpb=1c6107cc1bf167db12f2f5328cf091a33033e2a6;p=melted diff --git a/src/modules/avformat/consumer_avformat.c b/src/modules/avformat/consumer_avformat.c index e6fa1c3..5cf2b2e 100644 --- a/src/modules/avformat/consumer_avformat.c +++ b/src/modules/avformat/consumer_avformat.c @@ -22,6 +22,7 @@ // mlt Header files #include #include +#include // System header files #include @@ -40,6 +41,11 @@ #endif #include +#if LIBAVUTIL_VERSION_INT < (50<<16) +#define PIX_FMT_RGB32 PIX_FMT_RGBA32 +#define PIX_FMT_YUYV422 PIX_FMT_YUV422 +#endif + // // This structure should be extended and made globally available in mlt // @@ -174,6 +180,7 @@ mlt_consumer consumer_avformat_init( mlt_profile profile, char *arg ) // Default to separate processing threads for producer and consumer with no frame dropping! mlt_properties_set_int( properties, "real_time", -1 ); + mlt_properties_set_int( properties, "prefill", 1 ); // Set up start/stop/terminated callbacks this->start = consumer_start; @@ -808,7 +815,7 @@ static void *consumer_thread( void *arg ) // Need two av pictures for converting AVFrame *output = NULL; - AVFrame *input = alloc_picture( PIX_FMT_YUV422, width, height ); + AVFrame *input = alloc_picture( PIX_FMT_YUYV422, width, height ); // For receiving images from an mlt_frame uint8_t *image; @@ -1100,17 +1107,17 @@ static void *consumer_thread( void *arg ) // Do the colour space conversion #ifdef SWSCALE - struct SwsContext *context = sws_getContext( width, height, PIX_FMT_YUV422, + struct SwsContext *context = sws_getContext( width, height, PIX_FMT_YUYV422, width, height, video_st->codec->pix_fmt, SWS_FAST_BILINEAR, NULL, NULL, NULL); sws_scale( context, input->data, input->linesize, 0, height, output->data, output->linesize); sws_freeContext( context ); #else - img_convert( ( AVPicture * )output, video_st->codec->pix_fmt, ( AVPicture * )input, PIX_FMT_YUV422, width, height ); + img_convert( ( AVPicture * )output, video_st->codec->pix_fmt, ( AVPicture * )input, PIX_FMT_YUYV422, width, height ); #endif // Apply the alpha if applicable - if ( video_st->codec->pix_fmt == PIX_FMT_RGBA32 ) + if ( video_st->codec->pix_fmt == PIX_FMT_RGB32 ) { uint8_t *alpha = mlt_frame_get_alpha_mask( frame ); register int n; @@ -1331,7 +1338,7 @@ static void *consumer_thread( void *arg ) // Remove the x264 dual pass logs char *cwd = getcwd( NULL, 0 ); - char *file = "x264_2pass.log"; + const char *file = "x264_2pass.log"; char *full = malloc( strlen( cwd ) + strlen( file ) + 2 ); sprintf( full, "%s/%s", cwd, file ); remove( full );