pooling and properties checks; dv decoder stack; factory cleanup registering
[melted] / src / framework / mlt_producer.c
index 430aab3..a35d134 100644 (file)
@@ -123,18 +123,19 @@ int mlt_producer_seek( mlt_producer this, mlt_position position )
 {
        // Determine eof handling
        char *eof = mlt_properties_get( mlt_producer_properties( this ), "eof" );
+       int use_points = 1 - mlt_properties_get_int( mlt_producer_properties( this ), "ignore_points" );
 
        // Check bounds
        if ( position < 0 )
        {
                position = 0;
        }
-       else if ( !strcmp( eof, "pause" ) && position >= mlt_producer_get_playtime( this ) )
+       else if ( use_points && !strcmp( eof, "pause" ) && position >= mlt_producer_get_playtime( this ) )
        {
                mlt_producer_set_speed( this, 0 );
                position = mlt_producer_get_playtime( this ) - 1;
        }
-       else if ( !strcmp( eof, "loop" ) && position >= mlt_producer_get_playtime( this ) )
+       else if ( use_points && !strcmp( eof, "loop" ) && position >= mlt_producer_get_playtime( this ) )
        {
                position = position % mlt_producer_get_playtime( this );
        }
@@ -143,7 +144,7 @@ int mlt_producer_seek( mlt_producer this, mlt_position position )
        mlt_properties_set_position( mlt_producer_properties( this ), "_position", position );
 
        // Calculate the absolute frame
-       mlt_properties_set_position( mlt_producer_properties( this ), "_frame", mlt_producer_get_in( this ) + position );
+       mlt_properties_set_position( mlt_producer_properties( this ), "_frame", use_points * mlt_producer_get_in( this ) + position );
 
        return 0;
 }
@@ -297,6 +298,8 @@ static int producer_get_frame( mlt_service service, mlt_frame_ptr frame, int ind
        mlt_properties_set_double( properties, "fps", mlt_producer_get_fps( this ) );
        double speed = mlt_producer_get_speed( this );
        mlt_properties_set_double( properties, "_speed", speed );
+       mlt_properties_set_int( properties, "test_audio", mlt_frame_is_test_audio( *frame ) );
+       mlt_properties_set_int( properties, "test_image", mlt_frame_is_test_card( *frame ) );
 
        return 0;
 }