From ee523db03a44cbda4b5def55e0c36427ab6a0747 Mon Sep 17 00:00:00 2001 From: blendamedt Date: Fri, 20 Feb 2009 11:56:17 +0000 Subject: [PATCH] added frei0r producers (patch from jb) thx to jb git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@1360 d19143bc-622f-0410-bfdd-b5b2a6649095 --- src/modules/frei0r/Makefile | 1 + src/modules/frei0r/factory.c | 34 +++++++++++++++++++++++++++++++--- src/modules/frei0r/frei0r_helper.c | 14 ++++++++++---- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/modules/frei0r/Makefile b/src/modules/frei0r/Makefile index 61b927a..c708057 100644 --- a/src/modules/frei0r/Makefile +++ b/src/modules/frei0r/Makefile @@ -3,6 +3,7 @@ include ../../../config.mak TARGET = ../libmltfrei0r$(LIBSUF) OBJS = factory.o \ + producer_frei0r.o \ filter_frei0r.o \ transition_frei0r.o \ frei0r_helper.o diff --git a/src/modules/frei0r/factory.c b/src/modules/frei0r/factory.c index 132123f..fbdd796 100644 --- a/src/modules/frei0r/factory.c +++ b/src/modules/frei0r/factory.c @@ -35,6 +35,8 @@ extern mlt_filter filter_frei0r_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg ); extern mlt_frame filter_process( mlt_filter this, mlt_frame frame ); extern void filter_close( mlt_filter this ); +extern int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int index ); +extern void producer_close( mlt_producer this ); extern void transition_close( mlt_transition this ); extern mlt_frame transition_process( mlt_transition transition, mlt_frame a_frame, mlt_frame b_frame ); @@ -45,6 +47,9 @@ static mlt_properties fill_param_info ( mlt_service_type type, const char *servi struct stat stat_buff; switch ( type ) { + case producer_type: + strcpy ( servicetype , "producer" ); + break; case filter_type: strcpy ( servicetype , "filter" ); break; @@ -84,6 +89,9 @@ static mlt_properties fill_param_info ( mlt_service_type type, const char *servi mlt_properties_set ( metadata, "description" , info.explanation ); mlt_properties_set ( metadata, "creator" , info.author ); switch (type){ + case producer_type: + mlt_properties_set ( metadata, "type" , "producer" ); + break; case filter_type: mlt_properties_set ( metadata, "type" , "filter" ); break; @@ -168,7 +176,24 @@ static void * load_lib( mlt_profile profile, mlt_service_type type , void* hand void* ret=NULL; mlt_properties properties=NULL; - if (type == filter_type && info.plugin_type == F0R_PLUGIN_TYPE_FILTER ){ + if (type == producer_type && info.plugin_type == F0R_PLUGIN_TYPE_SOURCE ){ + mlt_producer this = mlt_producer_new( ); + if ( this != NULL ) + { + this->get_frame = producer_get_frame; + this->close = producer_close; + f0r_init(); + properties=MLT_PRODUCER_PROPERTIES ( this ); + + for (i=0;i