More fixes to mixer code (note, xc_ptr still used in some places)

This commit is contained in:
Ross Owen
2014-12-12 17:02:42 +00:00
parent b6746415fc
commit 66ce8f8a6e

View File

@@ -37,6 +37,7 @@ static unsigned abs(int x)
#endif
static int samples_array[NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + MAX_MIX_COUNT + 1]; /* One larger for an "off" channel for mixer sources" */
xc_ptr samples;
unsafe
{
@@ -268,7 +269,7 @@ static inline void GiveSamplesToDevice(chanend c, xc_ptr ptr, xc_ptr multOut, un
read_via_xc_ptr_indexed(index, ptr, i);
/* Read the actual sample value */
read_via_xc_ptr_indexed(sample, samples_array, index);
read_via_xc_ptr_indexed(sample, samples, index);
#else
unsafe
{
@@ -547,17 +548,17 @@ static void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
underflow = inuint(c_host);
#if MAX_MIX_COUNT > 0
outuint(c_mixer2, underflow);
GiveSamplesToHost(c_host, samples_array, samples_to_host_map, multIn);
GiveSamplesToHost(c_host, samples_to_host_map, multIn);
outuint(c_mixer2, 0);
inuint(c_mixer2);
getSamplesFromHost(c_host, samples_array, 0, underflow);
GetSamplesFromHost(c_host, underflow);
outuint(c_mixer2, 0);
inuint(c_mixer2);
#ifdef FAST_MIXER
mixed = doMix0(samples_array, mix_mult_slice(0));
mixed = doMix0(samples, mix_mult_slice(0));
#else
mixed = doMix(samples_array, mix_map_slice(0),mix_mult_slice(0));
mixed = doMix(samples, mix_map_slice(0),mix_mult_slice(0));
#endif
write_via_xc_ptr_indexed(samples_array, (NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 0), mixed);
@@ -572,9 +573,9 @@ static void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
#if MAX_MIX_COUNT > 2
#ifdef FAST_MIXER
mixed = doMix2(samples_array, mix_mult_slice(2));
mixed = doMix2(samples, mix_mult_slice(2));
#else
mixed = doMix(samples_array,mix_map_slice(2),mix_mult_slice(2));
mixed = doMix(samples, mix_map_slice(2),mix_mult_slice(2));
#endif
write_via_xc_ptr_indexed(samples_array, (NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 2), mixed);
@@ -585,7 +586,7 @@ static void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
#if MAX_MIX_COUNT > 4
#ifdef FAST_MIXER
mixed = doMix4(samples_array, mix_mult_slice(4));
mixed = doMix4(samples, mix_mult_slice(4));
#else
mixed = doMix(samples_array,mix_map_slice(4),mix_mult_slice(4));
#endif
@@ -598,7 +599,7 @@ static void mixer1(chanend c_host, chanend c_mix_ctl, chanend c_mixer2)
#if MAX_MIX_COUNT > 6
#ifdef FAST_MIXER
mixed = doMix6(samples_array, mix_mult_slice(6));
mixed = doMix6(samples, mix_mult_slice(6));
#else
mixed = doMix(samples_array,mix_map_slice(6),mix_mult_slice(6));
#endif
@@ -664,7 +665,7 @@ static void mixer2(chanend c_mixer1, chanend c_audio)
for (int i=0;i<MAX_MIX_COUNT;i++)
{
write_via_xc_ptr_indexed(samples_array, (NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + i), 0);
write_via_xc_ptr_indexed(samples, (NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + i), 0);
}
/* Inform audio thread about freq change */
@@ -678,20 +679,20 @@ static void mixer2(chanend c_mixer1, chanend c_audio)
else
{
underflow = inuint(c_mixer1);
giveSamplesToDevice(c_audio, samples_array, samples_to_device_map, multOut, underflow);
GiveSamplesToDevice(c_audio, samples_to_device_map, multOut, underflow);
inuint(c_mixer1);
outuint(c_mixer1, 0);
getSamplesFromDevice(c_audio, samples_array, NUM_USB_CHAN_OUT);
GetSamplesFromDevice(c_audio);
inuint(c_mixer1);
outuint(c_mixer1, 0);
#if MAX_MIX_COUNT > 1
#ifdef FAST_MIXER
mixed = doMix1(samples_array, mix_mult_slice(1));
mixed = doMix1(samples, mix_mult_slice(1));
#else
mixed = doMix(samples_array,mix_map_slice(1),mix_mult_slice(1));
#endif
write_via_xc_ptr_indexed(samples_array, (NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 1), mixed);
write_via_xc_ptr_indexed(samples, (NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 1), mixed);
#if defined (LEVEL_METER_HOST) || defined(LEVEL_METER_LEDS)
ComputeMixerLevel(mixed, 1);
@@ -706,12 +707,12 @@ static void mixer2(chanend c_mixer1, chanend c_audio)
{
#if MAX_MIX_COUNT > 3
#ifdef FAST_MIXER
mixed = doMix3(samples_array, mix_mult_slice(3));
mixed = doMix3(samples, mix_mult_slice(3));
#else
mixed = doMix(samples_array,mix_map_slice(3),mix_mult_slice(3));
#endif
write_via_xc_ptr_indexed(samples_array, (NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 3), mixed);
write_via_xc_ptr_indexed(samples, (NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 3), mixed);
#if defined (LEVEL_METER_HOST) || defined(LEVEL_METER_LEDS)
ComputeMixerLevel(mixed, 3);
@@ -720,11 +721,11 @@ static void mixer2(chanend c_mixer1, chanend c_audio)
#if MAX_MIX_COUNT > 5
#ifdef FAST_MIXER
mixed = doMix5(samples_array, mix_mult_slice(5));
mixed = doMix5(samples, mix_mult_slice(5));
#else
mixed = doMix(samples_array,mix_map_slice(5),mix_mult_slice(5));
#endif
write_via_xc_ptr_indexed(samples_array, NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 5, mixed);
write_via_xc_ptr_indexed(samples, NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 5, mixed);
#if defined (LEVEL_METER_HOST) || defined(LEVEL_METER_LEDS)
ComputeMixerLevel(mixed, 5);
@@ -733,12 +734,12 @@ static void mixer2(chanend c_mixer1, chanend c_audio)
#if MAX_MIX_COUNT > 7
#ifdef FAST_MIXER
mixed = doMix7(samples_array, mix_mult_slice(7));
mixed = doMix7(samples, mix_mult_slice(7));
#else
mixed = doMix(samples_array,mix_map_slice(7),mix_mult_slice(7));
#endif
write_via_xc_ptr_indexed(samples_array, NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 7, mixed);
write_via_xc_ptr_indexed(samples, NUM_USB_CHAN_OUT + NUM_USB_CHAN_IN + 7, mixed);
#if defined (LEVEL_METER_HOST) || defined(LEVEL_METER_LEDS)
ComputeMixerLevel(mixed, 7);
#endif
@@ -758,7 +759,7 @@ void mixer(chanend c_mix_in, chanend c_mix_out, chanend c_mix_ctl)
multOut = array_to_xc_ptr((multOut_array,unsigned[]));
multIn = array_to_xc_ptr((multIn_array,unsigned[]));
//samples = array_to_xc_ptr((samples_array,unsigned[]));
samples = array_to_xc_ptr((samples_array,unsigned[]));
samples_to_host_map = array_to_xc_ptr((samples_to_host_map_array,unsigned[]));
samples_to_device_map = array_to_xc_ptr((samples_to_device_map_array,unsigned[]));