summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/modules/echo-cancel/adrian-aec.c13
-rw-r--r--src/modules/echo-cancel/adrian-aec.h3
-rw-r--r--src/pulsecore/core-util.c3
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) {