producer_avformat.c: add support for AVOptions as properties.
authorddennedy <ddennedy@d19143bc-622f-0410-bfdd-b5b2a6649095>
Thu, 18 Dec 2008 04:42:53 +0000 (04:42 +0000)
committerddennedy <ddennedy@d19143bc-622f-0410-bfdd-b5b2a6649095>
Thu, 18 Dec 2008 04:42:53 +0000 (04:42 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@1267 d19143bc-622f-0410-bfdd-b5b2a6649095

src/modules/avformat/producer_avformat.c

index 3a9b46c..3763bdb 100644 (file)
@@ -25,6 +25,7 @@
 
 // ffmpeg Header files
 #include <avformat.h>
+#include <opt.h>
 #ifdef SWSCALE
 #  include <swscale.h>
 #endif
@@ -797,6 +798,26 @@ static int producer_get_image( mlt_frame frame, uint8_t **buffer, mlt_image_form
        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.
 */
 
@@ -820,6 +841,9 @@ static void producer_set_up_video( mlt_producer this, mlt_frame frame )
                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
@@ -894,6 +918,9 @@ static void producer_set_up_video( mlt_producer this, mlt_frame frame )
                                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...
@@ -1293,6 +1320,9 @@ static void producer_set_up_audio( mlt_producer this, mlt_frame frame )
                                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...