This commit is contained in:
louis
2017-02-10 16:24:57 +00:00
2 changed files with 30 additions and 25 deletions

View File

@@ -1,11 +1,12 @@
sc_usb_audio Change Log sc_usb_audio Change Log
======================= =======================
7.0.2 7.1.0
----- -----
- ADDED: UserBufferManagementInit() to reset any state required in UserBufferManagement() - ADDED: UserBufferManagementInit() to reset any state required in UserBufferManagement()
- ADDED: I2S output up-sampling (I2S_UPSAMPLE_FACTOR_OUT) - ADDED: I2S output up-sampling (I2S_UPSAMPLE_FACTOR_OUT)
- CHANGE: Rename I2S input down-sampling (I2S_DOWNSAMPLE_FACTOR to I2S_DOWNSAMPLE_FACTOR_IN) - CHANGE: Rename I2S input down-sampling (I2S_DOWNSAMPLE_FACTOR to I2S_DOWNSAMPLE_FACTOR_IN)
- RESOLVED: Crosstalk between input channels when I2S input down-sampling is enabled
7.0.1 7.0.1
----- -----

View File

@@ -700,27 +700,29 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
#endif // I2S_MODE_TDM #endif // I2S_MODE_TDM
#endif // CODEC_MASTER #endif // CODEC_MASTER
/* Note the use of readBuffNo changes based on frameCount */ sample = bitrev(sample);
samplesIn[buffIndex][((frameCount-2)&(I2S_CHANS_PER_FRAME-1))+i] = bitrev(sample); // channels 0, 2, 4.. on each line. int chanIndex = ((frameCount-2)&(I2S_CHANS_PER_FRAME-1))+i; // channels 0, 2, 4.. on each line.
#if (USB_TO_AUD_RATIO > 1) #if (USB_TO_AUD_RATIO > 1)
if ((USB_TO_AUD_RATIO - 1) == usbToAudioRatioCounter) if ((USB_TO_AUD_RATIO - 1) == usbToAudioRatioCounter)
{ {
samplesIn[readBuffNo][((frameCount-2)&(I2S_CHANS_PER_FRAME-1))] = samplesIn[buffIndex][chanIndex] =
src_ds3_voice_add_final_sample( src_ds3_voice_add_final_sample(
i2sInDs3Sum[((frameCount-2)&(I2S_CHANS_PER_FRAME-1))+i], i2sInDs3Sum[chanIndex],
i2sInDs3.delayLine[((frameCount-2)&(I2S_CHANS_PER_FRAME-1))+i][usbToAudioRatioCounter], i2sInDs3.delayLine[chanIndex][usbToAudioRatioCounter],
src_ff3v_fir_coefs[usbToAudioRatioCounter], src_ff3v_fir_coefs[usbToAudioRatioCounter],
samplesIn[readBuffNo][((frameCount-2)&(I2S_CHANS_PER_FRAME-1))]); sample);
} }
else else
{ {
i2sInDs3Sum[((frameCount-2)&(I2S_CHANS_PER_FRAME-1))+i] = i2sInDs3Sum[chanIndex] =
src_ds3_voice_add_sample( src_ds3_voice_add_sample(
i2sInDs3Sum[((frameCount-2)&(I2S_CHANS_PER_FRAME-1))+i], i2sInDs3Sum[chanIndex],
i2sInDs3.delayLine[((frameCount-2)&(I2S_CHANS_PER_FRAME-1))+i][usbToAudioRatioCounter], i2sInDs3.delayLine[chanIndex][usbToAudioRatioCounter],
src_ff3v_fir_coefs[usbToAudioRatioCounter], src_ff3v_fir_coefs[usbToAudioRatioCounter],
samplesIn[readBuffNo][((frameCount-2)&(I2S_CHANS_PER_FRAME-1))]); sample);
} }
#else
samplesIn[buffIndex][chanIndex] = sample;
#endif /* (USB_TO_AUD_RATIO > 1) */ #endif /* (USB_TO_AUD_RATIO > 1) */
} }
#endif #endif
@@ -850,28 +852,30 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
#endif // I2S_MODE_TDM #endif // I2S_MODE_TDM
#endif // CODEC_MASTER #endif // CODEC_MASTER
samplesIn[buffIndex][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i] = bitrev(sample); // channels 1, 3, 5.. on each line. sample = bitrev(sample);
#if ((USB_TO_AUD_RATIO > 1) && !I2S_DOWNSAMPLE_MONO_IN) int chanIndex = ((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i; // channels 1, 3, 5.. on each line.
#if (USB_TO_AUD_RATIO > 1)
if ((USB_TO_AUD_RATIO - 1) == usbToAudioRatioCounter) if ((USB_TO_AUD_RATIO - 1) == usbToAudioRatioCounter)
{ {
samplesIn[buffIndex][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i] = samplesIn[buffIndex][chanIndex] =
src_ds3_voice_add_final_sample( src_ds3_voice_add_final_sample(
i2sInDs3Sum[((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i], i2sInDs3Sum[chanIndex],
i2sInDs3.delayLine[((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i][usbToAudioRatioCounter], i2sInDs3.delayLine[chanIndex][usbToAudioRatioCounter],
src_ff3v_fir_coefs[usbToAudioRatioCounter], src_ff3v_fir_coefs[usbToAudioRatioCounter],
samplesIn[readBuffNo][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i]); sample);
} }
else else
{ {
i2sInDs3Sum[((frameCount-2)&(I2S_CHANS_PER_FRAME-1))+i] = i2sInDs3Sum[chanIndex] =
src_ds3_voice_add_sample( src_ds3_voice_add_sample(
i2sInDs3Sum[((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i], i2sInDs3Sum[chanIndex],
i2sInDs3.delayLine[((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i][usbToAudioRatioCounter], i2sInDs3.delayLine[chanIndex][usbToAudioRatioCounter],
src_ff3v_fir_coefs[usbToAudioRatioCounter], src_ff3v_fir_coefs[usbToAudioRatioCounter],
samplesIn[readBuffNo][((frameCount-1)&(I2S_CHANS_PER_FRAME-1))+i]); sample);
} }
#endif /* ((USB_TO_AUD_RATIO > 1) && !I2S_DOWNSAMPLE_MONO_IN) */ #else
samplesIn[buffIndex][chanIndex] = sample;
#endif /* (USB_TO_AUD_RATIO > 1) */
} }
#endif #endif