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

Reply via email to