- 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, 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);
- break;
- }
- break;
-
-// Commands that stop
- case STOP:
- do_stop = 1;
- break;
-
- case REWIND:
- case GOTO_END:
- engine->que->send_command(STOP, CHANGE_NONE, 0, 0, 0, 0);
- engine->interrupt_playback(wait_tracking);
- break;
- }
-
- if( do_stop ) {
- engine->que->send_command(STOP, CHANGE_NONE, 0, 0, 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, 0);
+ engine->issue_command(edl, command, wait_tracking, use_inout, update_refresh, toggle_audio, loop_play);