Re: [ecasound] muting individual jack ports on completion

From: Jeremy Hughes <jedahu@email-addr-hidden>
Date: Fri Jun 26 2009 - 01:42:27 EEST

Hi Kai,

I've appended a patch to v2_6_0. It works for me so far, but I haven't
tested it vigorously.

On Fri, Jun 26, 2009 at 9:59 AM, Kai Vehmanen <kvehmanen@email-addr-hidden> wrote:
>
> Hi,
>
>  [...]
>
> hmm, that could indeed happen -- IOW a good catch! At least one way to fix this is to modify
>
> void AUDIO_IO_JACK_MANAGER::write_samples()
>
> .. so that full 'buffersize_rep' of samples is copied every time
> to '(*p)->cb_buffer'. In current code, 'samples' could be zero, in which case old data could remain in the buffer.

diff --git a/libecasound/plugins/audioio_jack_manager.cpp
b/libecasound/plugins/audioio_jack_manager.cpp
index 0af5846..d6e9b58 100644
--- a/libecasound/plugins/audioio_jack_manager.cpp
+++ b/libecasound/plugins/audioio_jack_manager.cpp
@@ -1621,6 +1621,7 @@ void AUDIO_IO_JACK_MANAGER::write_samples(int
client_id, void* target_buffer, lo
 {
   // DEBUG_CFLOW_STATEMENT(cerr << endl << "write_samples:" << client_id);

+  size_t sample_size = sizeof(jack_default_audio_sample_t);
   long int writesamples = (samples <= buffersize_rep) ? samples :
buffersize_rep;
   jack_default_audio_sample_t* ptr =
     static_cast<jack_default_audio_sample_t*>(target_buffer);
@@ -1629,8 +1630,11 @@ void AUDIO_IO_JACK_MANAGER::write_samples(int
client_id, void* target_buffer, lo
   list<eca_jack_port_data*>::const_iterator p = node->ports.begin();
   while(p != node->ports.end()) {
     if ((*p)->cb_buffer != 0) {
-      memcpy((*p)->cb_buffer, ptr, writesamples *
sizeof(jack_default_audio_sample_t));
+      memcpy((*p)->cb_buffer, ptr, writesamples * sample_size);
       ptr += writesamples;
+      memset((*p)->cb_buffer + (writesamples * sample_size),
+             0,
+             (buffersize_rep - writesamples) * sample_size);
     }
     ++p;
   }

------------------------------------------------------------------------------
_______________________________________________
Ecasound-list mailing list
Ecasound-list@email-addr-hidden
https://lists.sourceforge.net/lists/listinfo/ecasound-list
Received on Fri Jun 26 04:15:02 2009

This archive was generated by hypermail 2.1.8 : Fri Jun 26 2009 - 04:15:02 EEST