Clean up and border preservation
[melted] / src / framework / mlt_consumer.c
index 0b3f1dd..981a58d 100644 (file)
@@ -269,13 +269,14 @@ static void *consumer_read_ahead_thread( void *arg )
        while ( this->ahead )
        {
                // Put the current frame into the queue
+               time_difference( &ante );
                pthread_mutex_lock( &this->mutex );
                while( this->ahead && mlt_deque_count( this->queue ) >= buffer )
                        pthread_cond_wait( &this->cond, &this->mutex );
                mlt_deque_push_back( this->queue, frame );
                pthread_cond_broadcast( &this->cond );
                pthread_mutex_unlock( &this->mutex );
-               time_wait += time_difference( &ante );
+               time_wait = time_difference( &ante );
 
                // Get the next frame
                frame = mlt_consumer_get_frame( this );
@@ -284,8 +285,17 @@ static void *consumer_read_ahead_thread( void *arg )
                // Increment the count
                count ++;
 
+               // All non normal playback frames should be shown
+               if ( mlt_properties_get_int( mlt_frame_properties( frame ), "_speed" ) != 1 )
+               {
+                       skipped = 0;
+                       time_frame = 0;
+                       time_image = 0;
+                       count = 1;
+               }
+
                // Get the image
-               if ( ( time_frame + time_image ) / count < ( 40000 - ( time_wait / count ) ) )
+               if ( ( time_frame + time_image ) / count < 40000 )
                {
                        // Get the image, mark as rendered and time it
                        mlt_frame_get_image( frame, &image, &this->format, &width, &height, 0 );
@@ -306,7 +316,6 @@ static void *consumer_read_ahead_thread( void *arg )
                                skipped = 0;
                                time_frame = 0;
                                time_image = 0;
-                               time_wait = 0;
                                count = 0;
                        }
                }
@@ -392,7 +401,7 @@ mlt_frame mlt_consumer_rt_frame( mlt_consumer this )
                        int buffer = mlt_properties_get_int( properties, "buffer" );
                        consumer_read_ahead_start( this );
                        if ( buffer > 1 )
-                               size = buffer / 2;
+                               size = buffer;
                }
        
                // Get frame from queue