From 87194a878ee4c900d0201fb8b506b060228c896e Mon Sep 17 00:00:00 2001 From: Ross Owen Date: Thu, 6 Mar 2014 16:16:30 +0000 Subject: [PATCH] Re-added builtin_unreachable() using SUBSLOT_X_USED defines. 32 bit volume processing guarded by OUTPUT_RESOLUTION_32BIT_USED --- module_usb_audio/usb_buffer/decouple.xc | 80 ++++++++++++------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/module_usb_audio/usb_buffer/decouple.xc b/module_usb_audio/usb_buffer/decouple.xc index c703a910..5832703c 100644 --- a/module_usb_audio/usb_buffer/decouple.xc +++ b/module_usb_audio/usb_buffer/decouple.xc @@ -162,10 +162,36 @@ void handle_audio_request(chanend c_mix_out) /* Not in overflow, store samples from mixer into sample buffer */ switch(g_curSubSlot_in) { + case 2: +#if (STREAM_FORMAT_INPUT_SUBSLOT_2_USED == 1) +__builtin_unreachable(); +#endif + for(int i = 0; i < g_numUsbChanIn; i++) + { + /* Receive sample */ + int sample = inuint(c_mix_out); +#if !defined(IN_VOLUME_IN_MIXER) + /* Apply volume */ + int mult; + int h; + unsigned l; + asm("ldw %0, %1[%2]":"=r"(mult):"r"(p_multIn),"r"(i)); + {h, l} = macs(mult, sample, 0, 0); + sample = h << 3; + + /* Note, in 2 byte sub slot - ignore lower bits of macs */ +#elif defined(IN_VOLUME_IN_MIXER) && defined(IN_VOLUME_AFTER_MIX) + sample = sample << 3; +#endif + write_short_via_xc_ptr(g_aud_to_host_dptr, sample>>16); + g_aud_to_host_dptr+=2; + } + break; + case 4: { #if (STREAM_FORMAT_INPUT_SUBSLOT_4_USED == 1) -//__builtin_unreachable(); +__builtin_unreachable(); #endif unsigned ptr = g_aud_to_host_dptr; @@ -181,8 +207,9 @@ void handle_audio_request(chanend c_mix_out) asm("ldw %0, %1[%2]":"=r"(mult):"r"(p_multIn),"r"(i)); {h, l} = macs(mult, sample, 0, 0); sample = h << 3; -#warning FIXME +#if (STREAM_FORMAT_INPUT_RESOLUTION_32BIT_USED == 1) sample |= (l >> 29) & 0x7; // Note, this step is not required if we assume sample depth is 24 (rather than 32) +#endif #elif defined(IN_VOLUME_IN_MIXER) && defined(IN_VOLUME_AFTER_MIX) sample = sample << 3; #endif @@ -198,7 +225,7 @@ void handle_audio_request(chanend c_mix_out) case 3: #if (STREAM_FORMAT_INPUT_SUBSLOT_3_USED == 1) -//__builtin_unreachable(); +__builtin_unreachable(); #endif for(int i = 0; i < g_numUsbChanIn; i++) { @@ -242,32 +269,6 @@ void handle_audio_request(chanend c_mix_out) } break; - case 2: -#if (STREAM_FORMAT_INPUT_SUBSLOT_2_USED == 1) -//__builtin_unreachable(); -#endif - for(int i = 0; i < g_numUsbChanIn; i++) - { - /* Receive sample */ - int sample = inuint(c_mix_out); -#if !defined(IN_VOLUME_IN_MIXER) - /* Apply volume */ - int mult; - int h; - unsigned l; - asm("ldw %0, %1[%2]":"=r"(mult):"r"(p_multIn),"r"(i)); - {h, l} = macs(mult, sample, 0, 0); - sample = h << 3; - - /* Note, in 2 byte sub slot - ignore lower bits of macs */ -#elif defined(IN_VOLUME_IN_MIXER) && defined(IN_VOLUME_AFTER_MIX) - sample = sample << 3; -#endif - write_short_via_xc_ptr(g_aud_to_host_dptr, sample>>16); - g_aud_to_host_dptr+=2; - } - break; - default: __builtin_unreachable(); break; @@ -321,10 +322,10 @@ void handle_audio_request(chanend c_mix_out) { case 2: -#if (SAMPLE_SUBSLOT_SIZE_HS != 3) && (SAMPLE_SUBSLOT_SIZE_FS != 3) -//__builtin_unreachable(); +#if (STREAM_FORMAT_OUTPUT_SUBSLOT_2_USED == 0) +__builtin_unreachable(); #endif -/* Buffering not underflow condition send out some samples...*/ + /* Buffering not underflow condition send out some samples...*/ for(int i = 0; i < g_numUsbChanOut; i++) { #pragma xta endpoint "mixer_request" @@ -350,8 +351,8 @@ void handle_audio_request(chanend c_mix_out) break; case 4: -#if (SAMPLE_SUBSLOT_SIZE_HS != 4) && (SAMPLE_SUBSLOT_SIZE_FS != 4) -//__builtin_unreachable(); +#if (STREAM_FORMAT_OUTPUT_SUBSLOT_4_USED == 0) +__builtin_unreachable(); #endif /* Buffering not underflow condition send out some samples...*/ for(int i = 0; i < g_numUsbChanOut; i++) @@ -369,11 +370,10 @@ void handle_audio_request(chanend c_mix_out) asm("ldw %0, %1[%2]":"=r"(mult):"r"(p_multOut),"r"(i)); {h, l} = macs(mult, sample, 0, 0); h <<= 3; -//#if (SAMPLE_BIT_RESOLUTION_HS > 24) || (SAMPLE_BIT_RESOLUTION_FS > 24) || defined(NATIVE_DSD) -#warning FIXME +#if (STREAM_FORMAT_OUTPUT_RESOLUTION_32BIT_USED == 1) h |= (l >>29)& 0x7; // Note: This step is not required if we assume sample depth is 24bit (rather than 32bit) // Note: We need all 32bits for Native DSD -//#endif +#endif outuint(c_mix_out, h); #else outuint(c_mix_out, sample); @@ -383,8 +383,8 @@ void handle_audio_request(chanend c_mix_out) break; case 3: -#if (SAMPLE_SUBSLOT_SIZE_HS != 3) && (SAMPLE_SUBSLOT_SIZE_FS != 3) -//__builtin_unreachable(); +#if (STREAM_FORMAT_OUTPUT_SUBSLOT_3_USED == 0) +__builtin_unreachable(); #endif /* Buffering not underflow condition send out some samples...*/ for(int i = 0; i < g_numUsbChanOut; i++) @@ -435,7 +435,7 @@ void handle_audio_request(chanend c_mix_out) default: - //__builtin_unreachable(); + __builtin_unreachable(); break; } /* switch(g_curSubSlot_out) */