// ffmpeg Header files
#include <avformat.h>
+#include <opt.h>
#ifdef SWSCALE
# include <swscale.h>
#endif
// Construct an AVFrame for YUV422 conversion
if ( av_frame == NULL )
- {
av_frame = avcodec_alloc_frame( );
- mlt_properties_set_data( properties, "av_frame", av_frame, 0, av_free, NULL );
- }
while( ret >= 0 && !got_picture )
{
mlt_properties_set_int( properties, "top_field_first", av_frame->top_field_first );
mlt_properties_set_int( properties, "_current_position", int_position );
mlt_properties_set_int( properties, "_got_picture", 1 );
+ mlt_properties_set_data( properties, "av_frame", av_frame, 0, av_free, NULL );
}
else
{
return 0;
}
+/** Process properties as AVOptions and apply to AV context obj
+*/
+
+static void apply_properties( void *obj, mlt_properties properties, int flags )
+{
+ int i;
+ int count = mlt_properties_count( properties );
+ for ( i = 0; i < count; i++ )
+ {
+ const char *opt_name = mlt_properties_get_name( properties, i );
+ const AVOption *opt = av_find_opt( obj, opt_name, NULL, flags, flags );
+ if ( opt != NULL )
+#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(59<<8)+0)
+ av_set_string2( obj, opt_name, mlt_properties_get( properties, opt_name), 0 );
+#else
+ av_set_string( obj, opt_name, mlt_properties_get( properties, opt_name) );
+#endif
+ }
+}
+
/** Set up video handling.
*/
context = mlt_properties_get_data( properties, "video_context", NULL );
mlt_properties_set_data( properties, "dummy_context", NULL, 0, NULL, NULL );
mlt_events_unblock( properties, this );
+
+ // Process properties as AVOptions
+ apply_properties( context, properties, AV_OPT_FLAG_DECODING_PARAM );
}
// Exception handling for video_index
index = -1;
}
avformat_unlock( );
+
+ // Process properties as AVOptions
+ apply_properties( codec_context, properties, AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM );
}
// No codec, no show...
int paused = 0;
// Check for resample and create if necessary
- if ( resample == NULL && ( *frequency != codec_context->sample_rate || codec_context->channels <= 2 ) )
+ if ( resample == NULL && codec_context->channels <= 2 )
{
// Create the resampler
resample = audio_resample_init( *channels, codec_context->channels, *frequency, codec_context->sample_rate );
if ( decode_buffer == NULL )
{
// Allocate the audio buffer
- decode_buffer = mlt_pool_alloc( AVCODEC_MAX_AUDIO_FRAME_SIZE * sizeof( int16_t ) );
+ decode_buffer = av_malloc( AVCODEC_MAX_AUDIO_FRAME_SIZE * sizeof( int16_t ) );
// And store it on properties for reuse
- mlt_properties_set_data( properties, "decode_buffer", decode_buffer, 0, ( mlt_destructor )mlt_pool_release, NULL );
+ mlt_properties_set_data( properties, "decode_buffer", decode_buffer, 0, ( mlt_destructor )av_free, NULL );
}
#if (LIBAVCODEC_VERSION_INT >= ((51<<16)+(71<<8)+0))
index = -1;
}
avformat_unlock( );
+
+ // Process properties as AVOptions
+ apply_properties( codec_context, properties, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM );
}
// No codec, no show...