{
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 );
}
}
}
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
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
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
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
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
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
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
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
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 );
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 );
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 )
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 )
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 )
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 )
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;