diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..33235eb3 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +language: + - cpp +compiler: + - gcc +install: + - sudo apt-get install libsamplerate-dev libsndfile-dev libasound2-dev +script: + - ./waf configure --alsa + - ./waf build diff --git a/android/Android.mk b/android/Android.mk index 7d4219d0..37d29412 100644 --- a/android/Android.mk +++ b/android/Android.mk @@ -5,6 +5,7 @@ LOCAL_PATH := $(call my-dir) JACK_ROOT := $(call my-dir)/.. SUPPORT_ALSA_IN_JACK := true +SUPPORT_ANDROID_REALTIME_SCHED := false ALSA_INCLUDES := vendor/samsung/common/external/alsa-lib/include JACK_STL_LDFLAGS := -Lprebuilts/ndk/current/sources/cxx-stl/gnu-libstdc++/libs/$(TARGET_CPU_ABI) -lgnustl_static JACK_STL_INCLUDES := $(JACK_ROOT)/android/cxx-stl/gnu-libstdc++/libs/$(TARGET_CPU_ABI)/include \ @@ -238,6 +239,11 @@ audioadapter_libsource := \ ../common/JackAudioAdapterFactory.cpp \ ../linux/alsa/JackAlsaAdapter.cpp +ifeq ($(SUPPORT_ANDROID_REALTIME_SCHED), true) +sched_c_include := bionic/libc/bionic \ + frameworks/av/services/audioflinger +endif + # ======================================================== # libjackserver.so # ======================================================== @@ -251,6 +257,12 @@ LOCAL_C_INCLUDES := $(common_c_includes) LOCAL_SHARED_LIBRARIES := libc libdl libcutils libutils libjackshm LOCAL_MODULE_TAGS := eng optional LOCAL_MODULE := libjackserver +ifeq ($(SUPPORT_ANDROID_REALTIME_SCHED), true) +LOCAL_CFLAGS += -DJACK_ANDROID_REALTIME_SCHED +LOCAL_C_INCLUDES += $(sched_c_include) +LOCAL_SHARED_LIBRARIES += libbinder +LOCAL_STATIC_LIBRARIES := libscheduling_policy +endif include $(BUILD_SHARED_LIBRARY) @@ -283,6 +295,12 @@ LOCAL_C_INCLUDES := $(common_c_includes) LOCAL_SHARED_LIBRARIES := libc libdl libcutils libutils libjackshm LOCAL_MODULE_TAGS := eng optional LOCAL_MODULE := libjack +ifeq ($(SUPPORT_ANDROID_REALTIME_SCHED), true) +LOCAL_CFLAGS += -DJACK_ANDROID_REALTIME_SCHED +LOCAL_C_INCLUDES += $(sched_c_include) +LOCAL_SHARED_LIBRARIES += libbinder +LOCAL_STATIC_LIBRARIES := libscheduling_policy +endif include $(BUILD_SHARED_LIBRARY) diff --git a/android/JackAndroidThread.cpp b/android/JackAndroidThread.cpp index 6c9e135d..ae46e5e5 100644 --- a/android/JackAndroidThread.cpp +++ b/android/JackAndroidThread.cpp @@ -27,6 +27,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include // for _POSIX_PRIORITY_SCHEDULING check #include +#ifdef JACK_ANDROID_REALTIME_SCHED +#include "SchedulingPolicyService.h" +#endif + //#define JACK_SCHED_POLICY SCHED_RR #define JACK_SCHED_POLICY SCHED_FIFO @@ -241,12 +245,20 @@ int JackAndroidThread::AcquireRealTimeImp(jack_native_thread_t thread, int prior jack_log("JackAndroidThread::AcquireRealTimeImp priority = %d", priority); +#ifndef JACK_ANDROID_REALTIME_SCHED if ((res = pthread_setschedparam(thread, JACK_SCHED_POLICY, &rtparam)) != 0) { jack_error("Cannot use real-time scheduling (RR/%d)" "(%d: %s)", rtparam.sched_priority, res, strerror(res)); return -1; } +#else + if ((res = android::requestPriority(getpid(), gettid(), priority)) != 0) { + jack_log("Failed to get SCHED_FIFO priority pid %d tid %d; error %d", + getpid(), gettid(), res); + return -1; + } +#endif return 0; }