diff options
author | jbeich <jbeich@FreeBSD.org> | 2018-10-13 02:22:06 +0800 |
---|---|---|
committer | jbeich <jbeich@FreeBSD.org> | 2018-10-13 02:22:06 +0800 |
commit | e7ae0de40cfefda282ced7860c1e7a631e63ddb1 (patch) | |
tree | c9252392e55c366fd8889eb06c326d91ec76722e /audio | |
parent | 2eed0bc171861d23e60c05f7a6807896ffcb0e1c (diff) | |
download | freebsd-ports-gnome-e7ae0de40cfefda282ced7860c1e7a631e63ddb1.tar.gz freebsd-ports-gnome-e7ae0de40cfefda282ced7860c1e7a631e63ddb1.tar.zst freebsd-ports-gnome-e7ae0de40cfefda282ced7860c1e7a631e63ddb1.zip |
audio/webrtc-audio-processing: add new port
Audio processing routines extracted from WebRTC project into a
standalone library. It provides the following features:
- Acoustic echo cancellation
- Acoustic echo control for mobile
- Automatic gain control
- High-pass filter
- Level estimator
- Noise suppression
- Voice activity detection
https://freedesktop.org/software/pulseaudio/webrtc-audio-processing/
Diffstat (limited to 'audio')
10 files changed, 223 insertions, 0 deletions
diff --git a/audio/Makefile b/audio/Makefile index 15493dd80289..acb4fb0056db 100644 --- a/audio/Makefile +++ b/audio/Makefile @@ -869,6 +869,7 @@ SUBDIR += waveplay SUBDIR += wavpack SUBDIR += wavplay + SUBDIR += webrtc-audio-processing SUBDIR += whysynth SUBDIR += wildmidi SUBDIR += wmalbum diff --git a/audio/webrtc-audio-processing/Makefile b/audio/webrtc-audio-processing/Makefile new file mode 100644 index 000000000000..fdb23bbfb91b --- /dev/null +++ b/audio/webrtc-audio-processing/Makefile @@ -0,0 +1,18 @@ +# $FreeBSD$ + +PORTNAME= webrtc-audio-processing +PORTVERSION= 0.3.1 +CATEGORIES= audio +MASTER_SITES= https://freedesktop.org/software/pulseaudio/${PORTNAME}/ + +MAINTAINER= jbeich@FreeBSD.org +COMMENT= AudioProcessing module from WebRTC project + +LICENSE= BSD3CLAUSE +LICENSE_FILE= ${WRKSRC}/COPYING + +USES= autoreconf compiler:c++11-lib libtool pkgconfig tar:xz +USE_LDCONFIG= yes +GNU_CONFIGURE= yes + +.include <bsd.port.mk> diff --git a/audio/webrtc-audio-processing/distinfo b/audio/webrtc-audio-processing/distinfo new file mode 100644 index 000000000000..f0b4010ef1ef --- /dev/null +++ b/audio/webrtc-audio-processing/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1532354746 +SHA256 (webrtc-audio-processing-0.3.1.tar.xz) = a0fdd938fd85272d67e81572c5a4d9e200a0c104753cb3c209ded175ce3c5dbf +SIZE (webrtc-audio-processing-0.3.1.tar.xz) = 695920 diff --git a/audio/webrtc-audio-processing/files/patch-configure.ac b/audio/webrtc-audio-processing/files/patch-configure.ac new file mode 100644 index 000000000000..b41e30d1a20a --- /dev/null +++ b/audio/webrtc-audio-processing/files/patch-configure.ac @@ -0,0 +1,18 @@ +- Add WEBRTC_BSD as it's closer to WEBRTC_LINUX than WEBRTC_MAC + +--- configure.ac.orig 2018-07-23 14:02:57 UTC ++++ configure.ac +@@ -63,6 +63,13 @@ AS_CASE(["${host}"], + OS_LDFLAGS="-lrt -lpthread" + HAVE_POSIX=1 + ], ++ [*-*dragonfly*|*-*bsd*], ++ [ ++ OS_CFLAGS="-DWEBRTC_BSD -DWEBRTC_THREAD_RR" ++ PLATFORM_CFLAGS="-DWEBRTC_POSIX" ++ OS_LDFLAGS="-lpthread" ++ HAVE_POSIX=1 ++ ], + [*-*darwin*], + [ + OS_CFLAGS="-DWEBRTC_MAC -DWEBRTC_THREAD_RR -DWEBRTC_CLOCK_TYPE_REALTIME" diff --git a/audio/webrtc-audio-processing/files/patch-webrtc_base_checks.cc b/audio/webrtc-audio-processing/files/patch-webrtc_base_checks.cc new file mode 100644 index 000000000000..82ffcf49c7ec --- /dev/null +++ b/audio/webrtc-audio-processing/files/patch-webrtc_base_checks.cc @@ -0,0 +1,70 @@ +- Drop unnecessary dependency on libexecinfo for GCC build + https://chromium.googlesource.com/external/webrtc/+/7c4dedade158%5E!/ + +--- webrtc/base/checks.cc.orig 2018-07-23 14:02:57 UTC ++++ webrtc/base/checks.cc +@@ -11,16 +11,10 @@ + // Most of this was borrowed (with minor modifications) from V8's and Chromium's + // src/base/logging.cc. + +-// Use the C++ version to provide __GLIBCXX__. + #include <cstdarg> + #include <cstdio> + #include <cstdlib> + +-#if defined(__GLIBCXX__) && !defined(__UCLIBC__) +-#include <cxxabi.h> +-#include <execinfo.h> +-#endif +- + #if defined(WEBRTC_ANDROID) + #define LOG_TAG "rtc" + #include <android/log.h> // NOLINT +@@ -51,39 +45,6 @@ void PrintError(const char* format, ...) { + va_end(args); + } + +-// TODO(ajm): This works on Mac (although the parsing fails) but I don't seem +-// to get usable symbols on Linux. This is copied from V8. Chromium has a more +-// advanced stace trace system; also more difficult to copy. +-void DumpBacktrace() { +-#if defined(__GLIBCXX__) && !defined(__UCLIBC__) +- void* trace[100]; +- int size = backtrace(trace, sizeof(trace) / sizeof(*trace)); +- char** symbols = backtrace_symbols(trace, size); +- PrintError("\n==== C stack trace ===============================\n\n"); +- if (size == 0) { +- PrintError("(empty)\n"); +- } else if (symbols == NULL) { +- PrintError("(no symbols)\n"); +- } else { +- for (int i = 1; i < size; ++i) { +- char mangled[201]; +- if (sscanf(symbols[i], "%*[^(]%*[(]%200[^)+]", mangled) == 1) { // NOLINT +- PrintError("%2d: ", i); +- int status; +- size_t length; +- char* demangled = abi::__cxa_demangle(mangled, NULL, &length, &status); +- PrintError("%s\n", demangled != NULL ? demangled : mangled); +- free(demangled); +- } else { +- // If parsing failed, at least print the unparsed symbol. +- PrintError("%s\n", symbols[i]); +- } +- } +- } +- free(symbols); +-#endif +-} +- + FatalMessage::FatalMessage(const char* file, int line) { + Init(file, line); + } +@@ -99,7 +60,6 @@ NO_RETURN FatalMessage::~FatalMessage() { + fflush(stderr); + stream_ << std::endl << "#" << std::endl; + PrintError(stream_.str().c_str()); +- DumpBacktrace(); + fflush(stderr); + abort(); + } diff --git a/audio/webrtc-audio-processing/files/patch-webrtc_base_platform__thread.cc b/audio/webrtc-audio-processing/files/patch-webrtc_base_platform__thread.cc new file mode 100644 index 000000000000..c3d07a26c1e2 --- /dev/null +++ b/audio/webrtc-audio-processing/files/patch-webrtc_base_platform__thread.cc @@ -0,0 +1,48 @@ +- Implement CurrentThreadId() using global thread ID +- Implement SetCurrentThreadName() + +--- webrtc/base/platform_thread.cc.orig 2018-07-23 14:02:57 UTC ++++ webrtc/base/platform_thread.cc +@@ -19,6 +19,12 @@ + #include <sys/syscall.h> + #endif + ++#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) // WEBRTC_BSD ++#include <pthread_np.h> ++#elif defined(__NetBSD__) // WEBRTC_BSD ++#include <lwp.h> ++#endif ++ + namespace rtc { + + PlatformThreadId CurrentThreadId() { +@@ -32,9 +38,17 @@ PlatformThreadId CurrentThreadId() { + ret = syscall(__NR_gettid); + #elif defined(WEBRTC_ANDROID) + ret = gettid(); ++#elif defined(__DragonFly__) // WEBRTC_BSD ++ ret = lwp_gettid(); ++#elif defined(__FreeBSD__) // WEBRTC_BSD ++ ret = pthread_getthreadid_np(); ++#elif defined(__NetBSD__) // WEBRTC_BSD ++ ret = _lwp_self(); + #else + // Default implementation for nacl and solaris. +- ret = reinterpret_cast<pid_t>(pthread_self()); ++ // WEBRTC_BSD: pthread_t is a pointer, so cannot be casted to pid_t ++ // (aka int32_t) on 64-bit archs. Required on OpenBSD. ++ ret = reinterpret_cast<uintptr_t>(pthread_self()); + #endif + #endif // defined(WEBRTC_POSIX) + RTC_DCHECK(ret); +@@ -76,6 +90,10 @@ void SetCurrentThreadName(const char* name) { + prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name)); + #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS) + pthread_setname_np(name); ++#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__) // WEBRTC_BSD ++ pthread_set_name_np(pthread_self(), name); ++#elif defined(__NetBSD__) // WEBRTC_BSD ++ pthread_setname_np(pthread_self(), "%s", (void*)name); + #endif + } + diff --git a/audio/webrtc-audio-processing/files/patch-webrtc_base_stringutils.h b/audio/webrtc-audio-processing/files/patch-webrtc_base_stringutils.h new file mode 100644 index 000000000000..c01ec8a2c14b --- /dev/null +++ b/audio/webrtc-audio-processing/files/patch-webrtc_base_stringutils.h @@ -0,0 +1,13 @@ +- BSD macro (in sys/param.h) is an archaic of the (University of California) past + +--- webrtc/base/stringutils.h.orig 2018-07-23 14:02:57 UTC ++++ webrtc/base/stringutils.h +@@ -23,7 +23,7 @@ + #endif // WEBRTC_WIN + + #if defined(WEBRTC_POSIX) +-#ifdef BSD ++#ifdef WEBRTC_BSD + #include <stdlib.h> + #else // BSD + #include <alloca.h> diff --git a/audio/webrtc-audio-processing/files/patch-webrtc_system__wrappers_source_condition__variable.cc b/audio/webrtc-audio-processing/files/patch-webrtc_system__wrappers_source_condition__variable.cc new file mode 100644 index 000000000000..b1c7dd0e2d06 --- /dev/null +++ b/audio/webrtc-audio-processing/files/patch-webrtc_system__wrappers_source_condition__variable.cc @@ -0,0 +1,22 @@ +- Match conditional in webrtc/system_wrappers/Makefile.am + +--- webrtc/system_wrappers/source/condition_variable.cc.orig 2018-07-23 14:02:57 UTC ++++ webrtc/system_wrappers/source/condition_variable.cc +@@ -14,7 +14,7 @@ + #include <windows.h> + #include "webrtc/system_wrappers/source/condition_variable_event_win.h" + #include "webrtc/system_wrappers/source/condition_variable_native_win.h" +-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) ++#elif defined(WEBRTC_POSIX) + #include <pthread.h> + #include "webrtc/system_wrappers/source/condition_variable_posix.h" + #endif +@@ -31,7 +31,7 @@ ConditionVariableWrapper* ConditionVariableWrapper::Cr + ret_val = new ConditionVariableEventWin(); + } + return ret_val; +-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) ++#elif defined(WEBRTC_POSIX) + return ConditionVariablePosix::Create(); + #else + return NULL; diff --git a/audio/webrtc-audio-processing/pkg-descr b/audio/webrtc-audio-processing/pkg-descr new file mode 100644 index 000000000000..625fcd90b737 --- /dev/null +++ b/audio/webrtc-audio-processing/pkg-descr @@ -0,0 +1,12 @@ +Audio processing routines extracted from WebRTC project into a +standalone library. It provides the following features: + +- Acoustic echo cancellation +- Acoustic echo control for mobile +- Automatic gain control +- High-pass filter +- Level estimator +- Noise suppression +- Voice activity detection + +WWW: https://freedesktop.org/software/pulseaudio/webrtc-audio-processing/ diff --git a/audio/webrtc-audio-processing/pkg-plist b/audio/webrtc-audio-processing/pkg-plist new file mode 100644 index 000000000000..0cb8228850fb --- /dev/null +++ b/audio/webrtc-audio-processing/pkg-plist @@ -0,0 +1,18 @@ +include/webrtc_audio_processing/webrtc/base/arraysize.h +include/webrtc_audio_processing/webrtc/base/basictypes.h +include/webrtc_audio_processing/webrtc/base/checks.h +include/webrtc_audio_processing/webrtc/base/constructormagic.h +include/webrtc_audio_processing/webrtc/base/maybe.h +include/webrtc_audio_processing/webrtc/base/platform_file.h +include/webrtc_audio_processing/webrtc/common.h +include/webrtc_audio_processing/webrtc/common_types.h +include/webrtc_audio_processing/webrtc/modules/audio_processing/beamformer/array_util.h +include/webrtc_audio_processing/webrtc/modules/audio_processing/include/audio_processing.h +include/webrtc_audio_processing/webrtc/modules/interface/module_common_types.h +include/webrtc_audio_processing/webrtc/system_wrappers/include/trace.h +include/webrtc_audio_processing/webrtc/typedefs.h +lib/libwebrtc_audio_processing.a +lib/libwebrtc_audio_processing.so +lib/libwebrtc_audio_processing.so.1 +lib/libwebrtc_audio_processing.so.1.0.0 +libdata/pkgconfig/webrtc-audio-processing.pc |