Feed rework and fixes to westley and composite
authorlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Fri, 17 Dec 2004 15:13:03 +0000 (15:13 +0000)
committerlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Fri, 17 Dec 2004 15:13:03 +0000 (15:13 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@562 d19143bc-622f-0410-bfdd-b5b2a6649095

src/framework/mlt_consumer.c
src/framework/mlt_playlist.c
src/framework/mlt_tractor.c
src/modules/core/filter_data_feed.c
src/modules/core/transition_composite.c
src/modules/core/transition_region.c
src/modules/data_fx.properties
src/modules/gtk2/producer_pango.c
src/modules/westley/producer_westley.c
src/valerie/valerie_remote.c

index 6c85988..32c7668 100644 (file)
@@ -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;
index 58b371d..17aa6a1 100644 (file)
@@ -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 ) )
index 8494089..968b518 100644 (file)
@@ -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 ) )
index 9c8067a..3f70a13 100644 (file)
@@ -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 );
                        }
                }
        }
index e39047d..fafe387 100644 (file)
@@ -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 );
 
index 120382e..688d51c 100644 (file)
@@ -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
        {
index bcfac20..369cd48 100644 (file)
@@ -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
 
index ffb20cb..6863edb 100644 (file)
@@ -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 );
index 276eecf..111a7e2 100644 (file)
@@ -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;
index 89a184f..04ad67a 100644 (file)
@@ -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" );