Hi,
Einar Rünkaru wrote:
> Hi.
>
> On Sat, Mar 23, 2013 at 1:26 PM, Johannes Mueller
>
> <[email protected]> wrote:
> > Hi,
> >
> > there is this patch around in the archives of this list:
> >
> > http://www.mail-archive.com/[email protected]/msg09196.html
> >
> > It introduces more playback speeds. I cleaned it up a bit and applied it
> > to
> > the current stable git rep code. It works nicely together with the Contact
> > ShuttlePROv2 which has seven speed steps in both directions.
>
> Can you post your cleaned up patch?
Attatched here as a git diff. Tested against the stable git rep.
What I changed compared to the original patch:
* kicked out some debugging printfs
* adjusted the speeds: they were faster in the original patch. The speeds
available now are: 0.5x 1.0x 2.0x 4.0x 8.0x 16.0x 32.0x.
* tidied up some spaces and indentations
Johannes
diff --git a/cinelerra/playtransport.C b/cinelerra/playtransport.C
index f32eb40..4ca3eb0 100644
--- a/cinelerra/playtransport.C
+++ b/cinelerra/playtransport.C
@@ -213,32 +213,54 @@ int PlayTransport::keypress_event()
}
subwindow->unlock_window();
-
- switch(subwindow->get_keypress())
+ if (subwindow->alt_down())
{
- case KPPLUS: handle_transport(FAST_REWIND, 0, use_inout); result = 1; break;
- case KP6: handle_transport(NORMAL_REWIND, 0, use_inout); result = 1; break;
- case KP5: handle_transport(SLOW_REWIND, 0, use_inout); result = 1; break;
- case KP4: handle_transport(SINGLE_FRAME_REWIND, 0, use_inout); result = 1; break;
- case KP1: handle_transport(SINGLE_FRAME_FWD, 0, use_inout); result = 1; break;
- case KP2: handle_transport(SLOW_FWD, 0, use_inout); result = 1; break;
- case KP3: handle_transport(NORMAL_FWD, 0, use_inout); result = 1; break;
- case KPENTER: handle_transport(FAST_FWD, 0, use_inout); result = 1; break;
- case KPINS: handle_transport(STOP, 0, use_inout); result = 1; break;
- case ' ': handle_transport(NORMAL_FWD, 0, use_inout); result = 1; break;
- case 'k': handle_transport(STOP, 0, use_inout); result = 1; break;
- case END:
- subwindow->lock_window("PlayTransport::keypress_event 3");
- goto_end();
- result = 1;
- subwindow->unlock_window();
- break;
- case HOME:
- subwindow->lock_window("PlayTransport::keypress_event 4");
- goto_start();
- result = 1;
- subwindow->unlock_window();
- break;
+ // printf("received numpad-hit with hold ALT! %i\n", subwindow->get_keypress());
+ switch(subwindow->get_keypress())
+ {
+ case KPPLUS: handle_transport(SHIFTED_FAST_REWIND, 0, use_inout); result = 1; break;
+ case KP6: handle_transport(SHIFTED_NORMAL_REWIND, 0, use_inout); result = 1; break;
+ case KP5: handle_transport(SHIFTED_SLOW_REWIND, 0, use_inout); result = 1; break;
+ case KP4: handle_transport(SHIFTED_SINGLE_FRAME_REWIND, 0, use_inout); result = 1; break;
+ case KP1: handle_transport(SHIFTED_SINGLE_FRAME_FWD, 0, use_inout); result = 1; break;
+ case KP2: handle_transport(SHIFTED_SLOW_FWD, 0, use_inout); result = 1; break;
+ case KP3: handle_transport(SHIFTED_NORMAL_FWD, 0, use_inout); result = 1; break;
+ case KPENTER: handle_transport(SHIFTED_FAST_FWD, 0, use_inout); result = 1; break;
+ case KPINS: handle_transport(STOP, 0, use_inout); result = 1; break;
+ case ' ': handle_transport(NORMAL_FWD, 0, use_inout); result = 1; break;
+ case 'k': handle_transport(STOP, 0, use_inout); result = 1; break;
+ }
+ }
+ else
+ {
+ // printf("received numpad-hit without hold ALT! %i\n", subwindow->get_keypress());
+
+ switch(subwindow->get_keypress())
+ {
+ case KPPLUS: handle_transport(FAST_REWIND, 0, use_inout); result = 1; break;
+ case KP6: handle_transport(NORMAL_REWIND, 0, use_inout); result = 1; break;
+ case KP5: handle_transport(SLOW_REWIND, 0, use_inout); result = 1; break;
+ case KP4: handle_transport(SINGLE_FRAME_REWIND, 0, use_inout); result = 1; break;
+ case KP1: handle_transport(SINGLE_FRAME_FWD, 0, use_inout); result = 1; break;
+ case KP2: handle_transport(SLOW_FWD, 0, use_inout); result = 1; break;
+ case KP3: handle_transport(NORMAL_FWD, 0, use_inout); result = 1; break;
+ case KPENTER: handle_transport(FAST_FWD, 0, use_inout); result = 1; break;
+ case KPINS: handle_transport(STOP, 0, use_inout); result = 1; break;
+ case ' ': handle_transport(NORMAL_FWD, 0, use_inout); result = 1; break;
+ case 'k': handle_transport(STOP, 0, use_inout); result = 1; break;
+ case END:
+ subwindow->lock_window("PlayTransport::keypress_event 3");
+ goto_end();
+ result = 1;
+ subwindow->unlock_window();
+ break;
+ case HOME:
+ subwindow->lock_window("PlayTransport::keypress_event 4");
+ goto_start();
+ result = 1;
+ subwindow->unlock_window();
+ break;
+ }
}
subwindow->lock_window("PlayTransport::keypress_event 5");
@@ -277,6 +299,14 @@ void PlayTransport::handle_transport(int command,
switch(command)
{
// Commands that play back
+ case SHIFTED_FAST_REWIND:
+ case SHIFTED_NORMAL_REWIND:
+ case SHIFTED_SLOW_REWIND:
+ case SHIFTED_SINGLE_FRAME_REWIND:
+ case SHIFTED_SINGLE_FRAME_FWD:
+ case SHIFTED_SLOW_FWD:
+ case SHIFTED_NORMAL_FWD:
+ case SHIFTED_FAST_FWD:
case FAST_REWIND:
case NORMAL_REWIND:
case SLOW_REWIND:
diff --git a/cinelerra/transportque.C b/cinelerra/transportque.C
index 6327698..a4b301a 100644
--- a/cinelerra/transportque.C
+++ b/cinelerra/transportque.C
@@ -105,6 +105,10 @@ int TransportCommand::get_direction()
{
switch(command)
{
+ case SHIFTED_SINGLE_FRAME_FWD:
+ case SHIFTED_NORMAL_FWD:
+ case SHIFTED_FAST_FWD:
+ case SHIFTED_SLOW_FWD:
case SINGLE_FRAME_FWD:
case NORMAL_FWD:
case FAST_FWD:
@@ -113,6 +117,10 @@ int TransportCommand::get_direction()
return PLAY_FORWARD;
break;
+ case SHIFTED_SINGLE_FRAME_REWIND:
+ case SHIFTED_NORMAL_REWIND:
+ case SHIFTED_FAST_REWIND:
+ case SHIFTED_SLOW_REWIND:
case SINGLE_FRAME_REWIND:
case NORMAL_REWIND:
case FAST_REWIND:
@@ -147,6 +155,26 @@ float TransportCommand::get_speed()
case FAST_REWIND:
return 2;
break;
+
+ case SHIFTED_SINGLE_FRAME_FWD:
+ case SHIFTED_SINGLE_FRAME_REWIND:
+ return 4;
+ break;
+
+ case SHIFTED_SLOW_FWD:
+ case SHIFTED_SLOW_REWIND:
+ return 8;
+ break;
+
+ case SHIFTED_NORMAL_FWD:
+ case SHIFTED_NORMAL_REWIND:
+ return 16;
+ break;
+
+ case SHIFTED_FAST_FWD:
+ case SHIFTED_FAST_REWIND:
+ return 32;
+ break;
}
}
@@ -160,6 +188,10 @@ void TransportCommand::set_playback_range(EDL *edl, int use_inout)
switch(command)
{
+ case SHIFTED_SLOW_FWD:
+ case SHIFTED_FAST_FWD:
+ case SHIFTED_NORMAL_FWD:
+ case SHIFTED_SINGLE_FRAME_FWD:
case SLOW_FWD:
case FAST_FWD:
case NORMAL_FWD:
@@ -175,6 +207,10 @@ void TransportCommand::set_playback_range(EDL *edl, int use_inout)
}
break;
+ case SHIFTED_SLOW_REWIND:
+ case SHIFTED_FAST_REWIND:
+ case SHIFTED_NORMAL_REWIND:
+ case SHIFTED_SINGLE_FRAME_REWIND:
case SLOW_REWIND:
case FAST_REWIND:
case NORMAL_REWIND:
diff --git a/cinelerra/transportque.inc b/cinelerra/transportque.inc
index b83437a..3cb1482 100644
--- a/cinelerra/transportque.inc
+++ b/cinelerra/transportque.inc
@@ -44,6 +44,15 @@
#define REWIND 11
#define GOTO_END 12
#define CURRENT_FRAME 13
+#define SHIFTED_SINGLE_FRAME_FWD 14
+#define SHIFTED_NORMAL_FWD 15
+#define SHIFTED_FAST_FWD 16
+#define SHIFTED_SINGLE_FRAME_REWIND 17
+#define SHIFTED_NORMAL_REWIND 18
+#define SHIFTED_FAST_REWIND 19
+#define SHIFTED_PAUSE 20
+#define SHIFTED_SLOW_FWD 21
+#define SHIFTED_SLOW_REWIND 22
// Level of change. Changes have to be inclusive of all the lesser changes.
// Delete cache
diff --git a/cinelerra/virtualaconsole.C b/cinelerra/virtualaconsole.C
index 4551d1f..08933d7 100644
--- a/cinelerra/virtualaconsole.C
+++ b/cinelerra/virtualaconsole.C
@@ -264,8 +264,10 @@ int VirtualAConsole::process_buffer(int64_t len,
}
if(!renderengine->audio->get_interrupted())
{
- renderengine->audio->write_buffer(audio_out_packed,
- real_output_len);
+ if (renderengine->command->get_speed() <= 2)
+ {
+ renderengine->audio->write_buffer(audio_out_packed, real_output_len);
+ }
}
if(renderengine->audio->get_interrupted()) interrupt = 1;
_______________________________________________
Cinelerra mailing list
[email protected]
https://lists.skolelinux.org/listinfo/cinelerra