index 87ce6ff2e8a5998d40911659a3092b74de6c527d..88300c86ab86505ff74322914fb540c24033f7bd 100644 (file)
}\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