From 0a763f7b10f28184bba59fd8cecbc29999c131ef Mon Sep 17 00:00:00 2001 From: lilo_booter Date: Fri, 17 Dec 2004 15:13:03 +0000 Subject: [PATCH] Feed rework and fixes to westley and composite git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@562 d19143bc-622f-0410-bfdd-b5b2a6649095 --- src/framework/mlt_consumer.c | 3 + src/framework/mlt_playlist.c | 2 +- src/framework/mlt_tractor.c | 19 ++- src/modules/core/filter_data_feed.c | 49 ++++---- src/modules/core/transition_composite.c | 16 ++- src/modules/core/transition_region.c | 3 + src/modules/data_fx.properties | 159 ++++++++++++++++-------- src/modules/gtk2/producer_pango.c | 5 +- src/modules/westley/producer_westley.c | 16 +-- src/valerie/valerie_remote.c | 2 + 10 files changed, 183 insertions(+), 91 deletions(-) diff --git a/src/framework/mlt_consumer.c b/src/framework/mlt_consumer.c index 6c859888..32c76680 100644 --- a/src/framework/mlt_consumer.c +++ b/src/framework/mlt_consumer.c @@ -639,6 +639,9 @@ void mlt_consumer_close( mlt_consumer this ) // Get the childs close function void ( *consumer_close )( ) = this->close; + // Just in case... + mlt_consumer_stop( this ); + // Make sure it only gets called once this->close = NULL; this->parent.close = NULL; diff --git a/src/framework/mlt_playlist.c b/src/framework/mlt_playlist.c index 58b371d7..17aa6a1f 100644 --- a/src/framework/mlt_playlist.c +++ b/src/framework/mlt_playlist.c @@ -1172,7 +1172,7 @@ void mlt_playlist_consolidate_blanks( mlt_playlist this, int keep_length ) } } - if ( !keep_length ) + if ( !keep_length && this->count > 0 ) { playlist_entry *last = this->list[ this->count - 1 ]; if ( mlt_producer_is_blank( last->producer ) ) diff --git a/src/framework/mlt_tractor.c b/src/framework/mlt_tractor.c index 84940891..968b518a 100644 --- a/src/framework/mlt_tractor.c +++ b/src/framework/mlt_tractor.c @@ -309,10 +309,25 @@ static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int tra sprintf( label, "_%s_%d", id, count ++ ); mlt_properties_set_data( frame_properties, label, temp, 0, ( mlt_destructor )mlt_frame_close, NULL ); - // We want the last data_queue + // We want the first data_queue, but after that, all queues are appended if ( !done && mlt_properties_get_data( temp_properties, "data_queue", NULL ) != NULL && mlt_deque_count( mlt_properties_get_data( temp_properties, "data_queue", NULL ) ) != 0 ) - data_queue = mlt_properties_get_data( MLT_FRAME_PROPERTIES( temp ), "data_queue", NULL ); + { + if ( data_queue == NULL ) + { + data_queue = mlt_properties_get_data( MLT_FRAME_PROPERTIES( temp ), "data_queue", NULL ); + } + else + { + // Move the contents of this queue on to the output frames data queue + mlt_deque sub_queue = mlt_properties_get_data( MLT_FRAME_PROPERTIES( temp ), "data_queue", NULL ); + while ( mlt_deque_count( sub_queue ) ) + { + void *p = mlt_deque_pop_back( sub_queue ); + mlt_deque_push_back( data_queue, p ); + } + } + } // Pick up first video and audio frames if ( !done && !mlt_frame_is_test_audio( temp ) && !( mlt_properties_get_int( temp_properties, "hide" ) & 2 ) ) diff --git a/src/modules/core/filter_data_feed.c b/src/modules/core/filter_data_feed.c index 9c8067af..3f70a132 100644 --- a/src/modules/core/filter_data_feed.c +++ b/src/modules/core/filter_data_feed.c @@ -85,35 +85,36 @@ static mlt_frame filter_process( mlt_filter this, mlt_frame frame ) { int i = 0; int count = mlt_properties_count( frame_properties ); - char inactive[ 512 ]; for ( i = 0; i < count; i ++ ) { char *name = mlt_properties_get_name( frame_properties, i ); - if ( !strncmp( name, "meta.attr.", 10 ) && strstr( name, ".inactive" ) == NULL ) + + // Only deal with meta.attr.name values here - these should have a value of 1 to be considered + // Additional properties of the form are meta.attr.name.property are passed down on the feed + if ( !strncmp( name, "meta.attr.", 10 ) && strchr( name + 10, '.' ) == NULL && mlt_properties_get_int( frame_properties, name ) == 1 ) { - char *value = mlt_properties_get( frame_properties, name ); - sprintf( inactive, "%s.inactive", name ); - if ( value != NULL && strcmp( value, "" ) && mlt_properties_get_int( frame_properties, inactive ) == 0 ) - { - // Create a new data feed - mlt_properties feed = mlt_properties_new( ); - - // Assign it the base properties - mlt_properties_set( feed, "id", mlt_properties_get( filter_properties, "_unique_id" ) ); - mlt_properties_set( feed, "type", strrchr( name, '.' ) + 1 ); - mlt_properties_set_position( feed, "position", mlt_frame_get_position( frame ) ); - - // Assign in/out of service we're connected to - mlt_properties_set_position( feed, "in", mlt_properties_get_position( frame_properties, "in" ) ); - mlt_properties_set_position( feed, "out", mlt_properties_get_position( frame_properties, "out" ) ); - - // Assign the value to the feed - mlt_properties_set( feed, "markup", value ); - - // Push it on to the queue - mlt_deque_push_back( data_queue, feed ); - } + // Temp var to hold name + '.' for pass method + char temp[ 132 ]; + + // Create a new data feed + mlt_properties feed = mlt_properties_new( ); + + // Assign it the base properties + mlt_properties_set( feed, "id", mlt_properties_get( filter_properties, "_unique_id" ) ); + mlt_properties_set( feed, "type", strrchr( name, '.' ) + 1 ); + mlt_properties_set_position( feed, "position", mlt_frame_get_position( frame ) ); + + // Assign in/out of service we're connected to + mlt_properties_set_position( feed, "in", mlt_properties_get_position( frame_properties, "in" ) ); + mlt_properties_set_position( feed, "out", mlt_properties_get_position( frame_properties, "out" ) ); + + // Pass all meta properties + sprintf( temp, "%s.", name ); + mlt_properties_pass( feed, frame_properties, temp ); + + // Push it on to the queue + mlt_deque_push_back( data_queue, feed ); } } } diff --git a/src/modules/core/transition_composite.c b/src/modules/core/transition_composite.c index e39047d4..fafe387f 100644 --- a/src/modules/core/transition_composite.c +++ b/src/modules/core/transition_composite.c @@ -612,7 +612,10 @@ static int composite_yuv( uint8_t *p_dest, int width_dest, int height_dest, uint int alpha_stride = stride_src / bpp; if ( uneven ) - p_src -= 2; + { + p_dest += 2; + width_src --; + } // now do the compositing only to cropped extents if ( line_fn != NULL ) @@ -832,7 +835,8 @@ static int get_b_frame_image( mlt_transition this, mlt_frame b_frame, uint8_t ** mlt_properties_set( b_props, "distort", "true" ); // Take into consideration alignment for optimisation - alignment_calculate( geometry ); + if ( !mlt_properties_get_int( properties, "titles" ) ) + alignment_calculate( geometry ); // Adjust to consumer scale int x = geometry->x * *width / geometry->nw; @@ -1087,6 +1091,14 @@ static int transition_get_image( mlt_frame a_frame, uint8_t **image, mlt_image_f // Do the calculation if we need to geometry_calculate( &result, start, field_position ); + if ( mlt_properties_get_int( properties, "titles" ) ) + { + result.nw = result.w = *width; + result.nh = result.h = *height; + result.sw = width_b; + result.sh = height_b; + } + // Align alignment_calculate( &result ); diff --git a/src/modules/core/transition_region.c b/src/modules/core/transition_region.c index 120382e1..688d51cd 100644 --- a/src/modules/core/transition_region.c +++ b/src/modules/core/transition_region.c @@ -214,6 +214,9 @@ static int transition_get_image( mlt_frame frame, uint8_t **image, mlt_image_for count ++; } } + + // Look for the first filter again + filter = mlt_properties_get_data( properties, "_filter_0", NULL ); } else { diff --git a/src/modules/data_fx.properties b/src/modules/data_fx.properties index bcfac209..369cd486 100644 --- a/src/modules/data_fx.properties +++ b/src/modules/data_fx.properties @@ -94,16 +94,19 @@ location.properties.length[1]=filter[1].composite.out location.composite.start=0,80:230x30 location.filter[0]=watermark location.filter[0].resource=colour:0x6c010100 -location.filter[0].composite.start=0%,0%:100%x100%:10 -location.filter[0].composite.key[5]=0%,0%:100%x100%:100 +location.filter[0].composite.start=-100%,0%:100%x100%:100 +location.filter[0].composite.key[25]=0%,0%:100%x100%:100 +location.filter[0].composite.titles=1 location.filter[1]=watermark location.filter[1].resource=pango: -location.filter[1].producer.markup=Shotcut +location.filter[1].producer.markup= location.filter[1].producer.font=San 24 -location.filter[1].composite.start=0%,0%:100%x100%:10 -location.filter[1].composite.key[8]=0%,0%:100%x100%:100 +location.filter[1].composite.start=0%,0%:100%x100%:0 +location.filter[1].composite.key[24]=0%,0%:100%x100%:0 +location.filter[1].composite.key[49]=0%,0%:100%x100%:100 location.filter[1].composite.titles=1 -#location.filter[1].composite.halign=right +location.filter[1].composite.halign=right +location.filter[1].composite.valign=center courtesy=region courtesy.description=Titles @@ -115,16 +118,20 @@ courtesy.properties.length[1]=filter[1].composite.out courtesy.composite.start=0,115:230x30 courtesy.filter[0]=watermark courtesy.filter[0].resource=colour:0x6c010100 -courtesy.filter[0].composite.start=0%,0%:100%x100%:10 -courtesy.filter[0].composite.key[5]=0%,0%:100%x100%:100 +courtesy.filter[0].composite.start=-100%,0%:100%x100%:0 +courtesy.filter[0].composite.key[12]=-100%,0%:100%x100%:0 +courtesy.filter[0].composite.key[37]=0%,0%:100%x100%:100 +courtesy.filter[0].composite.titles=1 courtesy.filter[1]=watermark courtesy.filter[1].resource=pango: courtesy.filter[1].producer.markup=ETV Exclusive courtesy.filter[1].producer.font=San 24 -courtesy.filter[1].composite.start=1%,1%:99%x99%:10 -courtesy.filter[1].composite.key[8]=1%,1%:99%x99%:100 +courtesy.filter[1].composite.start=0%,0%:100%x100%:0 +courtesy.filter[1].composite.key[37]=0%,0%:100%x100%:0 +courtesy.filter[1].composite.key[61]=0%,0%:100%x100%:100 courtesy.filter[1].composite.titles=1 -#exclusive.filter[1].composite.halign=right +courtesy.filter[1].composite.halign=right +courtesy.filter[1].composite.valign=right exclusive=region exclusive.description=Titles @@ -135,34 +142,38 @@ exclusive.composite.start=0,115:230x30 exclusive.filter[0]=watermark exclusive.filter[0].resource=colour:0x6c010100 exclusive.filter[0].composite.start=0%,0%:100%x100%:10 -exclusive.filter[0].composite.key[5]=0%,0%:100%x100%:100 +exclusive.filter[0].composite.key[25]=0%,0%:100%x100%:100 +exclusive.filter[0].composite.titles=1 exclusive.filter[1]=watermark exclusive.filter[1].resource=pango: exclusive.filter[1].producer.markup=ETV Exclusive exclusive.filter[1].producer.font=San 24 -exclusive.filter[1].composite.start=1%,1%:99%x99%:10 -exclusive.filter[1].composite.key[8]=1%,1%:99%x99%:100 +exclusive.filter[1].composite.start=0%,0%:100%x100%:10 +exclusive.filter[1].composite.key[25]=0%,0%:100%x100%:100 exclusive.filter[1].composite.titles=1 -#exclusive.filter[1].composite.halign=right - -shot=region -shot.description=Titles -shot.period=2 -shot.properties.length[0]=filter[0].composite.out -shot.properties.length[1]=filter[1].composite.out -shot.composite.start=590,160:80x25 -shot.filter[0]=watermark -shot.filter[0].resource=colour:0x6c010100 -shot.filter[0].composite.start=0%,0%:100%x100%:10 -shot.filter[0].composite.key[5]=0%,0%:100%x100%:100 -shot.filter[1]=watermark -shot.filter[1].resource=pango: -shot.filter[1].producer.markup=File Shot -shot.filter[1].producer.font=San 20 -shot.filter[1].composite.start=1%,1%:99%x99%:15 -shot.filter[1].composite.key[8]=1%,1%:99%x99%:100 -shot.filter[1].composite.titles=0 -#shot.filter[1].composite.halign=centre +exclusive.filter[1].composite.halign=right +exclusive.filter[1].composite.valign=right + +file_shot=region +file_shot.description=Titles +file_shot.period=2 +file_shot.properties.length[0]=filter[0].composite.out +file_shot.properties.length[1]=filter[1].composite.out +file_shot.composite.start=590,160:80x25 +file_shot.filter[0]=watermark +file_shot.filter[0].resource=colour:0x6c010100 +file_shot.filter[0].composite.start=0%,0%:100%x100%:10 +file_shot.filter[0].composite.key[25]=0%,0%:100%x100%:100 +file_shot.filter[0].composite.titles=1 +file_shot.filter[1]=watermark +file_shot.filter[1].resource=pango: +file_shot.filter[1].producer.markup=File Shot +file_shot.filter[1].producer.font=San 20 +file_shot.filter[1].composite.start=1%,1%:99%x99%:15 +file_shot.filter[1].composite.key[25]=1%,1%:99%x99%:100 +file_shot.filter[1].composite.titles=0 +file_shot.filter[1].composite.halign=centre +file_shot.filter[1].composite.valign=centre special=region special.description=Titles @@ -172,16 +183,20 @@ special.properties.length[1]=filter[1].composite.out special.composite.start=465,375:255x35 special.filter[0]=watermark special.filter[0].resource=colour:0x6c010100 -special.filter[0].composite.start=0%,0%:100%x100%:10 -special.filter[0].composite.key[5]=0%,0%:100%x100%:100 +special.filter[0].composite.start=100%,0%:100%x100%:0 +special.filter[1].composite.key[49]=100%,0%:100%x100%:0 +special.filter[0].composite.key[74]=0%,0%:100%x100%:100 +special.filter[0].composite.titles=1 special.filter[1]=watermark special.filter[1].resource=pango: special.filter[1].producer.markup=Special special.filter[1].producer.font=San 24 -special.filter[1].composite.start=1%,1%:99%x99%:10 -special.filter[1].composite.key[8]=1%,1%:99%x99%:100 +special.filter[1].composite.start=100%,0%:100%x100%:0 +special.filter[1].composite.key[49]=100%,0%:100%x100%:0 +special.filter[1].composite.key[74]=0%,0%:100%x100%:100 special.filter[1].composite.titles=1 -#special.filter[1].composite.halign=centre +special.filter[1].composite.halign=centre +special.filter[1].composite.valign=centre name=region name.description=Titles @@ -194,16 +209,18 @@ name.composite.start=0,410:720x45 name.filter[0]=watermark name.filter[0].resource=colour:0xbbbbbb00 name.filter[0].composite.start=0%,0%:100%x100%:10 -name.filter[0].composite.key[5]=0%,0%:100%x100%:100 +name.filter[0].composite.key[25]=0%,0%:100%x100%:100 +name.filter[0].composite.titles=1 name.filter[1]=watermark name.filter[1].resource=pango: -name.filter[1].producer.markup=Shotcut +name.filter[1].producer.markup= name.filter[1].producer.font=San 32 -name.filter[1].producer.fgcolour=0x6c010100 -name.filter[1].composite.start=1%,1%:99%x99%:10 -name.filter[1].composite.key[8]=1%,1%:99%x99%:100 +name.filter[1].producer.fgcolour=0x6c0101ff +name.filter[1].composite.start=0%,0%:100%x100%:10 +name.filter[1].composite.key[25]=0%,0%:100%x100%:100 name.filter[1].composite.titles=1 -#name.filter[1].composite.halign=centre +name.filter[1].composite.halign=centre +name.filter[1].composite.valign=centre designation=region designation.description=Titles @@ -216,16 +233,18 @@ designation.composite.start=0,455:720x45 designation.filter[0]=watermark designation.filter[0].resource=colour:0xbbbbbb00 designation.filter[0].composite.start=0%,0%:100%x100%:10 -designation.filter[0].composite.key[5]=0%,0%:100%x100%:100 +designation.filter[0].composite.key[25]=0%,0%:100%x100%:100 +designation.filter[0].composite.titles=1 designation.filter[1]=watermark designation.filter[1].resource=pango: -designation.filter[1].producer.markup=Shotcut +designation.filter[1].producer.markup= designation.filter[1].producer.font=San 32 -designation.filter[1].producer.fgcolour=0x6c010100 -designation.filter[1].composite.start=1%,1%:99%x99%:10 -designation.filter[1].composite.key[8]=1%,1%:99%x99%:100 +designation.filter[1].producer.fgcolour=0x6c0101ff +designation.filter[1].composite.start=0%,0%:100%x100%:10 +designation.filter[1].composite.key[25]=0%,0%:100%x100%:100 designation.filter[1].composite.titles=1 -#designation.filter[1].composite.halign=centre +designation.filter[1].composite.halign=centre +designation.filter[1].composite.valign=centre ticker=region ticker.description=Tickertape @@ -236,6 +255,7 @@ ticker.composite.start=0,500:722x75 ticker.filter[0]=watermark ticker.filter[0].resource=colour:0x6c010100 ticker.filter[0].composite.start=0%,0%:100%x100%:100 +ticker.filter[0].composite.titles=1 ticker.filter[1]=watermark ticker.filter[1].resource=pango: ticker.filter[1].producer.markup=Ticker - provided for reference @@ -243,5 +263,40 @@ ticker.filter[1].composite.start=0%,0%:100%x100%:100 ticker.filter[1].composite.titles=0 ticker.filter[1].producer.font=San 24 ticker.filter[1].composite.halign=centre -#ticker.filter[1].composite.valign=centre +ticker.filter[1].composite.titles=1 +ticker.filter[1].composite.valign=centre + +super=region +super.description=Transcription +super.properties.0=filter[1].producer.markup +super.properties.1=filter[2].producer.markup +super.properties.length[0]=filter[0].composite.out +super.properties.length[1]=filter[1].composite.out +super.properties.length[2]=filter[2].composite.out +super.composite.start=0,410:720x90 +super.filter[0]=watermark +super.filter[0].resource=colour:0xbbbbbb00 +super.filter[0].composite.start=0%,0%:100%x100%:10 +super.filter[0].composite.key[25]=0%,0%:100%x100%:100 +super.filter[0].composite.titles=1 +super.filter[1]=watermark +super.filter[1].resource=pango: +super.filter[1].producer.markup= +super.filter[1].producer.font=San 32 +super.filter[1].producer.fgcolour=0x6c0101ff +super.filter[1].composite.start=0,0:100%x100%:10 +super.filter[1].composite.key[25]=0,0:100%x100%:100 +super.filter[1].composite.titles=1 +super.filter[1].composite.halign=centre +super.filter[1].composite.valign=top +super.filter[2]=watermark +super.filter[2].resource=pango: +super.filter[2].producer.markup= +super.filter[2].producer.font=San 32 +super.filter[2].producer.fgcolour=0x6c0101ff +super.filter[2].composite.start=0,0:100%x100%:10 +super.filter[2].composite.key[25]=0,0:100%x100%:100 +super.filter[2].composite.titles=1 +super.filter[2].composite.halign=centre +super.filter[2].composite.valign=bottom diff --git a/src/modules/gtk2/producer_pango.c b/src/modules/gtk2/producer_pango.c index ffb20cbf..6863edb6 100644 --- a/src/modules/gtk2/producer_pango.c +++ b/src/modules/gtk2/producer_pango.c @@ -436,7 +436,8 @@ static int producer_get_image( mlt_frame frame, uint8_t **buffer, mlt_image_form { // Clone our image uint8_t *copy = mlt_pool_alloc( size ); - memcpy( copy, image, size ); + if ( copy != NULL ) + memcpy( copy, image, size ); // We're going to pass the copy on image = copy; @@ -552,7 +553,7 @@ static GdkPixbuf *pango_get_pixbuf( const char *markup, const char *text, const else if ( text != NULL && strcmp( text, "" ) != 0 ) pango_layout_set_text( layout, text, strlen( text ) ); else - return NULL; + pango_layout_set_text( layout, " ", 2 ); pango_layout_get_pixel_size( layout, &w, &h ); pixbuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB, TRUE /* has alpha */, 8, w + 2 * pad, h + 2 * pad ); diff --git a/src/modules/westley/producer_westley.c b/src/modules/westley/producer_westley.c index 276eecf6..111a7e2c 100644 --- a/src/modules/westley/producer_westley.c +++ b/src/modules/westley/producer_westley.c @@ -294,7 +294,7 @@ static void on_start_tractor( deserialise_context context, const xmlChar *name, track_service( context->destructors, service, (mlt_destructor) mlt_tractor_close ); for ( ; atts != NULL && *atts != NULL; atts += 2 ) - mlt_properties_set( MLT_SERVICE_PROPERTIES( service ), (char*) atts[0], (char*) atts[1] ); + mlt_properties_set( MLT_SERVICE_PROPERTIES( service ), (char*) atts[0], atts[1] == NULL ? "" : (char*) atts[1] ); if ( mlt_properties_get( properties, "id" ) != NULL ) mlt_properties_set_data( context->producer_map, mlt_properties_get( properties, "id" ), service, 0, NULL, NULL ); @@ -348,7 +348,7 @@ static void on_start_multitrack( deserialise_context context, const xmlChar *nam mlt_service service = MLT_SERVICE( mlt_tractor_multitrack( MLT_TRACTOR( parent ) ) ); mlt_properties properties = MLT_SERVICE_PROPERTIES( service ); for ( ; atts != NULL && *atts != NULL; atts += 2 ) - mlt_properties_set( properties, (char*) atts[0], (char*) atts[1] ); + mlt_properties_set( properties, (char*) atts[0], atts[1] == NULL ? "" : (char*) atts[1] ); if ( mlt_properties_get( properties, "id" ) != NULL ) mlt_properties_set_data( context->producer_map, mlt_properties_get( properties,"id" ), service, 0, NULL, NULL ); @@ -382,7 +382,7 @@ static void on_start_playlist( deserialise_context context, const xmlChar *name, for ( ; atts != NULL && *atts != NULL; atts += 2 ) { - mlt_properties_set( properties, ( char* )atts[0], ( char* )atts[1] ); + mlt_properties_set( properties, (char*) atts[0], atts[1] == NULL ? "" : (char*) atts[1] ); // Out will be overwritten later as we append, so we need to save it if ( strcmp( atts[ 0 ], "out" ) == 0 ) @@ -428,7 +428,7 @@ static void on_start_producer( deserialise_context context, const xmlChar *name, context_push_service( context, service, mlt_dummy_producer_type ); for ( ; atts != NULL && *atts != NULL; atts += 2 ) - mlt_properties_set( properties, (char*) atts[0], (char*) atts[1] ); + mlt_properties_set( properties, (char*) atts[0], atts[1] == NULL ? "" : (char*) atts[1] ); } static void on_end_producer( deserialise_context context, const xmlChar *name ) @@ -596,7 +596,7 @@ static void on_start_entry( deserialise_context context, const xmlChar *name, co for ( ; atts != NULL && *atts != NULL; atts += 2 ) { - mlt_properties_set( temp, (char*) atts[0], (char*) atts[1] ); + mlt_properties_set( temp, (char*) atts[0], atts[1] == NULL ? "" : (char*) atts[1] ); // Look for the producer attribute if ( strcmp( atts[ 0 ], "producer" ) == 0 ) @@ -679,7 +679,7 @@ static void on_start_track( deserialise_context context, const xmlChar *name, co for ( ; atts != NULL && *atts != NULL; atts += 2 ) { - mlt_properties_set( MLT_SERVICE_PROPERTIES( service ), (char*) atts[0], (char*) atts[1] ); + mlt_properties_set( MLT_SERVICE_PROPERTIES( service ), (char*) atts[0], atts[1] == NULL ? "" : (char*) atts[1] ); // Look for the producer attribute if ( strcmp( atts[ 0 ], "producer" ) == 0 ) @@ -929,8 +929,8 @@ static void on_start_property( deserialise_context context, const xmlChar *name, value = (char*) atts[ 1 ]; } - if ( context->property != NULL && value != NULL ) - mlt_properties_set( properties, context->property, value ); + if ( context->property != NULL ) + mlt_properties_set( properties, context->property, value == NULL ? "" : value ); // Tell parser to collect any further nodes for serialisation context->is_value = 1; diff --git a/src/valerie/valerie_remote.c b/src/valerie/valerie_remote.c index 89a184f5..04ad67aa 100644 --- a/src/valerie/valerie_remote.c +++ b/src/valerie/valerie_remote.c @@ -231,6 +231,8 @@ static valerie_response valerie_remote_push( valerie_remote remote, char *comman mlt_consumer consumer = mlt_factory_consumer( "westley", "buffer" ); mlt_properties properties = MLT_CONSUMER_PROPERTIES( consumer ); char *buffer = NULL; + // Temporary hack + mlt_properties_set( properties, "store", "nle_" ); mlt_consumer_connect( consumer, service ); mlt_consumer_start( consumer ); buffer = mlt_properties_get( properties, "buffer" ); -- 2.39.2