webrtc-audio-processing: update to 0.3.1.
This commit is contained in:
parent
d2891d3825
commit
9163396495
|
@ -1,119 +0,0 @@
|
|||
From bf25c45e540d7e961704c245e7be439b580c93c2 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Thu, 30 Jun 2016 15:08:17 -0400
|
||||
Subject: Add missing windows specific headers
|
||||
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=96754
|
||||
|
||||
diff --git a/webrtc/base/win32.h b/webrtc/base/win32.h
|
||||
new file mode 100644
|
||||
index 0000000..6969c10
|
||||
--- /dev/null
|
||||
+++ b/webrtc/base/win32.h
|
||||
@@ -0,0 +1,103 @@
|
||||
+/*
|
||||
+ * Copyright 2004 The WebRTC Project Authors. All rights reserved.
|
||||
+ *
|
||||
+ * Use of this source code is governed by a BSD-style license
|
||||
+ * that can be found in the LICENSE file in the root of the source
|
||||
+ * tree. An additional intellectual property rights grant can be found
|
||||
+ * in the file PATENTS. All contributing project authors may
|
||||
+ * be found in the AUTHORS file in the root of the source tree.
|
||||
+ */
|
||||
+#ifndef WEBRTC_BASE_WIN32_H_
|
||||
+#define WEBRTC_BASE_WIN32_H_
|
||||
+#if defined(WEBRTC_WIN)
|
||||
+#ifndef WIN32_LEAN_AND_MEAN
|
||||
+#define WIN32_LEAN_AND_MEAN
|
||||
+#endif
|
||||
+// Make sure we don't get min/max macros
|
||||
+#ifndef NOMINMAX
|
||||
+#define NOMINMAX
|
||||
+#endif
|
||||
+#include <winsock2.h>
|
||||
+#include <windows.h>
|
||||
+#ifndef SECURITY_MANDATORY_LABEL_AUTHORITY
|
||||
+// Add defines that we use if we are compiling against older sdks
|
||||
+#define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
|
||||
+#define TokenIntegrityLevel static_cast<TOKEN_INFORMATION_CLASS>(0x19)
|
||||
+typedef struct _TOKEN_MANDATORY_LABEL {
|
||||
+ SID_AND_ATTRIBUTES Label;
|
||||
+} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
|
||||
+#endif // SECURITY_MANDATORY_LABEL_AUTHORITY
|
||||
+#undef SetPort
|
||||
+#include <string>
|
||||
+#include "webrtc/base/stringutils.h"
|
||||
+#include "webrtc/base/basictypes.h"
|
||||
+namespace rtc {
|
||||
+const char* win32_inet_ntop(int af, const void *src, char* dst, socklen_t size);
|
||||
+int win32_inet_pton(int af, const char* src, void *dst);
|
||||
+inline std::wstring ToUtf16(const char* utf8, size_t len) {
|
||||
+ int len16 = ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast<int>(len),
|
||||
+ NULL, 0);
|
||||
+ wchar_t* ws = STACK_ARRAY(wchar_t, len16);
|
||||
+ ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast<int>(len), ws, len16);
|
||||
+ return std::wstring(ws, len16);
|
||||
+}
|
||||
+inline std::wstring ToUtf16(const std::string& str) {
|
||||
+ return ToUtf16(str.data(), str.length());
|
||||
+}
|
||||
+inline std::string ToUtf8(const wchar_t* wide, size_t len) {
|
||||
+ int len8 = ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast<int>(len),
|
||||
+ NULL, 0, NULL, NULL);
|
||||
+ char* ns = STACK_ARRAY(char, len8);
|
||||
+ ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast<int>(len), ns, len8,
|
||||
+ NULL, NULL);
|
||||
+ return std::string(ns, len8);
|
||||
+}
|
||||
+inline std::string ToUtf8(const wchar_t* wide) {
|
||||
+ return ToUtf8(wide, wcslen(wide));
|
||||
+}
|
||||
+inline std::string ToUtf8(const std::wstring& wstr) {
|
||||
+ return ToUtf8(wstr.data(), wstr.length());
|
||||
+}
|
||||
+// Convert FILETIME to time_t
|
||||
+void FileTimeToUnixTime(const FILETIME& ft, time_t* ut);
|
||||
+// Convert time_t to FILETIME
|
||||
+void UnixTimeToFileTime(const time_t& ut, FILETIME * ft);
|
||||
+// Convert a Utf8 path representation to a non-length-limited Unicode pathname.
|
||||
+bool Utf8ToWindowsFilename(const std::string& utf8, std::wstring* filename);
|
||||
+// Convert a FILETIME to a UInt64
|
||||
+inline uint64_t ToUInt64(const FILETIME& ft) {
|
||||
+ ULARGE_INTEGER r = {{ft.dwLowDateTime, ft.dwHighDateTime}};
|
||||
+ return r.QuadPart;
|
||||
+}
|
||||
+enum WindowsMajorVersions {
|
||||
+ kWindows2000 = 5,
|
||||
+ kWindowsVista = 6,
|
||||
+};
|
||||
+bool GetOsVersion(int* major, int* minor, int* build);
|
||||
+inline bool IsWindowsVistaOrLater() {
|
||||
+ int major;
|
||||
+ return (GetOsVersion(&major, NULL, NULL) && major >= kWindowsVista);
|
||||
+}
|
||||
+inline bool IsWindowsXpOrLater() {
|
||||
+ int major, minor;
|
||||
+ return (GetOsVersion(&major, &minor, NULL) &&
|
||||
+ (major >= kWindowsVista ||
|
||||
+ (major == kWindows2000 && minor >= 1)));
|
||||
+}
|
||||
+inline bool IsWindows8OrLater() {
|
||||
+ int major, minor;
|
||||
+ return (GetOsVersion(&major, &minor, NULL) &&
|
||||
+ (major > kWindowsVista ||
|
||||
+ (major == kWindowsVista && minor >= 2)));
|
||||
+}
|
||||
+// Determine the current integrity level of the process.
|
||||
+bool GetCurrentProcessIntegrityLevel(int* level);
|
||||
+inline bool IsCurrentProcessLowIntegrity() {
|
||||
+ int level;
|
||||
+ return (GetCurrentProcessIntegrityLevel(&level) &&
|
||||
+ level < SECURITY_MANDATORY_MEDIUM_RID);
|
||||
+}
|
||||
+bool AdjustCurrentProcessPrivilege(const TCHAR* privilege, bool to_enable);
|
||||
+} // namespace rtc
|
||||
+#endif // WEBRTC_WIN
|
||||
+#endif // WEBRTC_BASE_WIN32_H_
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
From 560f300a3d84bbd2b48173aaee5166584d917c44 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Thu, 30 Jun 2016 16:19:49 -0400
|
||||
Subject: build: Add cerbero gnustl support for Android
|
||||
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 6f9553b..f34be72 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -26,6 +26,21 @@ AS_CASE(["x${with_ns_mode}"],
|
||||
[NS_FIXED=0])
|
||||
AM_CONDITIONAL(NS_FIXED, [test "x${NS_FIXED}" = "x1"])
|
||||
|
||||
+AC_ARG_WITH(
|
||||
+ gnustl,
|
||||
+ AC_HELP_STRING(
|
||||
+ [--with-gnustl],
|
||||
+ [use gnustl @<:@default=no@:>@]),
|
||||
+ [AS_CASE(
|
||||
+ [$withval], [no], [], [yes], [],
|
||||
+ [AC_MSG_ERROR([bad value "$withval" for --with-gnustl])])],
|
||||
+ [with_gnustl=no])
|
||||
+if test "x$with_gnustl" != "xno"; then
|
||||
+ PKG_CHECK_MODULES(GNUSTL, gnustl)
|
||||
+fi
|
||||
+AC_SUBST(GNUSTL_LIBS)
|
||||
+AC_SUBST(GNUSTL_CFLAGS)
|
||||
+
|
||||
|
||||
# Borrowed from gst-plugins-bad
|
||||
AC_CHECK_HEADER(MobileCoreServices/MobileCoreServices.h, HAVE_IOS="yes", HAVE_IOS="no", [-])
|
||||
@@ -104,7 +119,7 @@ AS_IF([test "x$enable_neon" != "xno"],
|
||||
AM_CONDITIONAL([HAVE_NEON], [test "x$HAVE_NEON" = "x1"])
|
||||
|
||||
COMMON_CFLAGS="-DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} -DNDEBUG -I\$(top_srcdir)"
|
||||
-COMMON_CXXFLAGS="-std=c++11 -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} -DNDEBUG -I\$(top_srcdir)"
|
||||
+COMMON_CXXFLAGS="-std=c++11 -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} ${GNUSTL_CFLAGS} -DNDEBUG -I\$(top_srcdir)"
|
||||
AC_SUBST([COMMON_CFLAGS])
|
||||
AC_SUBST([COMMON_CXXFLAGS])
|
||||
|
||||
diff --git a/webrtc/modules/audio_processing/Makefile.am b/webrtc/modules/audio_processing/Makefile.am
|
||||
index 30ca898..eb9bfc0 100644
|
||||
--- a/webrtc/modules/audio_processing/Makefile.am
|
||||
+++ b/webrtc/modules/audio_processing/Makefile.am
|
||||
@@ -173,6 +173,7 @@ libwebrtc_audio_processing_la_LIBADD = $(top_builddir)/webrtc/libwebrtc.la \
|
||||
$(top_builddir)/webrtc/common_audio/libcommon_audio.la \
|
||||
$(top_builddir)/webrtc/modules/audio_coding/libaudio_coding.la \
|
||||
$(LIBWEBRTC_PRIVATEARCH) \
|
||||
+ $(GNUSTL_LIBS) \
|
||||
-lpthread
|
||||
libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) \
|
||||
-Wl,--no-undefined \
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
From 44cf7726cac66c88afa0a752aff461e0c2918ebd Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Thu, 30 Jun 2016 16:49:16 -0400
|
||||
Subject: build: Don't blindly link to pthread
|
||||
|
||||
This otherwise breaks the build on Android and Windows. The flag is
|
||||
required on some Linux builds, and is readded in a subsequent commit.
|
||||
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=96754
|
||||
|
||||
diff --git a/webrtc/modules/audio_processing/Makefile.am b/webrtc/modules/audio_processing/Makefile.am
|
||||
index eb9bfc0..8e45e3d 100644
|
||||
--- a/webrtc/modules/audio_processing/Makefile.am
|
||||
+++ b/webrtc/modules/audio_processing/Makefile.am
|
||||
@@ -173,8 +173,7 @@ libwebrtc_audio_processing_la_LIBADD = $(top_builddir)/webrtc/libwebrtc.la \
|
||||
$(top_builddir)/webrtc/common_audio/libcommon_audio.la \
|
||||
$(top_builddir)/webrtc/modules/audio_coding/libaudio_coding.la \
|
||||
$(LIBWEBRTC_PRIVATEARCH) \
|
||||
- $(GNUSTL_LIBS) \
|
||||
- -lpthread
|
||||
+ $(GNUSTL_LIBS)
|
||||
libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) \
|
||||
-Wl,--no-undefined \
|
||||
-version-info $(LIBWEBRTC_AUDIO_PROCESSING_VERSION_INFO)
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
From 12ac8441f75bab2a256278926fe32450a311af1b Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Mon, 4 Jul 2016 15:07:48 -0400
|
||||
Subject: build: Add required define for Windows
|
||||
|
||||
This will also add it to the .pc file as WEBRTC_WIN leaks into the
|
||||
public interface and undefined __STRICT_ANSI__ so M_PI is available.
|
||||
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=96754
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index f34be72..ccaa758 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -65,8 +65,11 @@ AS_CASE(["${host}"],
|
||||
[OS_FLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"],
|
||||
[OS_FLAGS="-DWEBRTC_MAC"])
|
||||
PLATFORM_CFLAGS="-DWEBRTC_POSIX"
|
||||
+ ],
|
||||
+ [*-mingw32*],
|
||||
+ [
|
||||
+ PLATFORM_CFLAGS="-DWEBRTC_WIN -U__STRICT_ANSI__"
|
||||
]
|
||||
- # FIXME: Add Windows support
|
||||
)
|
||||
AC_SUBST(PLATFORM_CFLAGS)
|
||||
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,76 +0,0 @@
|
|||
From bf6b9de143edfe45ec6f40845510bdb655f866aa Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Mon, 4 Jul 2016 16:02:29 -0400
|
||||
Subject: build: Properly select the right system wrappers
|
||||
|
||||
This is needed for windows build to be usable.
|
||||
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=96754
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index ccaa758..92706e7 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -53,11 +53,13 @@ AS_CASE(["${host}"],
|
||||
[
|
||||
OS_CFLAGS="-DWEBRTC_ANDROID -DWEBRTC_LINUX"
|
||||
PLATFORM_CFLAGS="-DWEBRTC_POSIX"
|
||||
+ HAVE_POSIX=1
|
||||
],
|
||||
[*-*linux*],
|
||||
[
|
||||
OS_CFLAGS="-DWEBRTC_LINUX"
|
||||
PLATFORM_CFLAGS="-DWEBRTC_POSIX"
|
||||
+ HAVE_POSIX=1
|
||||
],
|
||||
[*-*darwin*],
|
||||
[
|
||||
@@ -65,13 +67,17 @@ AS_CASE(["${host}"],
|
||||
[OS_FLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"],
|
||||
[OS_FLAGS="-DWEBRTC_MAC"])
|
||||
PLATFORM_CFLAGS="-DWEBRTC_POSIX"
|
||||
+ HAVE_POSIX=1
|
||||
],
|
||||
[*-mingw32*],
|
||||
[
|
||||
PLATFORM_CFLAGS="-DWEBRTC_WIN -U__STRICT_ANSI__"
|
||||
+ HAVE_WIN=1
|
||||
]
|
||||
)
|
||||
AC_SUBST(PLATFORM_CFLAGS)
|
||||
+AM_CONDITIONAL(HAVE_POSIX, [test "x${HAVE_POSIX}" = "x1"])
|
||||
+AM_CONDITIONAL(HAVE_WIN, [test "x${HAVE_WIN}" = "x1"])
|
||||
|
||||
AS_CASE(["${host_cpu}"],
|
||||
[i?86|x86_64],
|
||||
diff --git a/webrtc/system_wrappers/Makefile.am b/webrtc/system_wrappers/Makefile.am
|
||||
index 6c9f4ee..8215013 100644
|
||||
--- a/webrtc/system_wrappers/Makefile.am
|
||||
+++ b/webrtc/system_wrappers/Makefile.am
|
||||
@@ -42,13 +42,21 @@ libsystem_wrappers_la_SOURCES = include/aligned_malloc.h \
|
||||
source/trace_impl.h \
|
||||
source/trace_posix.h \
|
||||
source/trace_win.h
|
||||
-# This assumes that we want the POSIX implementation -- should eventually be
|
||||
-# converted to a conditional to include Windows support
|
||||
+if HAVE_POSIX
|
||||
libsystem_wrappers_la_SOURCES += source/critical_section_posix.cc \
|
||||
source/event_timer_posix.cc \
|
||||
source/rw_lock_posix.cc \
|
||||
source/thread_posix.cc \
|
||||
source/trace_posix.cc
|
||||
+endif
|
||||
+if HAVE_WIN
|
||||
+libsystem_wrappers_la_SOURCES += source/critical_section_win.cc \
|
||||
+ source/event_timer_win.cc \
|
||||
+ source/rw_lock_win.cc \
|
||||
+ source/rw_lock_generic.cc \
|
||||
+ source/thread_win.cc \
|
||||
+ source/trace_win.cc
|
||||
+endif
|
||||
libsystem_wrappers_la_CXXFLAGS = $(AM_CXXFLAGS) $(COMMON_CXXFLAGS)
|
||||
|
||||
EXTRA_DIST = BUILD.gn \
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
From db2f422578140ba6aaf7a2a1d54caacf832fbee2 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Mon, 4 Jul 2016 17:54:45 -0400
|
||||
Subject: build: Define MSVC _WIN32 so we can build on mingw
|
||||
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=96754
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 92706e7..5ec8517 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -71,7 +71,7 @@ AS_CASE(["${host}"],
|
||||
],
|
||||
[*-mingw32*],
|
||||
[
|
||||
- PLATFORM_CFLAGS="-DWEBRTC_WIN -U__STRICT_ANSI__"
|
||||
+ PLATFORM_CFLAGS="-DWEBRTC_WIN -D_WIN32 -U__STRICT_ANSI__"
|
||||
HAVE_WIN=1
|
||||
]
|
||||
)
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,601 +0,0 @@
|
|||
From 6ad2f51e9e94daf6b5925590c4cc08459a2e0833 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Mon, 4 Jul 2016 22:12:20 -0400
|
||||
Subject: Add missing windows conditions variable
|
||||
|
||||
Those are used by generic RW lock implementation.
|
||||
|
||||
https://bugs.freedesktop.org/show_bug.cgi?id=96754
|
||||
|
||||
diff --git a/webrtc/system_wrappers/Makefile.am b/webrtc/system_wrappers/Makefile.am
|
||||
index 8215013..09973a7 100644
|
||||
--- a/webrtc/system_wrappers/Makefile.am
|
||||
+++ b/webrtc/system_wrappers/Makefile.am
|
||||
@@ -2,6 +2,7 @@ noinst_LTLIBRARIES = libsystem_wrappers.la
|
||||
|
||||
noinst_HEADERS = include/aligned_array.h \
|
||||
include/asm_defines.h \
|
||||
+ include/condition_variable_wrapper.h \
|
||||
include/compile_assert_c.h \
|
||||
include/event_wrapper.h \
|
||||
include/scoped_vector.h \
|
||||
@@ -42,27 +43,49 @@ libsystem_wrappers_la_SOURCES = include/aligned_malloc.h \
|
||||
source/trace_impl.h \
|
||||
source/trace_posix.h \
|
||||
source/trace_win.h
|
||||
+
|
||||
+EXTRA_DIST = BUILD.gn
|
||||
+
|
||||
if HAVE_POSIX
|
||||
libsystem_wrappers_la_SOURCES += source/critical_section_posix.cc \
|
||||
source/event_timer_posix.cc \
|
||||
source/rw_lock_posix.cc \
|
||||
source/thread_posix.cc \
|
||||
source/trace_posix.cc
|
||||
+else
|
||||
+EXTRA_DIST += source/critical_section_posix.cc \
|
||||
+ source/event_timer_posix.cc \
|
||||
+ source/rw_lock_posix.cc \
|
||||
+ source/thread_posix.cc \
|
||||
+ source/trace_posix.cc
|
||||
endif
|
||||
+
|
||||
if HAVE_WIN
|
||||
-libsystem_wrappers_la_SOURCES += source/critical_section_win.cc \
|
||||
+libsystem_wrappers_la_SOURCES += include/fix_interlocked_exchange_pointer_win.h \
|
||||
+ source/critical_section_win.cc \
|
||||
+ source/condition_variable.cc \
|
||||
+ source/condition_variable_event_win.cc \
|
||||
+ source/condition_variable_event_win.h \
|
||||
+ source/condition_variable_native_win.cc \
|
||||
+ source/condition_variable_native_win.h \
|
||||
source/event_timer_win.cc \
|
||||
source/rw_lock_win.cc \
|
||||
source/rw_lock_generic.cc \
|
||||
source/thread_win.cc \
|
||||
source/trace_win.cc
|
||||
+else
|
||||
+EXTRA_DIST += include/fix_interlocked_exchange_pointer_win.h \
|
||||
+ source/critical_section_win.cc \
|
||||
+ source/condition_variable.cc \
|
||||
+ source/condition_variable_event_win.cc \
|
||||
+ source/condition_variable_event_win.h \
|
||||
+ source/condition_variable_native_win.cc \
|
||||
+ source/condition_variable_native_win.h \
|
||||
+ source/event_timer_win.cc \
|
||||
+ source/rw_lock_generic.cc \
|
||||
+ source/rw_lock_win.cc \
|
||||
+ source/thread_win.cc \
|
||||
+ source/trace_win.cc
|
||||
endif
|
||||
-libsystem_wrappers_la_CXXFLAGS = $(AM_CXXFLAGS) $(COMMON_CXXFLAGS)
|
||||
|
||||
-EXTRA_DIST = BUILD.gn \
|
||||
- source/critical_section_win.cc \
|
||||
- source/event_timer_win.cc \
|
||||
- source/rw_lock_generic.cc \
|
||||
- source/rw_lock_win.cc \
|
||||
- source/thread_win.cc \
|
||||
- source/trace_win.cc
|
||||
+libsystem_wrappers_la_CXXFLAGS = $(AM_CXXFLAGS) $(COMMON_CXXFLAGS)
|
||||
diff --git a/webrtc/system_wrappers/include/condition_variable_wrapper.h b/webrtc/system_wrappers/include/condition_variable_wrapper.h
|
||||
new file mode 100644
|
||||
index 0000000..37ca30f
|
||||
--- /dev/null
|
||||
+++ b/webrtc/system_wrappers/include/condition_variable_wrapper.h
|
||||
@@ -0,0 +1,42 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
||||
+ *
|
||||
+ * Use of this source code is governed by a BSD-style license
|
||||
+ * that can be found in the LICENSE file in the root of the source
|
||||
+ * tree. An additional intellectual property rights grant can be found
|
||||
+ * in the file PATENTS. All contributing project authors may
|
||||
+ * be found in the AUTHORS file in the root of the source tree.
|
||||
+ */
|
||||
+
|
||||
+#ifndef WEBRTC_SYSTEM_WRAPPERS_INCLUDE_CONDITION_VARIABLE_WRAPPER_H_
|
||||
+#define WEBRTC_SYSTEM_WRAPPERS_INCLUDE_CONDITION_VARIABLE_WRAPPER_H_
|
||||
+
|
||||
+namespace webrtc {
|
||||
+
|
||||
+class CriticalSectionWrapper;
|
||||
+
|
||||
+class ConditionVariableWrapper {
|
||||
+ public:
|
||||
+ // Factory method, constructor disabled.
|
||||
+ static ConditionVariableWrapper* CreateConditionVariable();
|
||||
+
|
||||
+ virtual ~ConditionVariableWrapper() {}
|
||||
+
|
||||
+ // Calling thread will atomically release crit_sect and wait until next
|
||||
+ // some other thread calls Wake() or WakeAll().
|
||||
+ virtual void SleepCS(CriticalSectionWrapper& crit_sect) = 0;
|
||||
+
|
||||
+ // Same as above but with a timeout.
|
||||
+ virtual bool SleepCS(CriticalSectionWrapper& crit_sect,
|
||||
+ unsigned long max_time_in_ms) = 0;
|
||||
+
|
||||
+ // Wakes one thread calling SleepCS().
|
||||
+ virtual void Wake() = 0;
|
||||
+
|
||||
+ // Wakes all threads calling SleepCS().
|
||||
+ virtual void WakeAll() = 0;
|
||||
+};
|
||||
+
|
||||
+} // namespace webrtc
|
||||
+
|
||||
+#endif // WEBRTC_SYSTEM_WRAPPERS_INCLUDE_CONDITION_VARIABLE_WRAPPER_H_
|
||||
diff --git a/webrtc/system_wrappers/source/condition_variable.cc b/webrtc/system_wrappers/source/condition_variable.cc
|
||||
new file mode 100644
|
||||
index 0000000..f5ae93a
|
||||
--- /dev/null
|
||||
+++ b/webrtc/system_wrappers/source/condition_variable.cc
|
||||
@@ -0,0 +1,41 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
||||
+ *
|
||||
+ * Use of this source code is governed by a BSD-style license
|
||||
+ * that can be found in the LICENSE file in the root of the source
|
||||
+ * tree. An additional intellectual property rights grant can be found
|
||||
+ * in the file PATENTS. All contributing project authors may
|
||||
+ * be found in the AUTHORS file in the root of the source tree.
|
||||
+ */
|
||||
+
|
||||
+#include "webrtc/system_wrappers/include/condition_variable_wrapper.h"
|
||||
+
|
||||
+#if defined(_WIN32)
|
||||
+#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)
|
||||
+#include <pthread.h>
|
||||
+#include "webrtc/system_wrappers/source/condition_variable_posix.h"
|
||||
+#endif
|
||||
+
|
||||
+namespace webrtc {
|
||||
+
|
||||
+ConditionVariableWrapper* ConditionVariableWrapper::CreateConditionVariable() {
|
||||
+#if defined(_WIN32)
|
||||
+ // Try to create native condition variable implementation.
|
||||
+ ConditionVariableWrapper* ret_val = ConditionVariableNativeWin::Create();
|
||||
+ if (!ret_val) {
|
||||
+ // Native condition variable implementation does not exist. Create generic
|
||||
+ // condition variable based on events.
|
||||
+ ret_val = new ConditionVariableEventWin();
|
||||
+ }
|
||||
+ return ret_val;
|
||||
+#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
|
||||
+ return ConditionVariablePosix::Create();
|
||||
+#else
|
||||
+ return NULL;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+} // namespace webrtc
|
||||
diff --git a/webrtc/system_wrappers/source/condition_variable_event_win.cc b/webrtc/system_wrappers/source/condition_variable_event_win.cc
|
||||
new file mode 100644
|
||||
index 0000000..41b019d
|
||||
--- /dev/null
|
||||
+++ b/webrtc/system_wrappers/source/condition_variable_event_win.cc
|
||||
@@ -0,0 +1,195 @@
|
||||
+/*
|
||||
+Source:
|
||||
+http://www1.cse.wustl.edu/~schmidt/ACE-copying.html
|
||||
+
|
||||
+License:
|
||||
+Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM),
|
||||
+and CoSMIC(TM)
|
||||
+
|
||||
+ACE(TM), TAO(TM), CIAO(TM), DAnCE>(TM), and CoSMIC(TM) (henceforth referred to
|
||||
+as "DOC software") are copyrighted by Douglas C. Schmidt and his research
|
||||
+group at Washington University, University of California, Irvine, and
|
||||
+Vanderbilt University, Copyright (c) 1993-2009, all rights reserved. Since DOC
|
||||
+software is open-source, freely available software, you are free to use,
|
||||
+modify, copy, and distribute--perpetually and irrevocably--the DOC software
|
||||
+source code and object code produced from the source, as well as copy and
|
||||
+distribute modified versions of this software. You must, however, include this
|
||||
+copyright statement along with any code built using DOC software that you
|
||||
+release. No copyright statement needs to be provided if you just ship binary
|
||||
+executables of your software products.
|
||||
+You can use DOC software in commercial and/or binary software releases and are
|
||||
+under no obligation to redistribute any of your source code that is built
|
||||
+using DOC software. Note, however, that you may not misappropriate the DOC
|
||||
+software code, such as copyrighting it yourself or claiming authorship of the
|
||||
+DOC software code, in a way that will prevent DOC software from being
|
||||
+distributed freely using an open-source development model. You needn't inform
|
||||
+anyone that you're using DOC software in your software, though we encourage
|
||||
+you to let us know so we can promote your project in the DOC software success
|
||||
+stories.
|
||||
+
|
||||
+The ACE, TAO, CIAO, DAnCE, and CoSMIC web sites are maintained by the DOC
|
||||
+Group at the Institute for Software Integrated Systems (ISIS) and the Center
|
||||
+for Distributed Object Computing of Washington University, St. Louis for the
|
||||
+development of open-source software as part of the open-source software
|
||||
+community. Submissions are provided by the submitter ``as is'' with no
|
||||
+warranties whatsoever, including any warranty of merchantability,
|
||||
+noninfringement of third party intellectual property, or fitness for any
|
||||
+particular purpose. In no event shall the submitter be liable for any direct,
|
||||
+indirect, special, exemplary, punitive, or consequential damages, including
|
||||
+without limitation, lost profits, even if advised of the possibility of such
|
||||
+damages. Likewise, DOC software is provided as is with no warranties of any
|
||||
+kind, including the warranties of design, merchantability, and fitness for a
|
||||
+particular purpose, noninfringement, or arising from a course of dealing,
|
||||
+usage or trade practice. Washington University, UC Irvine, Vanderbilt
|
||||
+University, their employees, and students shall have no liability with respect
|
||||
+to the infringement of copyrights, trade secrets or any patents by DOC
|
||||
+software or any part thereof. Moreover, in no event will Washington
|
||||
+University, UC Irvine, or Vanderbilt University, their employees, or students
|
||||
+be liable for any lost revenue or profits or other special, indirect and
|
||||
+consequential damages.
|
||||
+
|
||||
+DOC software is provided with no support and without any obligation on the
|
||||
+part of Washington University, UC Irvine, Vanderbilt University, their
|
||||
+employees, or students to assist in its use, correction, modification, or
|
||||
+enhancement. A number of companies around the world provide commercial support
|
||||
+for DOC software, however. DOC software is Y2K-compliant, as long as the
|
||||
+underlying OS platform is Y2K-compliant. Likewise, DOC software is compliant
|
||||
+with the new US daylight savings rule passed by Congress as "The Energy Policy
|
||||
+Act of 2005," which established new daylight savings times (DST) rules for the
|
||||
+United States that expand DST as of March 2007. Since DOC software obtains
|
||||
+time/date and calendaring information from operating systems users will not be
|
||||
+affected by the new DST rules as long as they upgrade their operating systems
|
||||
+accordingly.
|
||||
+
|
||||
+The names ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), CoSMIC(TM), Washington
|
||||
+University, UC Irvine, and Vanderbilt University, may not be used to endorse
|
||||
+or promote products or services derived from this source without express
|
||||
+written permission from Washington University, UC Irvine, or Vanderbilt
|
||||
+University. This license grants no permission to call products or services
|
||||
+derived from this source ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), or CoSMIC(TM),
|
||||
+nor does it grant permission for the name Washington University, UC Irvine, or
|
||||
+Vanderbilt University to appear in their names.
|
||||
+*/
|
||||
+
|
||||
+/*
|
||||
+ * This source code contain modifications to the original source code
|
||||
+ * which can be found here:
|
||||
+ * http://www.cs.wustl.edu/~schmidt/win32-cv-1.html (section 3.2).
|
||||
+ * Modifications:
|
||||
+ * 1) Dynamic detection of native support for condition variables.
|
||||
+ * 2) Use of WebRTC defined types and classes. Renaming of some functions.
|
||||
+ * 3) Introduction of a second event for wake all functionality. This prevents
|
||||
+ * a thread from spinning on the same condition variable, preventing other
|
||||
+ * threads from waking up.
|
||||
+ */
|
||||
+
|
||||
+#include "webrtc/system_wrappers/source/condition_variable_event_win.h"
|
||||
+#include "webrtc/system_wrappers/source/critical_section_win.h"
|
||||
+
|
||||
+namespace webrtc {
|
||||
+
|
||||
+ConditionVariableEventWin::ConditionVariableEventWin() : eventID_(WAKEALL_0) {
|
||||
+ memset(&num_waiters_[0], 0, sizeof(num_waiters_));
|
||||
+
|
||||
+ InitializeCriticalSection(&num_waiters_crit_sect_);
|
||||
+
|
||||
+ events_[WAKEALL_0] = CreateEvent(NULL, // no security attributes
|
||||
+ TRUE, // manual-reset, sticky event
|
||||
+ FALSE, // initial state non-signaled
|
||||
+ NULL); // no name for event
|
||||
+
|
||||
+ events_[WAKEALL_1] = CreateEvent(NULL, // no security attributes
|
||||
+ TRUE, // manual-reset, sticky event
|
||||
+ FALSE, // initial state non-signaled
|
||||
+ NULL); // no name for event
|
||||
+
|
||||
+ events_[WAKE] = CreateEvent(NULL, // no security attributes
|
||||
+ FALSE, // auto-reset, sticky event
|
||||
+ FALSE, // initial state non-signaled
|
||||
+ NULL); // no name for event
|
||||
+}
|
||||
+
|
||||
+ConditionVariableEventWin::~ConditionVariableEventWin() {
|
||||
+ CloseHandle(events_[WAKE]);
|
||||
+ CloseHandle(events_[WAKEALL_1]);
|
||||
+ CloseHandle(events_[WAKEALL_0]);
|
||||
+
|
||||
+ DeleteCriticalSection(&num_waiters_crit_sect_);
|
||||
+}
|
||||
+
|
||||
+void ConditionVariableEventWin::SleepCS(CriticalSectionWrapper& crit_sect) {
|
||||
+ SleepCS(crit_sect, INFINITE);
|
||||
+}
|
||||
+
|
||||
+bool ConditionVariableEventWin::SleepCS(CriticalSectionWrapper& crit_sect,
|
||||
+ unsigned long max_time_in_ms) {
|
||||
+ EnterCriticalSection(&num_waiters_crit_sect_);
|
||||
+
|
||||
+ // Get the eventID for the event that will be triggered by next
|
||||
+ // WakeAll() call and start waiting for it.
|
||||
+ const EventWakeUpType eventID =
|
||||
+ (WAKEALL_0 == eventID_) ? WAKEALL_1 : WAKEALL_0;
|
||||
+
|
||||
+ ++(num_waiters_[eventID]);
|
||||
+ LeaveCriticalSection(&num_waiters_crit_sect_);
|
||||
+
|
||||
+ CriticalSectionWindows* cs =
|
||||
+ static_cast<CriticalSectionWindows*>(&crit_sect);
|
||||
+ LeaveCriticalSection(&cs->crit);
|
||||
+ HANDLE events[2];
|
||||
+ events[0] = events_[WAKE];
|
||||
+ events[1] = events_[eventID];
|
||||
+ const DWORD result = WaitForMultipleObjects(2, // Wait on 2 events.
|
||||
+ events,
|
||||
+ FALSE, // Wait for either.
|
||||
+ max_time_in_ms);
|
||||
+
|
||||
+ const bool ret_val = (result != WAIT_TIMEOUT);
|
||||
+
|
||||
+ EnterCriticalSection(&num_waiters_crit_sect_);
|
||||
+ --(num_waiters_[eventID]);
|
||||
+
|
||||
+ // Last waiter should only be true for WakeAll(). WakeAll() correspond
|
||||
+ // to position 1 in events[] -> (result == WAIT_OBJECT_0 + 1)
|
||||
+ const bool last_waiter = (result == WAIT_OBJECT_0 + 1) &&
|
||||
+ (num_waiters_[eventID] == 0);
|
||||
+ LeaveCriticalSection(&num_waiters_crit_sect_);
|
||||
+
|
||||
+ if (last_waiter) {
|
||||
+ // Reset/unset the WakeAll() event since all threads have been
|
||||
+ // released.
|
||||
+ ResetEvent(events_[eventID]);
|
||||
+ }
|
||||
+
|
||||
+ EnterCriticalSection(&cs->crit);
|
||||
+ return ret_val;
|
||||
+}
|
||||
+
|
||||
+void ConditionVariableEventWin::Wake() {
|
||||
+ EnterCriticalSection(&num_waiters_crit_sect_);
|
||||
+ const bool have_waiters = (num_waiters_[WAKEALL_0] > 0) ||
|
||||
+ (num_waiters_[WAKEALL_1] > 0);
|
||||
+ LeaveCriticalSection(&num_waiters_crit_sect_);
|
||||
+
|
||||
+ if (have_waiters) {
|
||||
+ SetEvent(events_[WAKE]);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void ConditionVariableEventWin::WakeAll() {
|
||||
+ EnterCriticalSection(&num_waiters_crit_sect_);
|
||||
+
|
||||
+ // Update current WakeAll() event
|
||||
+ eventID_ = (WAKEALL_0 == eventID_) ? WAKEALL_1 : WAKEALL_0;
|
||||
+
|
||||
+ // Trigger current event
|
||||
+ const EventWakeUpType eventID = eventID_;
|
||||
+ const bool have_waiters = num_waiters_[eventID] > 0;
|
||||
+ LeaveCriticalSection(&num_waiters_crit_sect_);
|
||||
+
|
||||
+ if (have_waiters) {
|
||||
+ SetEvent(events_[eventID]);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+} // namespace webrtc
|
||||
diff --git a/webrtc/system_wrappers/source/condition_variable_event_win.h b/webrtc/system_wrappers/source/condition_variable_event_win.h
|
||||
new file mode 100644
|
||||
index 0000000..cdcef7d
|
||||
--- /dev/null
|
||||
+++ b/webrtc/system_wrappers/source/condition_variable_event_win.h
|
||||
@@ -0,0 +1,46 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
||||
+ *
|
||||
+ * Use of this source code is governed by a BSD-style license
|
||||
+ * that can be found in the LICENSE file in the root of the source
|
||||
+ * tree. An additional intellectual property rights grant can be found
|
||||
+ * in the file PATENTS. All contributing project authors may
|
||||
+ * be found in the AUTHORS file in the root of the source tree.
|
||||
+ */
|
||||
+
|
||||
+#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_EVENT_WIN_H_
|
||||
+#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_EVENT_WIN_H_
|
||||
+
|
||||
+#include <windows.h>
|
||||
+
|
||||
+#include "webrtc/system_wrappers/include/condition_variable_wrapper.h"
|
||||
+
|
||||
+namespace webrtc {
|
||||
+
|
||||
+class ConditionVariableEventWin : public ConditionVariableWrapper {
|
||||
+ public:
|
||||
+ ConditionVariableEventWin();
|
||||
+ virtual ~ConditionVariableEventWin();
|
||||
+
|
||||
+ void SleepCS(CriticalSectionWrapper& crit_sect);
|
||||
+ bool SleepCS(CriticalSectionWrapper& crit_sect, unsigned long max_time_inMS);
|
||||
+ void Wake();
|
||||
+ void WakeAll();
|
||||
+
|
||||
+ private:
|
||||
+ enum EventWakeUpType {
|
||||
+ WAKEALL_0 = 0,
|
||||
+ WAKEALL_1 = 1,
|
||||
+ WAKE = 2,
|
||||
+ EVENT_COUNT = 3
|
||||
+ };
|
||||
+
|
||||
+ unsigned int num_waiters_[2];
|
||||
+ EventWakeUpType eventID_;
|
||||
+ CRITICAL_SECTION num_waiters_crit_sect_;
|
||||
+ HANDLE events_[EVENT_COUNT];
|
||||
+};
|
||||
+
|
||||
+} // namespace webrtc
|
||||
+
|
||||
+#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_EVENT_WIN_H_
|
||||
diff --git a/webrtc/system_wrappers/source/condition_variable_native_win.cc b/webrtc/system_wrappers/source/condition_variable_native_win.cc
|
||||
new file mode 100644
|
||||
index 0000000..45225f2
|
||||
--- /dev/null
|
||||
+++ b/webrtc/system_wrappers/source/condition_variable_native_win.cc
|
||||
@@ -0,0 +1,104 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
||||
+ *
|
||||
+ * Use of this source code is governed by a BSD-style license
|
||||
+ * that can be found in the LICENSE file in the root of the source
|
||||
+ * tree. An additional intellectual property rights grant can be found
|
||||
+ * in the file PATENTS. All contributing project authors may
|
||||
+ * be found in the AUTHORS file in the root of the source tree.
|
||||
+ */
|
||||
+
|
||||
+#include "webrtc/system_wrappers/include/trace.h"
|
||||
+#include "webrtc/system_wrappers/source/condition_variable_native_win.h"
|
||||
+#include "webrtc/system_wrappers/source/critical_section_win.h"
|
||||
+
|
||||
+namespace webrtc {
|
||||
+
|
||||
+static HMODULE library = NULL;
|
||||
+static bool win_support_condition_variables_primitive = false;
|
||||
+
|
||||
+PInitializeConditionVariable PInitializeConditionVariable_;
|
||||
+PSleepConditionVariableCS PSleepConditionVariableCS_;
|
||||
+PWakeConditionVariable PWakeConditionVariable_;
|
||||
+PWakeAllConditionVariable PWakeAllConditionVariable_;
|
||||
+
|
||||
+typedef void (WINAPI *PInitializeConditionVariable)(PCONDITION_VARIABLE);
|
||||
+typedef BOOL (WINAPI *PSleepConditionVariableCS)(PCONDITION_VARIABLE,
|
||||
+ PCRITICAL_SECTION, DWORD);
|
||||
+typedef void (WINAPI *PWakeConditionVariable)(PCONDITION_VARIABLE);
|
||||
+typedef void (WINAPI *PWakeAllConditionVariable)(PCONDITION_VARIABLE);
|
||||
+
|
||||
+ConditionVariableNativeWin::ConditionVariableNativeWin() {
|
||||
+}
|
||||
+
|
||||
+ConditionVariableNativeWin::~ConditionVariableNativeWin() {
|
||||
+}
|
||||
+
|
||||
+ConditionVariableWrapper* ConditionVariableNativeWin::Create() {
|
||||
+ ConditionVariableNativeWin* ret_val = new ConditionVariableNativeWin();
|
||||
+ if (!ret_val->Init()) {
|
||||
+ delete ret_val;
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ return ret_val;
|
||||
+}
|
||||
+
|
||||
+bool ConditionVariableNativeWin::Init() {
|
||||
+ if (!library) {
|
||||
+ // Native implementation is supported on Vista+.
|
||||
+ library = LoadLibrary(TEXT("Kernel32.dll"));
|
||||
+ // TODO(henrike): this code results in an attempt to load the above dll
|
||||
+ // every time the previous attempt failed. Only try to load once.
|
||||
+ if (library) {
|
||||
+ // TODO(henrike): not thread safe as reading and writing to library is not
|
||||
+ // serialized. Fix.
|
||||
+ WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, "Loaded Kernel.dll");
|
||||
+
|
||||
+ PInitializeConditionVariable_ =
|
||||
+ (PInitializeConditionVariable) GetProcAddress(
|
||||
+ library, "InitializeConditionVariable");
|
||||
+ PSleepConditionVariableCS_ = (PSleepConditionVariableCS) GetProcAddress(
|
||||
+ library, "SleepConditionVariableCS");
|
||||
+ PWakeConditionVariable_ = (PWakeConditionVariable) GetProcAddress(
|
||||
+ library, "WakeConditionVariable");
|
||||
+ PWakeAllConditionVariable_ = (PWakeAllConditionVariable) GetProcAddress(
|
||||
+ library, "WakeAllConditionVariable");
|
||||
+
|
||||
+ if (PInitializeConditionVariable_ && PSleepConditionVariableCS_
|
||||
+ && PWakeConditionVariable_ && PWakeAllConditionVariable_) {
|
||||
+ WEBRTC_TRACE(
|
||||
+ kTraceStateInfo, kTraceUtility, -1,
|
||||
+ "Loaded native condition variables");
|
||||
+ win_support_condition_variables_primitive = true;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ if (!win_support_condition_variables_primitive) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ PInitializeConditionVariable_(&condition_variable_);
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+void ConditionVariableNativeWin::SleepCS(CriticalSectionWrapper& crit_sect) {
|
||||
+ SleepCS(crit_sect, INFINITE);
|
||||
+}
|
||||
+
|
||||
+bool ConditionVariableNativeWin::SleepCS(CriticalSectionWrapper& crit_sect,
|
||||
+ unsigned long max_time_in_ms) {
|
||||
+ CriticalSectionWindows* cs =
|
||||
+ static_cast<CriticalSectionWindows*>(&crit_sect);
|
||||
+ BOOL ret_val = PSleepConditionVariableCS_(&condition_variable_,
|
||||
+ &(cs->crit), max_time_in_ms);
|
||||
+ return ret_val != 0;
|
||||
+}
|
||||
+
|
||||
+void ConditionVariableNativeWin::Wake() {
|
||||
+ PWakeConditionVariable_(&condition_variable_);
|
||||
+}
|
||||
+
|
||||
+void ConditionVariableNativeWin::WakeAll() {
|
||||
+ PWakeAllConditionVariable_(&condition_variable_);
|
||||
+}
|
||||
+
|
||||
+} // namespace webrtc
|
||||
diff --git a/webrtc/system_wrappers/source/condition_variable_native_win.h b/webrtc/system_wrappers/source/condition_variable_native_win.h
|
||||
new file mode 100644
|
||||
index 0000000..c22787f
|
||||
--- /dev/null
|
||||
+++ b/webrtc/system_wrappers/source/condition_variable_native_win.h
|
||||
@@ -0,0 +1,54 @@
|
||||
+/*
|
||||
+ * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
||||
+ *
|
||||
+ * Use of this source code is governed by a BSD-style license
|
||||
+ * that can be found in the LICENSE file in the root of the source
|
||||
+ * tree. An additional intellectual property rights grant can be found
|
||||
+ * in the file PATENTS. All contributing project authors may
|
||||
+ * be found in the AUTHORS file in the root of the source tree.
|
||||
+ */
|
||||
+
|
||||
+#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_NATIVE_WIN_H_
|
||||
+#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_NATIVE_WIN_H_
|
||||
+
|
||||
+#include <windows.h>
|
||||
+
|
||||
+#include "webrtc/system_wrappers/include/condition_variable_wrapper.h"
|
||||
+
|
||||
+namespace webrtc {
|
||||
+
|
||||
+#if !defined CONDITION_VARIABLE_INIT
|
||||
+typedef struct RTL_CONDITION_VARIABLE_ {
|
||||
+ void* Ptr;
|
||||
+} RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE;
|
||||
+
|
||||
+typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;
|
||||
+#endif
|
||||
+
|
||||
+typedef void (WINAPI* PInitializeConditionVariable)(PCONDITION_VARIABLE);
|
||||
+typedef BOOL (WINAPI* PSleepConditionVariableCS)(PCONDITION_VARIABLE,
|
||||
+ PCRITICAL_SECTION, DWORD);
|
||||
+typedef void (WINAPI* PWakeConditionVariable)(PCONDITION_VARIABLE);
|
||||
+typedef void (WINAPI* PWakeAllConditionVariable)(PCONDITION_VARIABLE);
|
||||
+
|
||||
+class ConditionVariableNativeWin : public ConditionVariableWrapper {
|
||||
+ public:
|
||||
+ static ConditionVariableWrapper* Create();
|
||||
+ virtual ~ConditionVariableNativeWin();
|
||||
+
|
||||
+ void SleepCS(CriticalSectionWrapper& crit_sect);
|
||||
+ bool SleepCS(CriticalSectionWrapper& crit_sect, unsigned long max_time_inMS);
|
||||
+ void Wake();
|
||||
+ void WakeAll();
|
||||
+
|
||||
+ private:
|
||||
+ ConditionVariableNativeWin();
|
||||
+
|
||||
+ bool Init();
|
||||
+
|
||||
+ CONDITION_VARIABLE condition_variable_;
|
||||
+};
|
||||
+
|
||||
+} // namespace webrtc
|
||||
+
|
||||
+#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_NATIVE_WIN_H_
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
From 75ef0de24167daa84c11774f4bc9d1b4a9eaacfa Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Tue, 5 Jul 2016 18:07:45 -0400
|
||||
Subject: build: Protect against unsupported CPU types
|
||||
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 5ec8517..1fcbd53 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -73,7 +73,8 @@ AS_CASE(["${host}"],
|
||||
[
|
||||
PLATFORM_CFLAGS="-DWEBRTC_WIN -D_WIN32 -U__STRICT_ANSI__"
|
||||
HAVE_WIN=1
|
||||
- ]
|
||||
+ ],
|
||||
+ [AC_MSG_ERROR([Unsupported host $host])]
|
||||
)
|
||||
AC_SUBST(PLATFORM_CFLAGS)
|
||||
AM_CONDITIONAL(HAVE_POSIX, [test "x${HAVE_POSIX}" = "x1"])
|
||||
@@ -94,8 +95,9 @@ AS_CASE(["${host_cpu}"],
|
||||
[
|
||||
HAVE_ARM=1
|
||||
ARCH_CFLAGS="-DWEBRTC_ARCH_ARM"
|
||||
- ]
|
||||
+ ],
|
||||
# FIXME: Add MIPS support, see webrtc/BUILD.gn for defines
|
||||
+ [AC_MSG_ERROR([Unsupported CPU type $host_cpu])]
|
||||
)
|
||||
AM_CONDITIONAL(HAVE_X86, [test "x${HAVE_X86}" = "x1"])
|
||||
AM_CONDITIONAL(HAVE_ARM, [test "x${HAVE_ARM}" = "x1"])
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
From 1378babdf0f56938408d8137595023efe1bd7c2d Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Tue, 5 Jul 2016 18:44:19 -0400
|
||||
Subject: osx: Fix type OS_FLAGS instead of OS_CFLAGS
|
||||
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 1fcbd53..41d521c 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -64,8 +64,8 @@ AS_CASE(["${host}"],
|
||||
[*-*darwin*],
|
||||
[
|
||||
AS_IF([test "$HAVE_IOS" = "yes"],
|
||||
- [OS_FLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"],
|
||||
- [OS_FLAGS="-DWEBRTC_MAC"])
|
||||
+ [OS_CFLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"],
|
||||
+ [OS_CFLAGS="-DWEBRTC_MAC"])
|
||||
PLATFORM_CFLAGS="-DWEBRTC_POSIX"
|
||||
HAVE_POSIX=1
|
||||
],
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
From c9cffb9e3d632b61465afbca5d10c36512888035 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Wed, 6 Jul 2016 11:32:55 -0400
|
||||
Subject: build: Sync defines and libs with build.gn
|
||||
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 41d521c..bdefd72 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -51,26 +51,29 @@ AC_CHECK_HEADER(MobileCoreServices/MobileCoreServices.h, HAVE_IOS="yes", HAVE_IO
|
||||
AS_CASE(["${host}"],
|
||||
[*android*],
|
||||
[
|
||||
- OS_CFLAGS="-DWEBRTC_ANDROID -DWEBRTC_LINUX"
|
||||
+ OS_CFLAGS="-DWEBRTC_ANDROID -DWEBRTC_LINUX -DWEBRTC_THREAD_RR -DWEBRTC_CLOCK_TYPE_REALTIME"
|
||||
+ OS_LDFLAGS="-llog"
|
||||
PLATFORM_CFLAGS="-DWEBRTC_POSIX"
|
||||
HAVE_POSIX=1
|
||||
],
|
||||
[*-*linux*],
|
||||
[
|
||||
- OS_CFLAGS="-DWEBRTC_LINUX"
|
||||
+ OS_CFLAGS="-DWEBRTC_LINUX -DWEBRTC_THREAD_RR"
|
||||
PLATFORM_CFLAGS="-DWEBRTC_POSIX"
|
||||
+ OS_LDFLAGS="-lrt"
|
||||
HAVE_POSIX=1
|
||||
],
|
||||
[*-*darwin*],
|
||||
[
|
||||
+ OS_CFLAGS="-DWEBRTC_MAC -DWEBRTC_THREAD_RR -DWEBRTC_CLOCK_TYPE_REALTIME"
|
||||
AS_IF([test "$HAVE_IOS" = "yes"],
|
||||
- [OS_CFLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"],
|
||||
- [OS_CFLAGS="-DWEBRTC_MAC"])
|
||||
+ [OS_CFLAGS+=" -DWEBRTC_IOS"])
|
||||
PLATFORM_CFLAGS="-DWEBRTC_POSIX"
|
||||
HAVE_POSIX=1
|
||||
],
|
||||
[*-mingw32*],
|
||||
[
|
||||
+ OS_LDFLAGS="-lwinmm"
|
||||
PLATFORM_CFLAGS="-DWEBRTC_WIN -D_WIN32 -U__STRICT_ANSI__"
|
||||
HAVE_WIN=1
|
||||
],
|
||||
@@ -131,8 +134,10 @@ AM_CONDITIONAL([HAVE_NEON], [test "x$HAVE_NEON" = "x1"])
|
||||
|
||||
COMMON_CFLAGS="-DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} -DNDEBUG -I\$(top_srcdir)"
|
||||
COMMON_CXXFLAGS="-std=c++11 -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} ${GNUSTL_CFLAGS} -DNDEBUG -I\$(top_srcdir)"
|
||||
+COMMON_LDFLAGS="${OS_LDFLAGS}"
|
||||
AC_SUBST([COMMON_CFLAGS])
|
||||
AC_SUBST([COMMON_CXXFLAGS])
|
||||
+AC_SUBST([COMMON_LDFLAGS])
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
webrtc-audio-processing.pc
|
||||
diff --git a/webrtc/modules/audio_processing/Makefile.am b/webrtc/modules/audio_processing/Makefile.am
|
||||
index 8e45e3d..de259f0 100644
|
||||
--- a/webrtc/modules/audio_processing/Makefile.am
|
||||
+++ b/webrtc/modules/audio_processing/Makefile.am
|
||||
@@ -174,7 +174,7 @@ libwebrtc_audio_processing_la_LIBADD = $(top_builddir)/webrtc/libwebrtc.la \
|
||||
$(top_builddir)/webrtc/modules/audio_coding/libaudio_coding.la \
|
||||
$(LIBWEBRTC_PRIVATEARCH) \
|
||||
$(GNUSTL_LIBS)
|
||||
-libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) \
|
||||
+libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) $(COMMON_LDFLAGS) \
|
||||
-Wl,--no-undefined \
|
||||
-version-info $(LIBWEBRTC_AUDIO_PROCESSING_VERSION_INFO)
|
||||
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
From b8be6d1095df620bf0e2b5855818fa4340244254 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Wed, 6 Jul 2016 13:44:15 -0400
|
||||
Subject: build: Use -no-undefined to support both clang and gcc
|
||||
|
||||
|
||||
diff --git a/webrtc/modules/audio_processing/Makefile.am b/webrtc/modules/audio_processing/Makefile.am
|
||||
index de259f0..5a98913 100644
|
||||
--- a/webrtc/modules/audio_processing/Makefile.am
|
||||
+++ b/webrtc/modules/audio_processing/Makefile.am
|
||||
@@ -175,7 +175,7 @@ libwebrtc_audio_processing_la_LIBADD = $(top_builddir)/webrtc/libwebrtc.la \
|
||||
$(LIBWEBRTC_PRIVATEARCH) \
|
||||
$(GNUSTL_LIBS)
|
||||
libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) $(COMMON_LDFLAGS) \
|
||||
- -Wl,--no-undefined \
|
||||
+ -no-undefined \
|
||||
-version-info $(LIBWEBRTC_AUDIO_PROCESSING_VERSION_INFO)
|
||||
|
||||
# FIXME: The MIPS optimisations need to be hooked up once we have the
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
From 7a37a8bca386faf206fef32cd8cdf0f8ea3313d5 Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Wed, 6 Jul 2016 13:57:00 -0400
|
||||
Subject: build: Re-add pthread linking on linux
|
||||
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index bdefd72..a0c194a 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -60,7 +60,7 @@ AS_CASE(["${host}"],
|
||||
[
|
||||
OS_CFLAGS="-DWEBRTC_LINUX -DWEBRTC_THREAD_RR"
|
||||
PLATFORM_CFLAGS="-DWEBRTC_POSIX"
|
||||
- OS_LDFLAGS="-lrt"
|
||||
+ OS_LDFLAGS="-lrt -lpthread"
|
||||
HAVE_POSIX=1
|
||||
],
|
||||
[*-*darwin*],
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
From 7d15b10fb0829d456486da6a49a84492dd3eca4f Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
||||
Date: Wed, 6 Jul 2016 15:18:15 -0400
|
||||
Subject: build: Add ARM 64bit support
|
||||
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index a0c194a..b4b9ddf 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -99,6 +99,11 @@ AS_CASE(["${host_cpu}"],
|
||||
HAVE_ARM=1
|
||||
ARCH_CFLAGS="-DWEBRTC_ARCH_ARM"
|
||||
],
|
||||
+ [aarch64*],
|
||||
+ [
|
||||
+ HAVE_NEON=1
|
||||
+ ARCH_CFLAGS="-DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"
|
||||
+ ],
|
||||
# FIXME: Add MIPS support, see webrtc/BUILD.gn for defines
|
||||
[AC_MSG_ERROR([Unsupported CPU type $host_cpu])]
|
||||
)
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
From ff77a85c28564d939d554ba264480d1876cbc316 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
Date: Sat, 6 Aug 2016 11:02:43 +0200
|
||||
Subject: build: fix architecture detection
|
||||
|
||||
The current architecture detection, based on the "host_cpu" part of the
|
||||
tuple does not work properly for a number of reason:
|
||||
|
||||
- The code assumes that if host_cpu starts with "arm" then ARM
|
||||
instructions are available, which is incorrect. Indeed, Cortex-M
|
||||
platforms can run Linux, they are ARM platforms (so host_cpu = arm),
|
||||
but they don't support ARM instructions: they support only the
|
||||
Thumb-2 instruction set.
|
||||
|
||||
- The armv7 case is also not very useful, as it is not standard at all
|
||||
to pass armv7 as host_cpu even if the host system is actually ARMv7
|
||||
based.
|
||||
|
||||
- For the same reason, the armv8 case is not very useful: ARMv8 is
|
||||
AArch64, and there is already a separate case to handle this
|
||||
architecture.
|
||||
|
||||
So, this commit moves away from a host_cpu based logic, and instead
|
||||
tests using AC_CHECK_DECLS() the built-in definitions of the compiler:
|
||||
|
||||
- If we have __ARM_ARCH_ISA_ARM defined, then it's an ARM processor
|
||||
that supports the ARM instruction set (this allows to exclude Thumb-2
|
||||
only processors).
|
||||
|
||||
- If we have __ARM_ARCH_7A__, then we have an ARMv7-A processor, and
|
||||
we can enable the corresponding optimizations
|
||||
|
||||
- Same for __aarch64__, __i386__ and __x86_64__.
|
||||
|
||||
In addition, we remove the AC_MSG_ERROR() that makes the build fail for
|
||||
all architectures but the ones that are explicitly supported. Indeed,
|
||||
webrtc-audio-processing builds just fine for other architectures (tested
|
||||
on MIPS), it's just that none of the architecture-specific optimizations
|
||||
will be used.
|
||||
|
||||
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index b4b9ddf..acbb3e2 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -83,30 +83,17 @@ AC_SUBST(PLATFORM_CFLAGS)
|
||||
AM_CONDITIONAL(HAVE_POSIX, [test "x${HAVE_POSIX}" = "x1"])
|
||||
AM_CONDITIONAL(HAVE_WIN, [test "x${HAVE_WIN}" = "x1"])
|
||||
|
||||
-AS_CASE(["${host_cpu}"],
|
||||
- [i?86|x86_64],
|
||||
- [
|
||||
- HAVE_X86=1
|
||||
- ],
|
||||
- [armv7*|armv8*],
|
||||
- [
|
||||
- HAVE_ARM=1
|
||||
- HAVE_ARMV7=1
|
||||
- ARCH_CFLAGS="-DWEBRTC_ARCH_ARM -DWEBRTC_ARCH_ARM_V7"
|
||||
- ],
|
||||
- [arm*],
|
||||
- [
|
||||
- HAVE_ARM=1
|
||||
- ARCH_CFLAGS="-DWEBRTC_ARCH_ARM"
|
||||
- ],
|
||||
- [aarch64*],
|
||||
- [
|
||||
- HAVE_NEON=1
|
||||
- ARCH_CFLAGS="-DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"
|
||||
- ],
|
||||
- # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines
|
||||
- [AC_MSG_ERROR([Unsupported CPU type $host_cpu])]
|
||||
-)
|
||||
+# Testing __ARM_ARCH_ISA_ARM since the code contains ARM instructions,
|
||||
+# which don't work on Thumb-2 only platforms (ARMv7-M).
|
||||
+AC_CHECK_DECLS([__ARM_ARCH_ISA_ARM],
|
||||
+ [HAVE_ARM=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_ARCH_ARM"])
|
||||
+AC_CHECK_DECLS([__ARM_ARCH_7A__],
|
||||
+ [HAVE_ARMV7=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_ARCH_ARM_V7"])
|
||||
+AC_CHECK_DECLS([__aarch64__],
|
||||
+ [HAVE_NEON=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"])
|
||||
+AC_CHECK_DECLS([__i386__], [HAVE_X86=1])
|
||||
+AC_CHECK_DECLS([__x86_64__], [HAVE_X86=1])
|
||||
+
|
||||
AM_CONDITIONAL(HAVE_X86, [test "x${HAVE_X86}" = "x1"])
|
||||
AM_CONDITIONAL(HAVE_ARM, [test "x${HAVE_ARM}" = "x1"])
|
||||
AM_CONDITIONAL(HAVE_ARMV7, [test "x${HAVE_ARMV7}" = "x1"])
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
From 0d937fbc7152f34f32cd4cd016ed623434b90796 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
Date: Sat, 6 Aug 2016 11:03:27 +0200
|
||||
Subject: doc: file invalid reference to pulseaudio mailing list
|
||||
|
||||
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
|
||||
diff --git a/README.md b/README.md
|
||||
index 03de756..9133f17 100644
|
||||
--- a/README.md
|
||||
+++ b/README.md
|
||||
@@ -18,7 +18,7 @@ Feedback
|
||||
========
|
||||
|
||||
Patches, suggestions welcome. You can send them to the PulseAudio mailing
|
||||
-list[2] or to me at the address below.
|
||||
+list[3] or to me at the address below.
|
||||
|
||||
-- Arun Raghavan <mail@arunraghavan.net>
|
||||
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
# Template file for 'webrtc-audio-processing'
|
||||
pkgname=webrtc-audio-processing
|
||||
version=0.3
|
||||
revision=3
|
||||
version=0.3.1
|
||||
revision=1
|
||||
build_style=gnu-configure
|
||||
patch_args="-p1"
|
||||
short_desc="AudioProcessing library based on Google's implementation of WebRTC"
|
||||
hostmakedepends="automake libtool"
|
||||
maintainer="Juan RP <xtraeme@voidlinux.eu>"
|
||||
license="BSD"
|
||||
license="BSD-3-Clause"
|
||||
homepage="http://freedesktop.org/software/pulseaudio/webrtc-audio-processing"
|
||||
distfiles="${homepage}/${pkgname}-${version}.tar.xz"
|
||||
checksum=756e291d4f557d88cd50c4fe3b8454ec238362d22cedb3e6173240d90f0a80fa
|
||||
checksum=a0fdd938fd85272d67e81572c5a4d9e200a0c104753cb3c209ded175ce3c5dbf
|
||||
|
||||
case "$XBPS_TARGET_MACHINE" in
|
||||
# Disable neon for the arm* architectures
|
||||
|
|
Loading…
Reference in New Issue