X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fwestley%2Fproducer_westley.c;h=49e808b4af6f6d58fe5c88bbafd0ad7a7ae96d18;hb=edfb53ebb1ce5b141e34b7feb7df7448cbc5be96;hp=f7dd08049b98850087155bf98cb44106c6b4140d;hpb=d7ae73d25cf5a38a3a8153ae52409fcbef16bb22;p=melted diff --git a/src/modules/westley/producer_westley.c b/src/modules/westley/producer_westley.c index f7dd080..49e808b 100644 --- a/src/modules/westley/producer_westley.c +++ b/src/modules/westley/producer_westley.c @@ -18,7 +18,9 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -// TODO: destroy unreferenced producers +// TODO: destroy unreferenced producers (they are currently destroyed +// when the returned producer is closed). +// TODO: try using XmlReader interface to avoid global context issues in sax. #include "producer_westley.h" #include @@ -371,8 +373,12 @@ static void on_end_producer( deserialise_context context, const xmlChar *name ) if ( properties == NULL ) return; - // Instatiate the producer - if ( mlt_properties_get( properties, "resource" ) != NULL ) + // Instantiate the producer + if ( mlt_properties_get( properties, "mlt_service" ) != NULL ) + { + service = MLT_SERVICE( mlt_factory_producer( "fezzik", mlt_properties_get( properties, "mlt_service" ) ) ); + } + if ( service == NULL && mlt_properties_get( properties, "resource" ) != NULL ) { char *root = mlt_properties_get( context->producer_map, "_root" ); char *resource = mlt_properties_get( properties, "resource" ); @@ -389,10 +395,6 @@ static void on_end_producer( deserialise_context context, const xmlChar *name ) service = MLT_SERVICE( mlt_factory_producer( "fezzik", full_resource ) ); free( full_resource ); } - if ( service == NULL && mlt_properties_get( properties, "mlt_service" ) != NULL ) - { - service = MLT_SERVICE( mlt_factory_producer( "fezzik", mlt_properties_get( properties, "mlt_service" ) ) ); - } track_service( context->destructors, service, (mlt_destructor) mlt_producer_close ); @@ -620,6 +622,7 @@ mlt_producer producer_westley_init( char *filename ) sax->startElement = on_start_element; sax->endElement = on_end_element; sax->characters = on_characters; + sax->cdataBlock = on_characters; // I REALLY DON'T GET THIS - HOW THE HELL CAN YOU REFERENCE A WESTLEY IN A WESTLEY??? xmlInitParser(); @@ -669,10 +672,9 @@ mlt_producer producer_westley_init( char *filename ) mlt_properties_close( context->producer_map ); //free( context ); free( sax ); - xmlCleanupParser(); + //xmlCleanupParser(); xmlMemoryDump( ); return MLT_PRODUCER( service ); } -