diff options
-rw-r--r-- | src/modules/echo-cancel/adrian-aec.c | 13 | ||||
-rw-r--r-- | src/modules/echo-cancel/adrian-aec.h | 3 | ||||
-rw-r--r-- | src/pulsecore/core-util.c | 3 |
3 files changed, 13 insertions, 6 deletions
diff --git a/src/modules/echo-cancel/adrian-aec.c b/src/modules/echo-cancel/adrian-aec.c index 04b31e91..e969e8c5 100644 --- a/src/modules/echo-cancel/adrian-aec.c +++ b/src/modules/echo-cancel/adrian-aec.c @@ -12,6 +12,7 @@ #include <math.h> #include <string.h> +#include <stdint.h> #include <pulse/xmalloc.h> @@ -39,7 +40,6 @@ static REAL dotp(REAL a[], REAL b[]) return sum0 + sum1; } -static REAL dotp_sse(REAL a[], REAL b[]) __attribute__((noinline)); static REAL dotp_sse(REAL a[], REAL b[]) { #ifdef __SSE__ @@ -70,7 +70,7 @@ AEC* AEC_init(int RATE, int have_vector) a->hangover = 0; memset(a->x, 0, sizeof(a->x)); memset(a->xf, 0, sizeof(a->xf)); - memset(a->w, 0, sizeof(a->w)); + memset(a->w_arr, 0, sizeof(a->w_arr)); a->j = NLMS_EXT; a->delta = 0.0f; AEC_setambient(a, NoiseFloor); @@ -89,10 +89,15 @@ AEC* AEC_init(int RATE, int have_vector) a->dumpcnt = 0; memset(a->ws, 0, sizeof(a->ws)); - if (have_vector) + if (have_vector) { + /* Get a 16-byte aligned location */ + a->w = (REAL *) (((uintptr_t) a->w_arr) + (((uintptr_t) a->w_arr) % 16)); a->dotp = dotp_sse; - else + } else { + /* We don't care about alignment, just use the array as-is */ + a->w = a->w_arr; a->dotp = dotp; + } return a; } diff --git a/src/modules/echo-cancel/adrian-aec.h b/src/modules/echo-cancel/adrian-aec.h index 9c722b9d..efb9e274 100644 --- a/src/modules/echo-cancel/adrian-aec.h +++ b/src/modules/echo-cancel/adrian-aec.h @@ -306,7 +306,8 @@ struct AEC { // NLMS-pw REAL x[NLMS_LEN + NLMS_EXT]; // tap delayed loudspeaker signal REAL xf[NLMS_LEN + NLMS_EXT]; // pre-whitening tap delayed signal - PA_DECLARE_ALIGNED(16, REAL, w[NLMS_LEN]); // tap weights + REAL w_arr[NLMS_LEN+16]; // tap weights + REAL *w; // this will be a 16-byte aligned pointer into w_arr int j; // optimize: less memory copies double dotp_xf_xf; // double to avoid loss of precision float delta; // noise floor to stabilize NLMS diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index f769b325..6902ee98 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -661,7 +661,7 @@ static int set_scheduler(int rtprio) { #ifdef HAVE_DBUS /* Try to talk to RealtimeKit */ - if (!(bus = dbus_bus_get(DBUS_BUS_SYSTEM, &error))) { + if (!(bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error))) { pa_log("Failed to connect to system bus: %s\n", error.message); dbus_error_free(&error); errno = -EIO; @@ -674,6 +674,7 @@ static int set_scheduler(int rtprio) { dbus_connection_set_exit_on_disconnect(bus, FALSE); r = rtkit_make_realtime(bus, 0, rtprio); + dbus_connection_close(bus); dbus_connection_unref(bus); if (r >= 0) { |