]> code.delx.au - pulseaudio/commitdiff
echo-cancel: More preprocessing fixes
authorArun Raghavan <arun.raghavan@collabora.co.uk>
Mon, 13 Jun 2011 20:42:01 +0000 (13:42 -0700)
committerArun Raghavan <arun.raghavan@collabora.co.uk>
Mon, 13 Jun 2011 22:25:54 +0000 (15:25 -0700)
The speex_preprocess_ctl() function takes a spx_int32_t, but we've been
passing a pa_bool_t, which could potentially crash.

src/modules/echo-cancel/module-echo-cancel.c

index c406508c9f2d55c4e51b2e63a1bf573e0f299182..96eb9ef13ecf2286fa808b255a9352d2ee102d26 100644 (file)
@@ -1476,6 +1476,8 @@ int pa__init(pa_module*m) {
     }
 
     if (u->ec->agc || u->ec->denoise || u->ec->echo_suppress) {
+        spx_int32_t tmp;
+
         if (source_ss.channels != 1) {
             pa_log("AGC, denoising and echo suppression only work with channels=1");
             goto fail;
@@ -1483,8 +1485,10 @@ int pa__init(pa_module*m) {
 
         u->ec->pp_state = speex_preprocess_state_init(u->blocksize / pa_frame_size(&source_ss), source_ss.rate);
 
-        speex_preprocess_ctl(u->ec->pp_state, SPEEX_PREPROCESS_SET_AGC, &u->ec->agc);
-        speex_preprocess_ctl(u->ec->pp_state, SPEEX_PREPROCESS_SET_DENOISE, &u->ec->denoise);
+        tmp = u->ec->agc;
+        speex_preprocess_ctl(u->ec->pp_state, SPEEX_PREPROCESS_SET_AGC, &tmp);
+        tmp = u->ec->denoise;
+        speex_preprocess_ctl(u->ec->pp_state, SPEEX_PREPROCESS_SET_DENOISE, &tmp);
         if (u->ec->echo_suppress) {
             if (u->ec->echo_suppress_attenuation)
                 speex_preprocess_ctl(u->ec->pp_state, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS, &u->ec->echo_suppress_attenuation);