From cc84b66df99995fbfac8b583e413f1ac1f08fc91 Mon Sep 17 00:00:00 2001 From: praashie Date: Sun, 6 Dec 2020 17:06:39 +0200 Subject: [PATCH] Respect channel numbers requested by host application --- asio.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/asio.c b/asio.c index 9ac3470..01d4826 100644 --- a/asio.c +++ b/asio.c @@ -1010,21 +1010,29 @@ HIDDEN ASIOError STDMETHODCALLTYPE CreateBuffers(LPWINEASIO iface, ASIOBufferInf /* initialize ASIOBufferInfo structures */ buffer_info = bufferInfo; This->asio_active_inputs = This->asio_active_outputs = 0; + + for (i = 0; i < This->wineasio_number_inputs; i++) { + This->input_channel[i].active = ASIOFalse; + } + for (i = 0; i < This->wineasio_number_outputs; i++) { + This->output_channel[i].active = ASIOFalse; + } + for (i = 0; i < numChannels; i++, buffer_info++) { if (buffer_info->isInput) { - buffer_info->buffers[0] = &This->input_channel[This->asio_active_inputs].audio_buffer[0]; - buffer_info->buffers[1] = &This->input_channel[This->asio_active_inputs].audio_buffer[This->asio_current_buffersize]; - This->input_channel[This->asio_active_inputs].active = ASIOTrue; + buffer_info->buffers[0] = &This->input_channel[buffer_info->channelNum].audio_buffer[0]; + buffer_info->buffers[1] = &This->input_channel[buffer_info->channelNum].audio_buffer[This->asio_current_buffersize]; + This->input_channel[buffer_info->channelNum].active = ASIOTrue; This->asio_active_inputs++; /* TRACE("ASIO audio buffer for channel %i as input %li created\n", i, This->asio_active_inputs); */ } else { - buffer_info->buffers[0] = &This->output_channel[This->asio_active_outputs].audio_buffer[0]; - buffer_info->buffers[1] = &This->output_channel[This->asio_active_outputs].audio_buffer[This->asio_current_buffersize]; - This->output_channel[This->asio_active_outputs].active = ASIOTrue; + buffer_info->buffers[0] = &This->output_channel[buffer_info->channelNum].audio_buffer[0]; + buffer_info->buffers[1] = &This->output_channel[buffer_info->channelNum].audio_buffer[This->asio_current_buffersize]; + This->output_channel[buffer_info->channelNum].active = ASIOTrue; This->asio_active_outputs++; /* TRACE("ASIO audio buffer for channel %i as output %li created\n", i, This->asio_active_outputs); */ } @@ -1262,7 +1270,7 @@ static inline int jack_process_callback(jack_nframes_t nframes, void *arg) } /* copy jack to asio buffers */ - for (i = 0; i < This->asio_active_inputs; i++) + for (i = 0; i < This->wineasio_number_inputs; i++) if (This->input_channel[i].active == ASIOTrue) memcpy (&This->input_channel[i].audio_buffer[nframes * This->asio_buffer_index], jack_port_get_buffer(This->input_channel[i].port, nframes), @@ -1300,7 +1308,7 @@ static inline int jack_process_callback(jack_nframes_t nframes, void *arg) } /* copy asio to jack buffers */ - for (i = 0; i < This->asio_active_outputs; i++) + for (i = 0; i < This->wineasio_number_outputs; i++) if (This->output_channel[i].active == ASIOTrue) memcpy(jack_port_get_buffer(This->output_channel[i].port, nframes), &This->output_channel[i].audio_buffer[nframes * This->asio_buffer_index],