src/framework/mlt_tractor.c
[melted] / src / framework / mlt_tractor.c
index b319a04..3bcf020 100644 (file)
@@ -350,24 +350,22 @@ static int producer_get_frame( mlt_producer parent, mlt_frame_ptr frame, int tra
                                        }
                                        else
                                        {
-                                               void *p = NULL;
-                                               while ( ( p = mlt_deque_pop_front( MLT_FRAME_IMAGE_STACK( temp ) ) ) != NULL )
-                                                       mlt_deque_push_back( MLT_FRAME_IMAGE_STACK( *frame ), p );
+                                               mlt_frame_push_service( *frame, temp );
+                                               mlt_frame_push_service( *frame, producer_get_image );
                                                mlt_properties_set_int( frame_properties, "meta.fx_cut", 1 );
                                        }
 
                                        if ( audio )
                                        {
                                                // Take all but the first placeholding producer and dump on to the audio stack
-                                               void *p = mlt_deque_pop_front( MLT_FRAME_AUDIO_STACK( temp ) );
+                                               void *p = !mlt_frame_is_test_audio( temp ) ? mlt_deque_pop_front( MLT_FRAME_AUDIO_STACK( temp ) ) : NULL;
                                                while ( ( p = mlt_deque_pop_front( MLT_FRAME_AUDIO_STACK( temp ) ) ) != NULL )
                                                        mlt_deque_push_back( MLT_FRAME_AUDIO_STACK( audio ), p );
                                        }
                                        else
                                        {
-                                               void *p = NULL;
-                                               while ( ( p = mlt_deque_pop_front( MLT_FRAME_AUDIO_STACK( temp ) ) ) != NULL )
-                                                       mlt_deque_push_back( MLT_FRAME_AUDIO_STACK( *frame ), p );
+                                               mlt_frame_push_audio( *frame, temp );
+                                               mlt_frame_push_audio( *frame, producer_get_audio );
                                                mlt_properties_set_int( frame_properties, "meta.fx_cut", 1 );
                                        }