]> git.sesse.net Git - mlt/commitdiff
Mutex locking in the get frame
authorlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Tue, 14 Dec 2004 21:38:13 +0000 (21:38 +0000)
committerlilo_booter <lilo_booter@d19143bc-622f-0410-bfdd-b5b2a6649095>
Tue, 14 Dec 2004 21:38:13 +0000 (21:38 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@560 d19143bc-622f-0410-bfdd-b5b2a6649095

src/framework/mlt_producer.c
src/framework/mlt_service.c

index 6dc08e1ce54862c01608c5c874c2ee47ce962158..c465181606ede1ad9955c54440caabdee58c4f0f 100644 (file)
@@ -399,7 +399,8 @@ mlt_position mlt_producer_get_length( mlt_producer this )
 
 void mlt_producer_prepare_next( mlt_producer this )
 {
-       mlt_producer_seek( this, mlt_producer_position( this ) + mlt_producer_get_speed( this ) );
+       if ( mlt_producer_get_speed( this ) != 0 )
+               mlt_producer_seek( this, mlt_producer_position( this ) + mlt_producer_get_speed( this ) );
 }
 
 /** Get a frame.
index d8173d670d6b902c10372efee05a776c70ee8651..a5e6df93b2b57e77a4f614463d8af5c8e50f141f 100644 (file)
@@ -358,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 )
                {
@@ -370,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;