]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/audio-preprocessing.git/blobdiff - common/components/mss/src/mssproc.c
PRSDK-4807 Fix Klocwork issue
[processor-sdk/audio-preprocessing.git] / common / components / mss / src / mssproc.c
index ee55547d907aa2e59eaaa3114ddd6e3a57996a45..88300c86ab86505ff74322914fb540c24033f7bd 100644 (file)
@@ -3,7 +3,7 @@
  *  @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
@@ -170,7 +170,8 @@ void * mss_get_first_src(mssInst_t *inst, void *mic_fix[], void *mic_rem[],
 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
@@ -319,10 +320,12 @@ void mss_src_output(mssInst_t *inst, void *out, void *mic_fix[],
                      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
@@ -340,7 +343,7 @@ void mss_src_output(mssInst_t *inst, void *out, void *mic_fix[],
   }\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
@@ -366,17 +369,24 @@ void mss_src_output(mssInst_t *inst, void *out, void *mic_fix[],
     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