hiho,
i have create a small experimental patch against the segfaults if buffersize 
will changed.
as i say its more or less only testcode. but the way to do for jack output is 
really easy.
for other drivers i think its a bit complexer. anyway, here is a smooth working 
patch for jack output driver.
greetings wolke

ahh, i hope this mail will arrive. looks like the server don't respond. 
Index: libs/hydrogen/include/hydrogen/IO/JackOutput.h
===================================================================
--- libs/hydrogen/include/hydrogen/IO/JackOutput.h	(Revision 1250)
+++ libs/hydrogen/include/hydrogen/IO/JackOutput.h	(Arbeitskopie)
@@ -90,6 +90,7 @@
 
 	int init( unsigned bufferSize );
 
+	virtual void refreshBufferSize();
 	virtual void play();
 	virtual void stop();
 	virtual void locate( unsigned long nFrame );
@@ -124,6 +125,8 @@
 	int locate_countdown;      	// (Unrelated) countdown, for postponing a call to 'locate'.
 	unsigned long locate_frame;	// The frame to locate to (used in 'locateInNCycles'.)
 
+	int old_buffer_size;
+
 	JackProcessCallback processCallback;
 	jack_port_t *output_port_1;
 	jack_port_t *output_port_2;
Index: libs/hydrogen/src/IO/jack_output.cpp
===================================================================
--- libs/hydrogen/src/IO/jack_output.cpp	(Revision 1250)
+++ libs/hydrogen/src/IO/jack_output.cpp	(Arbeitskopie)
@@ -193,6 +193,10 @@
 	return jack_server_bufferSize;
 }
 
+void JackOutput::refreshBufferSize()
+{
+}
+
 /* JackOutput::getArdourTransportAdjustment()
  *
  * When using Hydrogen and Ardour together with the JACK transport,
@@ -412,12 +416,24 @@
 
 float* JackOutput::getOut_L()
 {
+	if( old_buffer_size != jack_server_bufferSize ){
+		Hydrogen::get_instance()->restartDrivers();
+		return NULL;
+	}
+	old_buffer_size = jack_server_bufferSize;
+
 	jack_default_audio_sample_t *out = ( jack_default_audio_sample_t * ) jack_port_get_buffer ( output_port_1, jack_server_bufferSize );
 	return out;
 }
 
 float* JackOutput::getOut_R()
 {
+	if( old_buffer_size != jack_server_bufferSize ){
+		Hydrogen::get_instance()->restartDrivers();
+		return NULL;
+	}
+	old_buffer_size = jack_server_bufferSize;
+
 	jack_default_audio_sample_t *out = ( jack_default_audio_sample_t * ) jack_port_get_buffer ( output_port_2, jack_server_bufferSize );
 	return out;
 }
@@ -527,8 +543,8 @@
 	// Here, client should either be valid, or NULL.	
 	jack_server_sampleRate = jack_get_sample_rate ( client );
 	jack_server_bufferSize = jack_get_buffer_size ( client );
+	old_buffer_size = jack_server_bufferSize;
 
-
 	/* tell the JACK server to call `process()' whenever
 	   there is work to be done.
 	*/
------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Hydrogen-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hydrogen-devel

Reply via email to