X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fplaytransport.C;h=c7334213e7f3c13e68463cfa668faba41041c460;hp=6fc55d63d376f12fefd1d68dff011764b8344e2f;hb=0513350234a8dcd08e5a0117d5121724ef7b76b6;hpb=b5c58822be78c8820692c916e296a2230bb2b9e2 diff --git a/cinelerra-5.1/cinelerra/playtransport.C b/cinelerra-5.1/cinelerra/playtransport.C index 6fc55d63..c7334213 100644 --- a/cinelerra-5.1/cinelerra/playtransport.C +++ b/cinelerra-5.1/cinelerra/playtransport.C @@ -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 &&