From 0bd5d91026b8bd143f957f119d61d5fedd45cf70 Mon Sep 17 00:00:00 2001 From: ddennedy Date: Thu, 5 Feb 2004 05:35:53 +0000 Subject: [PATCH] bugfixes to westley git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@113 d19143bc-622f-0410-bfdd-b5b2a6649095 --- docs/inigo.txt | 2 +- src/framework/mlt_frame.c | 4 ++-- src/modules/westley/consumer_westley.c | 32 ++++++++++++++++++++++---------- src/modules/westley/producer_westley.c | 21 ++++++++++++++++++--- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/docs/inigo.txt b/docs/inigo.txt index 0ea0b93..d62031f 100644 --- a/docs/inigo.txt +++ b/docs/inigo.txt @@ -41,7 +41,7 @@ General rules: produces DV frames. -Terminoligy: +Terminology: 'Producers' typically refer to files but may also indicate devices (such as dv1394 input or video4linux). Hence, the more diff --git a/src/framework/mlt_frame.c b/src/framework/mlt_frame.c index 86920c8..880cdef 100644 --- a/src/framework/mlt_frame.c +++ b/src/framework/mlt_frame.c @@ -721,9 +721,9 @@ int mlt_frame_mix_audio( mlt_frame this, mlt_frame that, float weight, int16_t * double d = 0, s = 0; mlt_frame_get_audio( this, &p_dest, format, &frequency_dest, &channels_dest, &samples_dest ); - fprintf( stderr, "frame dest samples %d channels %d position %lld\n", samples_dest, channels_dest, mlt_properties_get_position( mlt_frame_properties( this ), "position" ) ); + //fprintf( stderr, "frame dest samples %d channels %d position %lld\n", samples_dest, channels_dest, mlt_properties_get_position( mlt_frame_properties( this ), "position" ) ); mlt_frame_get_audio( that, &p_src, format, &frequency_src, &channels_src, &samples_src ); - fprintf( stderr, "frame src samples %d channels %d\n", samples_src, channels_src ); + //fprintf( stderr, "frame src samples %d channels %d\n", samples_src, channels_src ); src = p_src; dest = p_dest; if ( channels_src > 6 ) diff --git a/src/modules/westley/consumer_westley.c b/src/modules/westley/consumer_westley.c index 75932a5..3b37440 100644 --- a/src/modules/westley/consumer_westley.c +++ b/src/modules/westley/consumer_westley.c @@ -26,6 +26,8 @@ #include #include +#define ID_SIZE 128 + /** Forward references to static functions. */ @@ -86,7 +88,8 @@ static inline void serialise_properties( mlt_properties properties, xmlNode *nod // Enumerate the properties for ( i = 0; i < mlt_properties_count( properties ); i++ ) { - if ( mlt_properties_get_value( properties, i ) != NULL ) + if ( mlt_properties_get_value( properties, i ) != NULL && + strcmp( mlt_properties_get_name( properties, i ), "westley" ) != 0 ) { #if 0 p = xmlNewChild( node, NULL, "prop", NULL ); @@ -102,9 +105,9 @@ static void serialise_service( serialise_context context, mlt_service service, x { int i; xmlNode *child = node; - char id[ 31 ]; + char id[ ID_SIZE + 1 ]; char key[ 11 ]; - id[ 30 ] = '\0'; + id[ ID_SIZE ] = '\0'; key[ 10 ] = '\0'; // Iterate over consumer/producer connections @@ -123,9 +126,11 @@ static void serialise_service( serialise_context context, mlt_service service, x // Set the id if ( mlt_properties_get( properties, "id" ) == NULL ) { - snprintf( id, 30, "producer%d", context->producer_count++ ); + snprintf( id, ID_SIZE, "producer%d", context->producer_count++ ); xmlNewProp( child, "id", id ); } + else + strncpy( id, mlt_properties_get( properties, "id" ), ID_SIZE ); serialise_properties( properties, child ); // Add producer to the map @@ -137,6 +142,8 @@ static void serialise_service( serialise_context context, mlt_service service, x snprintf( key, 10, "%p", service ); xmlNewProp( node, "producer", mlt_properties_get( context->producer_map, key ) ); } + if ( mlt_properties_get( properties, "westley" ) != NULL ) + break; } // Tell about the framework container producers @@ -166,7 +173,7 @@ static void serialise_service( serialise_context context, mlt_service service, x // Set the id if ( mlt_properties_get( properties, "id" ) == NULL ) { - snprintf( id, 30, "multitrack%d", context->multitrack_count++ ); + snprintf( id, ID_SIZE, "multitrack%d", context->multitrack_count++ ); xmlNewProp( child, "id", id ); } @@ -205,9 +212,11 @@ static void serialise_service( serialise_context context, mlt_service service, x // Set the id if ( mlt_properties_get( properties, "id" ) == NULL ) { - snprintf( id, 30, "playlist%d", context->playlist_count++ ); + snprintf( id, ID_SIZE, "playlist%d", context->playlist_count++ ); xmlNewProp( child, "id", id ); } + else + strncpy( id, mlt_properties_get( properties, "id" ), ID_SIZE ); xmlNewProp( child, "in", mlt_properties_get( properties, "in" ) ); xmlNewProp( child, "out", mlt_properties_get( properties, "out" ) ); @@ -238,7 +247,7 @@ static void serialise_service( serialise_context context, mlt_service service, x } } } - else + else if ( strcmp( (const char*) node->name, "tractor" ) != 0 ) { snprintf( key, 10, "%p", service ); xmlNewProp( node, "producer", mlt_properties_get( context->producer_map, key ) ); @@ -260,9 +269,12 @@ static void serialise_service( serialise_context context, mlt_service service, x // Set the id if ( mlt_properties_get( properties, "id" ) == NULL ) { - snprintf( id, 30, "tractor%d", context->tractor_count++ ); + snprintf( id, ID_SIZE, "tractor%d", context->tractor_count++ ); xmlNewProp( child, "id", id ); } + + xmlNewProp( child, "in", mlt_properties_get( properties, "in" ) ); + xmlNewProp( child, "out", mlt_properties_get( properties, "out" ) ); // Recurse on connected producer serialise_service( context, mlt_service_get_producer( service ), child ); @@ -284,7 +296,7 @@ static void serialise_service( serialise_context context, mlt_service service, x // Set the id if ( mlt_properties_get( properties, "id" ) == NULL ) { - snprintf( id, 30, "filter%d", context->filter_count++ ); + snprintf( id, ID_SIZE, "filter%d", context->filter_count++ ); xmlNewProp( child, "id", id ); } @@ -306,7 +318,7 @@ static void serialise_service( serialise_context context, mlt_service service, x // Set the id if ( mlt_properties_get( properties, "id" ) == NULL ) { - snprintf( id, 30, "transition%d", context->transition_count++ ); + snprintf( id, ID_SIZE, "transition%d", context->transition_count++ ); xmlNewProp( child, "id", id ); } diff --git a/src/modules/westley/producer_westley.c b/src/modules/westley/producer_westley.c index 923d42a..8c7d9ca 100644 --- a/src/modules/westley/producer_westley.c +++ b/src/modules/westley/producer_westley.c @@ -118,7 +118,9 @@ static void on_start_producer( deserialise_context context, const xmlChar *name, mlt_service service = NULL; for ( ; atts != NULL && *atts != NULL; atts += 2 ) + { mlt_properties_set( properties, (char*) atts[0], (char*) atts[1] ); + } if ( mlt_properties_get( properties, "mlt_service" ) != NULL ) { @@ -205,6 +207,12 @@ static void on_start_filter( deserialise_context context, const xmlChar *name, c mlt_filter_connect( MLT_FILTER( service ), producer, mlt_properties_get_int( properties, "track" ) ); + // Set in and out from producer if non existant + if ( mlt_properties_get( properties, "in" ) == NULL ) + mlt_properties_set_position( properties, "in", mlt_producer_get_in( MLT_PRODUCER( producer ) ) ); + if ( mlt_properties_get( properties, "out" ) == NULL ) + mlt_properties_set_position( properties, "out", mlt_producer_get_out( MLT_PRODUCER( producer ) ) ); + // Propogate the properties mlt_properties_inherit( mlt_service_properties( service ), properties ); mlt_properties_close( properties ); @@ -344,7 +352,7 @@ static void on_end_entry( deserialise_context context, const xmlChar *name ) static void on_end_tractor( deserialise_context context, const xmlChar *name ) { - // Discard the last producer + // Get and discard the last producer mlt_producer multitrack = MLT_PRODUCER( context_pop_service( context ) ); // Inherit the producer's properties @@ -436,12 +444,19 @@ mlt_producer producer_westley_init( char *filename ) break; } } + + // We are done referencing destructor property list + // Set this var to service properties for convenience + properties = mlt_service_properties( service ); // make the returned service destroy the connected services - mlt_properties_set_data( mlt_service_properties( service ), "__destructors__", context->destructors, 0, (mlt_destructor) mlt_properties_close, NULL ); + mlt_properties_set_data( properties, "__destructors__", context->destructors, 0, (mlt_destructor) mlt_properties_close, NULL ); // Now assign additional properties - mlt_properties_set( mlt_service_properties( service ), "resource", filename ); + mlt_properties_set( properties, "resource", filename ); + + // This tells consumer_westley not to deep copy + mlt_properties_set( properties, "westley", "was here" ); } else { -- 1.7.4.4