mixer
[goodguy/history.git] / cinelerra-5.1 / cinelerra / playtransport.C
index 6fc55d63d376f12fefd1d68dff011764b8344e2f..c7334213e7f3c13e68463cfa668faba41041c460 100644 (file)
@@ -179,8 +179,13 @@ int PlayTransport::flip_vertical(int vertical, int &x, int &y)
 
 int PlayTransport::keypress_event()
 {
-       int result = 1;
        int key = subwindow->get_keypress();
+       return do_keypress(key);
+}
+
+int PlayTransport::do_keypress(int key)
+{
+       int result = 1;
 // unqualified keys, still holding lock
        switch( key ) {
        case HOME:
@@ -275,71 +280,13 @@ void PlayTransport::goto_end()
 void PlayTransport::handle_transport(int command,
        int wait_tracking, int use_inout, int update_refresh, int toggle_audio)
 {
-       if( !get_edl() ) return;
-
-// Stop requires transferring the output buffer to a refresh buffer.
-       int do_stop = 0;
-       int resume = 0;
-//printf("PlayTransport::handle_transport 1 %d\n", command);
-       int prev_command = engine->command->command;
-       int prev_single_frame = engine->command->single_frame();
-       int prev_audio = engine->command->audio_toggle ?
-                !prev_single_frame : prev_single_frame;
-       int cur_single_frame = TransportCommand::single_frame(command);
-       int cur_audio = toggle_audio ?
-                !cur_single_frame : cur_single_frame;
-
-// Dispatch command
-       switch(command) {
-       case FAST_REWIND:       // Commands that play back
-       case NORMAL_REWIND:
-       case SLOW_REWIND:
-       case SINGLE_FRAME_REWIND:
-       case SINGLE_FRAME_FWD:
-       case SLOW_FWD:
-       case NORMAL_FWD:
-       case FAST_FWD:
-               if( !prev_single_frame &&
-                   prev_command == command &&
-                   cur_audio == prev_audio ) {
-// Same direction pressed twice and no change in audio state,  Stop
-                       do_stop = 1;
-                       break;
-               }
-// Resume or change direction
-               switch( prev_command ) {
-               default:
-                       engine->que->send_command(STOP, CHANGE_NONE, 0, 0);
-                       engine->interrupt_playback(wait_tracking);
-                       resume = 1;
-// fall through
-               case STOP:
-               case COMMAND_NONE:
-               case SINGLE_FRAME_FWD:
-               case SINGLE_FRAME_REWIND:
-// Start from scratch
-                       engine->que->send_command(command, CHANGE_NONE, get_edl(),
-                               1, resume, use_inout, toggle_audio,
-                               mwindow->preferences->forward_render_displacement);
-                       break;
-               }
-               break;
-
-// Commands that stop
-       case STOP:
-       case REWIND:
-       case GOTO_END:
-               do_stop = 1;
-               break;
-       }
-
-       if( do_stop ) {
-               engine->que->send_command(STOP, CHANGE_NONE, 0, 0);
-               engine->interrupt_playback(wait_tracking);
-       }
+       EDL *edl = get_edl();
+       if( !edl ) return;
+       if( !is_vwindow() )
+               mwindow->queue_mixers(edl, command, wait_tracking, use_inout, update_refresh, toggle_audio);
+       engine->issue_command(edl, command, wait_tracking, use_inout, update_refresh, toggle_audio);
 }
 
-
 EDL* PlayTransport::get_edl()
 {
        return mwindow->edl;
@@ -514,8 +461,7 @@ int StopButton::handle_event()
 
 void PlayTransport::change_position(double position)
 {
-       EDL *edl = get_edl();
-       if( !edl ) return;
+       if( !get_edl() ) return;
        int prev_command = engine->command->command;
 // stop transport
        if( prev_command != STOP && prev_command != COMMAND_NONE &&