X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fplaytransport.C;h=7ffb853248bd80adc435f42824330aa8d3e1a657;hb=8d1431081df60da0719db2c77e4c56830521c7e8;hp=991adb9ada070efb187e43ecfbb42715a0a4d3fa;hpb=9dc94ff0a716a04cdec4ef2466ed20227b79c114;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/playtransport.C b/cinelerra-5.1/cinelerra/playtransport.C index 991adb9a..7ffb8532 100644 --- a/cinelerra-5.1/cinelerra/playtransport.C +++ b/cinelerra-5.1/cinelerra/playtransport.C @@ -255,8 +255,12 @@ void PlayTransport::handle_transport(int command, int resume = 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(); + 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) { @@ -268,15 +272,17 @@ void PlayTransport::handle_transport(int command, case SLOW_FWD: case NORMAL_FWD: case FAST_FWD: - if( prev_command == command && !prev_single_frame ) { -// Same direction pressed twice. Stop + 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->que->send_command(STOP, CHANGE_NONE, 0, 0); engine->interrupt_playback(wait_tracking); resume = 1; // fall through @@ -286,36 +292,23 @@ void PlayTransport::handle_transport(int command, case SINGLE_FRAME_REWIND: // Start from scratch engine->que->send_command(command, CHANGE_NONE, get_edl(), - 1, resume, use_inout, toggle_audio); + 1, resume, use_inout, toggle_audio, + mwindow->preferences->forward_render_displacement); 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; + do_stop = 1; + break; } if( do_stop ) { - engine->que->send_command(STOP, CHANGE_NONE, 0, 0, 0, 0); + engine->que->send_command(STOP, CHANGE_NONE, 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 ) { - int command = (prev_direction == PLAY_FORWARD) ? - SINGLE_FRAME_REWIND : SINGLE_FRAME_FWD; - engine->que->send_command(command, - CHANGE_NONE, get_edl(), 1, 0, 0); - } } } @@ -500,7 +493,7 @@ void PlayTransport::change_position(double position) // stop transport 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->que->send_command(STOP, CHANGE_NONE, 0, 0); engine->interrupt_playback(0); } mwindow->gui->lock_window("PlayTransport::change_position"); @@ -515,7 +508,7 @@ void PlayTransport::change_position(double position) case NORMAL_FWD: case FAST_FWD: engine->que->send_command(prev_command, CHANGE_NONE, - get_edl(), 1, 1, using_inout); + get_edl(), 1, 1, using_inout, 0); } }