index ee55547d907aa2e59eaaa3114ddd6e3a57996a45..88300c86ab86505ff74322914fb540c24033f7bd 100644 (file)
* @brief Contains Main Processing Routines for Multi-Source Selection \r
* (MSS) module.\r
*\r
- * Copyright (c) 2016, Texas Instruments Incorporated
+ * Copyright (c) 2016 - 2018, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
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
+ int i, svd_decision;\r
+ int max_pow_src_index = 0;\r
LFract max_pow, sig_pow;\r
tword *svd_ptr;\r
mssSrcType_t max_pow_src_group;\r
void *mic_rem[], void *mic_cln[])\r
{\r
int i;\r
- linSample * cur_sel_src;\r
- linSample * new_sel_src;\r
+ linSample * cur_sel_src = NULL;\r
+ linSample * new_sel_src = NULL;\r
linSample * output;\r
- Fract fade_in_alpha, fade_out_alpha, sin_phase;\r
+ Fract fade_in_alpha = 0;\r
+ Fract fade_out_alpha = 0;\r
+ Fract sin_phase = 0;\r
LFract phase, phase_inc;\r
\r
/* Identify the buffer of the current selected source. */\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(!mss_chkbit(inst->state_bf, MSS_STATE_BIT_SWITCH_SRC) && cur_sel_src != NULL) {\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
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
+ if(cur_sel_src != NULL && new_sel_src != NULL)\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
+ phase += phase_inc;\r
+ }\r
+ }\r
+ else {\r
+ /* error message */\r
}\r
+\r
inst->crossfade_phase = phase;\r
\r
/* for debugging only */\r