forked from PAWPAW-Mirror/lib_xua
Decouple only tells audio to change to/from DSD/PCM mode if there is an actual change to be made
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#ifdef NATIVE_DSD
|
#ifdef NATIVE_DSD
|
||||||
#include "usbaudio20.h" /* Defines from the USB Audio 2.0 Specifications */
|
#include "usbaudio20.h" /* Defines from the USB Audio 2.0 Specifications */
|
||||||
|
unsigned g_curDsdMode = DSD_MODE_OFF;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HID_CONTROLS
|
#ifdef HID_CONTROLS
|
||||||
@@ -871,61 +872,30 @@ void decouple(chanend c_mix_out,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NATIVE_DSD
|
#ifdef NATIVE_DSD
|
||||||
/* TODO only send when there is a change */
|
|
||||||
if(dataFormat == UAC_FORMAT_TYPEI_RAW_DATA)
|
if(dataFormat == UAC_FORMAT_TYPEI_RAW_DATA)
|
||||||
{
|
{
|
||||||
dsdMode = DSD_MODE_NATIVE;
|
dsdMode = DSD_MODE_NATIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wait for the audio code to request samples and respond with command */
|
/* To avoid clicks and pops only change mode if we have to */
|
||||||
inuint(c_mix_out);
|
if(dsdMode != g_curDsdMode)
|
||||||
outct(c_mix_out, SET_DSD_MODE);
|
|
||||||
outuint(c_mix_out, dsdMode);
|
|
||||||
|
|
||||||
/* Wait for handshake back */
|
|
||||||
chkct(c_mix_out, XS1_CT_END);
|
|
||||||
#endif
|
|
||||||
asm("outct res[%0],%1"::"r"(buffer_aud_ctl_chan),"r"(XS1_CT_END));
|
|
||||||
|
|
||||||
SET_SHARED_GLOBAL(g_freqChange, 0);
|
|
||||||
ENABLE_INTERRUPTS();
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
//#ifdef NATIVE_DSD
|
|
||||||
else if(tmp == SET_DSD_MODE)
|
|
||||||
{
|
|
||||||
unsigned dsdMode;
|
|
||||||
DISABLE_INTERRUPTS();
|
|
||||||
|
|
||||||
/* Clear the buffer as we dont want to send out old PCM samples.. */
|
|
||||||
SET_SHARED_GLOBAL(g_freqChange_flag, 0);
|
|
||||||
GET_SHARED_GLOBAL(dsdMode, g_freqChange_sampFreq); /* Misuse of g_freqChange_sampFreq */
|
|
||||||
|
|
||||||
/* Reset OUT buffer state */
|
|
||||||
SET_SHARED_GLOBAL(g_aud_from_host_rdptr, aud_from_host_fifo_start);
|
|
||||||
SET_SHARED_GLOBAL(g_aud_from_host_wrptr, aud_from_host_fifo_start);
|
|
||||||
|
|
||||||
outUnderflow = 1;
|
|
||||||
if(outOverflow)
|
|
||||||
{
|
{
|
||||||
/* If we were previously in overflow we wont have marked as ready */
|
g_curDsdMode = dsdMode;
|
||||||
XUD_SetReady_OutPtr(aud_from_host_usb_ep, aud_from_host_fifo_start+4);
|
|
||||||
outOverflow = 0;
|
/* Wait for the audio code to request samples and respond with command */
|
||||||
|
inuint(c_mix_out);
|
||||||
|
outct(c_mix_out, SET_DSD_MODE);
|
||||||
|
outuint(c_mix_out, dsdMode);
|
||||||
|
|
||||||
|
/* Wait for handshake back */
|
||||||
|
chkct(c_mix_out, XS1_CT_END);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
inuint(c_mix_out);
|
|
||||||
outct(c_mix_out, SET_DSD_MODE);
|
|
||||||
outuint(c_mix_out, dsdMode);
|
|
||||||
|
|
||||||
/* Wait for handshake back */
|
|
||||||
chkct(c_mix_out, XS1_CT_END);
|
|
||||||
|
|
||||||
SET_SHARED_GLOBAL(g_freqChange, 0);
|
|
||||||
asm("outct res[%0],%1"::"r"(buffer_aud_ctl_chan),"r"(XS1_CT_END));
|
asm("outct res[%0],%1"::"r"(buffer_aud_ctl_chan),"r"(XS1_CT_END));
|
||||||
|
|
||||||
|
SET_SHARED_GLOBAL(g_freqChange, 0);
|
||||||
ENABLE_INTERRUPTS();
|
ENABLE_INTERRUPTS();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OUTPUT
|
#ifdef OUTPUT
|
||||||
@@ -982,8 +952,6 @@ void decouple(chanend c_mix_out,
|
|||||||
/* Enter OUT over flow state */
|
/* Enter OUT over flow state */
|
||||||
outOverflow = 1;
|
outOverflow = 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG_LEDS
|
#ifdef DEBUG_LEDS
|
||||||
led(c_led);
|
led(c_led);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user