diff --git a/file_demo_bios/k2g/components/mss/src/mssproc.c b/file_demo_bios/k2g/components/mss/src/mssproc.c
+++ /dev/null
@@ -1,395 +0,0 @@
-/**\r
- * @file mssproc.c\r
- * @brief Contains Main Processing Routines for Multi-Source Selection \r
- * (MSS) module.\r
- *\r
- * Copyright (c) 2016, Texas Instruments Incorporated
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * * Neither the name of Texas Instruments Incorporated nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-\r
-\r
-#include <xdc/std.h>\r
-#include <ti/mas/types/types.h>\r
-#include <ti/mas/fract/fract.h>\r
-#include <ti/mas/util/utl.h>\r
-#include <ti/mas/vpe/svd.h>\r
-#include "string.h"\r
-\r
-//#include <ti/mas/aer/mss.h>\r
-//#include <ti/mas/aer/src/mssloc.h>\r
-\r
-#include "../mss.h"\r
-#include "mssloc.h"\r
-\r
-#define MSS_MIN_POW 2684 /* correpsonds to -50dBm */\r
-\r
-/******************************************************************************\r
- * FUNCTION PURPOSE: Main Processing API of MSS \r
- ******************************************************************************\r
- * DESCRIPTION: This function processes the multi-source inputs and selects one\r
- * source as the output. Crossfading is implemented during the \r
- * switch of two sources. \r
- *\r
- * tint mssProcess (\r
- * Input:\r
- * void *mssInst, - pointer to MSS instance\r
- * void *rx_out_sync, - synchronized Rx out, NOT to be selected, but used to\r
- * help make right selection.\r
- * void *mic_fix[], - data from fixed mics, may be selected.\r
- * void *mic_rem[], - data from remote mics, may be selected.\r
- * void *mic_cln[], - data from clean mics, may be selected.\r
- * void *mic_arr[], - data from microphone arrays, NOT to be selected, but\r
- * used to help make right selection.\r
- * void *beam[], - data from beamformers, may be selected.\r
- * Output:\r
- * void *out, - data of the selected source, or a mix of two sources\r
- * during the switch. \r
- *\r
- *****************************************************************************/\r
-tint mssProcess(void *mssInst, void *out, void *rx_out_sync, void *mic_fix[],\r
- void *mic_rem[], void *mic_cln[], void *mic_arr[], void *beam[])\r
-{\r
- tint src_err; \r
- void *first_src;\r
- mssInst_t * inst = (mssInst_t *)mssInst;\r
- \r
- /* Return error if state is not OPENED */ \r
- if(inst->state != MSS_OPEN) {\r
- return(mss_ERR_NOTOPENED);\r
- }\r
-\r
- /* Check if all sources are valid and return error if any one is invalid. */ \r
- src_err = mss_src_validation(inst, rx_out_sync, mic_fix, mic_rem, mic_cln,\r
- mic_arr, beam); \r
- if(src_err == mss_ERR_INVALIDSRC) {\r
- return(mss_ERR_INVALIDSRC);\r
- }\r
-\r
- /* The BYPASS mode just gets the first available source passed to the output */\r
- if(mss_chkbit(inst->modes_bf, mss_CTL_MODES_BYPASS)) {\r
- first_src = mss_get_first_src(inst, mic_fix, mic_rem, mic_cln);\r
- memcpy(out, first_src, inst->frame_size*sizeof(linSample));\r
- }\r
- else { /* If not bypass, check for FREEZE */\r
- if(!mss_chkbit(inst->modes_bf, mss_CTL_MODES_FREEZE)) {\r
- /* Multi-source selection: \r
- Currently only supports fixed, remote and clean mics. */\r
- mss_src_selection(inst, mic_fix, mic_rem, mic_cln); \r
- }\r
-\r
- /* Output selected source, crossfading during switch between two sources. */\r
- mss_src_output(inst, out, mic_fix, mic_rem, mic_cln);\r
- }\r
- \r
- return src_err;\r
-} /* mssProcess */\r
-\r
-/******************************************************************************\r
- * FUNCTION PURPOSE: Get the First Valid Source \r
- ******************************************************************************\r
- * DESCRIPTION: This function orted.\r
- *\r
- * tint mss_get_first_src (\r
- * Input:\r
- * void *inst, - pointer to MSS instance\r
- * void *mic_fix[], - data from fixed mics, may be selected.\r
- * void *mic_rem[], - data from remote mics, may be selected.\r
- * void *mic_cln[], - data from clean mics, may be selected.\r
- * Output:\r
- * void * , - address of the first valid source\r
- *****************************************************************************/\r
-void * mss_get_first_src(mssInst_t *inst, void *mic_fix[], void *mic_rem[], \r
- void *mic_cln[])\r
-{\r
- void * first_src;\r
- \r
- if(inst->num_src_per_group[mss_SRC_MIC_FIXED] > 0) {\r
- first_src = mic_fix[0];\r
- }\r
- else if(inst->num_src_per_group[mss_SRC_MIC_REMOTE] > 0) {\r
- first_src = mic_rem[0];\r
- }\r
- else {\r
- first_src = mic_cln[0];\r
- }\r
- \r
- return first_src;\r
-} /* mss_get_first_src */ \r
-\r
-/******************************************************************************\r
- * FUNCTION PURPOSE: Source selection of MSS \r
- ******************************************************************************\r
- * DESCRIPTION: This function processes the multi-source inputs and selects one\r
- * source as the output. The selectin criteria is the exponential\r
- * average of power. The source with maximum power is selected. \r
- * Currently, only fixed mic, remote mic, and clean mic are supported.\r
- *\r
- * tint mss_src_selection (\r
- * Input:\r
- * void *inst, - pointer to MSS instance\r
- * void *mic_fix[], - data from fixed mics, may be selected.\r
- * void *mic_rem[], - data from remote mics, may be selected.\r
- * void *mic_cln[], - data from clean mics, may be selected.\r
- * Output:\r
- * Instance variables: MSS_STATE_BIT_SWITCH_SRC of inst->state_bf\r
- * temp_src\r
- * switch_hang_cnt\r
- * new_src\r
- * crossfade_phase\r
- * crossface_cnt\r
- * \r
- *****************************************************************************/\r
-void mss_src_selection(mssInst_t *inst, void *mic_fix[], void *mic_rem[], \r
- void *mic_cln[])\r
-{\r
- int i, max_pow_src_index, svd_decision;\r
- LFract max_pow, sig_pow;\r
- tword *svd_ptr;\r
- mssSrcType_t max_pow_src_group;\r
- tint frm_len;\r
-\r
- /* Initialization */\r
- svd_ptr = inst->svd;\r
- frm_len = inst->frame_size;\r
- max_pow = (LFract)0;\r
- max_pow_src_group = mss_SRC_INVALID;\r
- \r
- /*\r
- * Task 1: Analyze sources to select the best one.\r
- * Current selection criteria is the exponential average power. Whichever\r
- * source has the largest power will be selected. \r
- */\r
- /* Analyze fixed microphones */ \r
- for (i=0; i<inst->num_src_per_group[mss_SRC_MIC_FIXED]; i++) {\r
- svdProcess(svd_ptr, mic_fix[i], frm_len);\r
- svd_decision = svdGetDecision(svd_ptr, &sig_pow);\r
- \r
- /* only look at power of mics having speech (MSS_MIN_POW is -50.0109dBm) */\r
- if( (svd_decision != svd_VOICE_INACTIVE) /* even when undefined? */\r
- && (sig_pow > MSS_MIN_POW) && (sig_pow > max_pow)) {\r
- max_pow = sig_pow;\r
- max_pow_src_group = mss_SRC_MIC_FIXED;\r
- max_pow_src_index = i;\r
- }\r
- \r
- svd_ptr += inst->svd_size;\r
- } /* num_mic_fix */\r
-\r
- /* Analyze remote microphones */ \r
- for (i=0; i<inst->num_src_per_group[mss_SRC_MIC_REMOTE]; i++) {\r
- svdProcess(svd_ptr, mic_rem[i], frm_len);\r
- svd_decision = svdGetDecision(svd_ptr, &sig_pow);\r
- \r
- /* only look at power of mics having speech */\r
- if( (svd_decision != svd_VOICE_INACTIVE) \r
- && (sig_pow > MSS_MIN_POW) && (sig_pow > max_pow)) {\r
- max_pow = sig_pow;\r
- max_pow_src_group = mss_SRC_MIC_REMOTE;\r
- max_pow_src_index = i;\r
- }\r
- \r
- svd_ptr += inst->svd_size;\r
- } /* num_mic_remote */\r
-\r
- /* Analyze clean microphones */ \r
- for (i=0; i<inst->num_src_per_group[mss_SRC_MIC_CLEAN]; i++) {\r
- svdProcess(svd_ptr, mic_cln[i], frm_len);\r
- svd_decision = svdGetDecision(svd_ptr, &sig_pow);\r
- \r
- /* only look at power of mics having speech */\r
- if( (svd_decision != svd_VOICE_INACTIVE) \r
- && (sig_pow > MSS_MIN_POW) && (sig_pow > max_pow)) {\r
- max_pow = sig_pow;\r
- max_pow_src_group = mss_SRC_MIC_CLEAN;\r
- max_pow_src_index = i;\r
- }\r
- \r
- svd_ptr += inst->svd_size;\r
- } /* num_mic_clean */\r
-\r
- /* for debugging only */\r
- inst->temp_src.group = max_pow_src_group;\r
- inst->temp_src.index = max_pow_src_index;\r
- \r
- /*\r
- * Task 2: Decide whether to switch source based on the selection obtained above.\r
- */ \r
- /* Don's consider switching source in the middle of a switch */\r
- if(!mss_chkbit(inst->state_bf, MSS_STATE_BIT_SWITCH_SRC)) {\r
- /* If not in the middle of a switch, wait until hangover expires. */ \r
- if(inst->switch_hang_cnt > 0) {\r
- inst->switch_hang_cnt -= frm_len; /* expiring hangover */\r
- }\r
- else { /* hangover expires and we can look for switch again */\r
- /* Don't consider switching source if:\r
- 1. speech is not present in any source (max_pow_src_group == mss_SRC_MAX), or \r
- 2. source with max power is the current selected source.\r
- */\r
- if( (max_pow_src_group == mss_SRC_INVALID) \r
- || ( (max_pow_src_group == inst->cur_src.group) \r
- && (max_pow_src_index == inst->cur_src.index) )\r
- ) {\r
- if (inst->switch_src_cnt > frm_len) {\r
- inst->switch_src_cnt -= frm_len; /* Count in opposite direction with same speed */\r
- }\r
- else { /* give up on "new src" */\r
- inst->switch_src_cnt = 0;\r
- inst->new_src = inst->cur_src;\r
- }\r
- }\r
- /* Consider switching source if the source with max power is not the \r
- current active source. */\r
- else if( (max_pow_src_group == inst->new_src.group)\r
- && (max_pow_src_index == inst->new_src.index) \r
- ) {\r
- /* Increment counter since the source with max power doesn't change \r
- from previous frame. */\r
- inst->switch_src_cnt += frm_len;\r
- if(inst->switch_src_cnt >= inst->params.switch_threshold) {\r
- /* Confirm and switch source because the same source had max power long enough */\r
- inst->switch_src_cnt = 0;\r
- inst->crossfade_phase = MSS_FADE_PHA_INIT;\r
- inst->crossfade_cnt = 0;\r
- inst->switch_hang_cnt = inst->params.switch_hangover;\r
- mss_setbit(inst->state_bf, MSS_STATE_BIT_SWITCH_SRC);\r
- }\r
- }\r
- else { /* Source with max power might be changing to something other then current/new */\r
- if (inst->switch_src_cnt > frm_len) {\r
- inst->switch_src_cnt -= frm_len/2; /* Lower speed, this should smooth the "new" selection */\r
- }\r
- else {\r
- /* Don't switch since source with max power is changing. */\r
- inst->new_src.group = max_pow_src_group;\r
- inst->new_src.index = max_pow_src_index;\r
- inst->switch_src_cnt = 0;\r
- }\r
- }\r
- } /* hangover expires */\r
- } /* !mss_chkbit(inst->state_bf, MSS_STATE_BIT_SWITCH_SRC) */ \r
-} /* mss_src_selection */ \r
-\r
-/******************************************************************************\r
- * FUNCTION PURPOSE: Generating Single Output from Multiple Sources \r
- ******************************************************************************\r
- * DESCRIPTION: This function generates single output from multiple input sources.\r
- * Generally, it passes the selected source to the output, but when\r
- * there is a switch from one source to another, it will mix the\r
- * the previously selected and newly selected sources. \r
- *\r
- * tint mss_src_output (\r
- * Input:\r
- * void *inst, - pointer to MSS instance\r
- * void *mic_fix[], - data from fixed mics, may be selected.\r
- * void *mic_rem[], - data from remote mics, may be selected.\r
- * void *mic_cln[], - data from clean mics, may be selected.\r
- * Output:\r
- * void *out - single source or mixed sources\r
- *****************************************************************************/\r
-#define MSS_SIN_PIOVER2 16388\r
-void mss_src_output(mssInst_t *inst, void *out, void *mic_fix[], \r
- void *mic_rem[], void *mic_cln[])\r
-{\r
- int i;\r
- linSample * cur_sel_src;\r
- linSample * new_sel_src;\r
- linSample * output;\r
- Fract fade_in_alpha, fade_out_alpha, sin_phase;\r
- LFract phase, phase_inc;\r
- \r
- /* Identify the buffer of the current selected source. */\r
- if(inst->cur_src.group == mss_SRC_MIC_FIXED) {\r
- cur_sel_src = mic_fix[inst->cur_src.index];\r
- }\r
- else if (inst->cur_src.group == mss_SRC_MIC_REMOTE) {\r
- cur_sel_src = mic_rem[inst->cur_src.index];\r
- }\r
- else if (inst->cur_src.group == mss_SRC_MIC_CLEAN) {\r
- cur_sel_src = mic_cln[inst->cur_src.index];\r
- }\r
- else {\r
- /* error message */\r
- }\r
-\r
- /* Check if in the middle of a switch. */\r
- if(!mss_chkbit(inst->state_bf, MSS_STATE_BIT_SWITCH_SRC)) {\r
- /* If it is not during a switch, copy the current selected source to output \r
- without any modification. */\r
- memcpy(out, cur_sel_src, inst->frame_size*sizeof(linSample));\r
- } \r
- else {\r
- /* If it is during a switch, identify the buffer of the new selected source. */\r
- if(inst->new_src.group == mss_SRC_MIC_FIXED) {\r
- new_sel_src = mic_fix[inst->new_src.index];\r
- }\r
- else if (inst->new_src.group == mss_SRC_MIC_REMOTE) {\r
- new_sel_src = mic_rem[inst->new_src.index];\r
- }\r
- else if (inst->new_src.group == mss_SRC_MIC_CLEAN) {\r
- new_sel_src = mic_cln[inst->new_src.index];\r
- }\r
- else {\r
- /* error message */\r
- } \r
- \r
- /* Mix the previously selected and newly selected sources by crossfading: \r
- fading out previously selected source and fading in new selected source. */\r
- phase = inst->crossfade_phase; \r
- phase_inc = inst->crossfade_phase_inc;\r
- output = (linSample *)out;\r
-\r
- for(i=0; i<inst->frame_size; i++) {\r
-// alpha = (1-utlSin(phase>>16)) / 2; /* to use macros */\r
- sin_phase = utlSin(phase>>16); /* Q.31 to Q.15 */\r
- fade_out_alpha = MSS_SIN_PIOVER2/2 - sin_phase/2; /* (1-sin(pha))/2 in Q.14 */\r
- fade_in_alpha = MSS_SIN_PIOVER2/2 + sin_phase/2; /* (1+sin(pha))/2 in Q.14 */\r
- fade_out_alpha = mss_MIN(16383, fade_out_alpha);\r
- fade_in_alpha = mss_MIN(16383, fade_in_alpha);\r
- output[i] = frctMul(cur_sel_src[i], 0, fade_out_alpha, 14, 0) \r
- +frctMul(new_sel_src[i], 0, fade_in_alpha, 14, 0);\r
- phase += phase_inc;\r
- }\r
- inst->crossfade_phase = phase;\r
-\r
- /* for debugging only */\r
- inst->gain_in = fade_in_alpha;\r
- inst->gain_out = fade_out_alpha;\r
- \r
- inst->crossfade_cnt += inst->frame_size;\r
- if(inst->crossfade_cnt >= inst->params.switch_duration) {\r
- inst->crossfade_cnt = 0;\r
- inst->cur_src = inst->new_src;\r
- mss_clrbit(inst->state_bf, MSS_STATE_BIT_SWITCH_SRC);\r
- } \r
- } \r
-} /* mss_src_output */ \r
-\r
-/* Nothing past this point */\r