Option to hold feed processing on a track
[melted] / src / framework / mlt_service.c
index 36f79e0..a5e6df9 100644 (file)
@@ -124,19 +124,16 @@ mlt_service_type mlt_service_identify( mlt_service this )
                char *resource = mlt_properties_get( properties, "resource" );
                if ( mlt_type == NULL )
                        type = unknown_type;
+               else if ( resource == NULL || !strcmp( resource, "<producer>" ) )
+                       type = producer_type;
+               else if ( !strcmp( resource, "<playlist>" ) )
+                       type = playlist_type;
+               else if ( !strcmp( resource, "<tractor>" ) )
+                       type = tractor_type;
+               else if ( !strcmp( resource, "<multitrack>" ) )
+                       type = multitrack_type;
                else if ( !strcmp( mlt_type, "producer" ) )
                        type = producer_type;
-               else if ( !strcmp( mlt_type, "mlt_producer" ) )
-               {
-                       if ( resource == NULL || !strcmp( resource, "<producer>" ) )
-                               type = producer_type;
-                       else if ( !strcmp( resource, "<playlist>" ) )
-                               type = playlist_type;
-                       else if ( !strcmp( resource, "<tractor>" ) )
-                               type = tractor_type;
-                       else if ( !strcmp( resource, "<multitrack>" ) )
-                               type = multitrack_type;
-               }
                else if ( !strcmp( mlt_type, "filter" ) )
                        type = filter_type;
                else if ( !strcmp( mlt_type, "transition" ) )
@@ -361,7 +358,6 @@ int mlt_service_get_frame( mlt_service this, mlt_frame_ptr frame, int index )
                mlt_position in = mlt_properties_get_position( properties, "in" );
                mlt_position out = mlt_properties_get_position( properties, "out" );
                mlt_properties_inc_ref( properties );
-               mlt_service_unlock( this );
                result = this->get_frame( this, frame, index );
                if ( result == 0 )
                {
@@ -373,9 +369,11 @@ int mlt_service_get_frame( mlt_service this, mlt_frame_ptr frame, int index )
                        }
                        mlt_service_apply_filters( this, *frame, 1 );
                        mlt_deque_push_back( MLT_FRAME_SERVICE_STACK( *frame ), this );
+                       mlt_service_unlock( this );
                }
                else
                {
+                       mlt_service_unlock( this );
                        mlt_service_close( this );
                }
                return result;