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