- if(!get_edl()) return;
-
-// Stop requires transferring the output buffer to a refresh buffer.
- int do_stop = 0;
-//printf("PlayTransport::handle_transport 1 %d\n", command);
- int prev_command = engine->command->command;
- int prev_direction = engine->command->get_direction();
- int prev_single_frame = engine->command->single_frame();
-
-// Dispatch command
- switch(command)
- {
-// Commands that play back
- case FAST_REWIND:
- case NORMAL_REWIND:
- case SLOW_REWIND:
- case SINGLE_FRAME_REWIND:
- case SINGLE_FRAME_FWD:
- case SLOW_FWD:
- case NORMAL_FWD:
- case FAST_FWD:
-// Same direction pressed twice. Stop
- if(prev_command == command &&
- !prev_single_frame)
- {
- do_stop = 1;
- }
- else
-// Resume or change direction
- if(prev_command != STOP &&
- prev_command != COMMAND_NONE &&
- prev_command != SINGLE_FRAME_FWD &&
- prev_command != SINGLE_FRAME_REWIND)
- {
- engine->que->send_command(STOP,
- CHANGE_NONE,
- 0,
- 0,
- 0,
- 0);
- engine->interrupt_playback(wait_tracking);
- engine->que->send_command(command,
- CHANGE_NONE,
- get_edl(),
- 1,
- 1,
- use_inout);
- }
- else
-// Start from scratch
- {
- engine->que->send_command(command,
- CHANGE_NONE,
- get_edl(),
- 1,
- 0,
- use_inout);
- }
- 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);
-// This is necessary to get an OpenGL output buffer
-// printf("PlayTransport::handle_transport 2 update_refresh=%d prev_command=%d prev_direction=%d\n",
-// update_refresh, prev_command, prev_direction);
- if(!prev_single_frame &&
- update_refresh &&
- prev_command != STOP &&
- prev_command != COMMAND_NONE)
- {
- engine->que->send_command(
- (prev_direction == PLAY_FORWARD) ? SINGLE_FRAME_REWIND : SINGLE_FRAME_FWD,
- CHANGE_NONE,
- get_edl(),
- 1,
- 0,
- 0);
- }
- }
+ 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);