- // We want the last data_queue
- if ( mlt_properties_get_data( mlt_frame_properties( temp ), "data_queue", NULL ) != NULL )
- data_queue = mlt_properties_get_data( mlt_frame_properties( temp ), "data_queue", NULL );
+ // We want to append all 'final' feeds to the global queue
+ if ( !done && mlt_properties_get_data( temp_properties, "data_queue", NULL ) != NULL )
+ {
+ // 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 );
+ mlt_deque temp = mlt_deque_init( );
+ while ( global_feed && mlt_deque_count( sub_queue ) )
+ {
+ mlt_properties p = mlt_deque_pop_back( sub_queue );
+ if ( mlt_properties_get_int( p, "final" ) )
+ mlt_deque_push_back( data_queue, p );
+ else
+ mlt_deque_push_back( temp, p );
+ }
+ while( mlt_deque_count( temp ) )
+ mlt_deque_push_front( sub_queue, mlt_deque_pop_back( temp ) );
+ mlt_deque_close( temp );
+ }
+
+ // Now do the same with the global queue but without the conditional behaviour
+ if ( mlt_properties_get_data( temp_properties, "global_queue", NULL ) != NULL )
+ {
+ mlt_deque sub_queue = mlt_properties_get_data( MLT_FRAME_PROPERTIES( temp ), "global_queue", NULL );
+ while ( mlt_deque_count( sub_queue ) )
+ {
+ mlt_properties p = mlt_deque_pop_back( sub_queue );
+ mlt_deque_push_back( data_queue, p );
+ }
+ }