aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraluebs <aluebs@webrtc.org>2016-01-14 04:32:46 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-14 12:32:51 +0000
commit688e308a353c27803a66803230235638f4dd1f2b (patch)
tree53172ae9e65a838e5123b7b8c7c8bb27e3b527f9
parent7307952a5bf63311e5f9a2a90089a06177e42716 (diff)
downloadwebrtc-688e308a353c27803a66803230235638f4dd1f2b.tar.gz
Re-land: "Use an explicit identifier in Config"
This let's us use them to configure them when using WebRTC as an external library. One use case where this is necessary is in the Android OS. Original CL: https://codereview.webrtc.org/1538643004/ TBR=tommi@webrtc.org Review URL: https://codereview.webrtc.org/1589573004 Cr-Commit-Position: refs/heads/master@{#11248}
-rwxr-xr-xtalk/libjingle.gyp6
-rw-r--r--webrtc/BUILD.gn6
-rw-r--r--webrtc/common.h27
-rw-r--r--webrtc/config.h4
-rw-r--r--webrtc/modules/audio_processing/include/audio_processing.h6
-rw-r--r--webrtc/modules/video_coding/codecs/vp8/temporal_layers.h3
-rw-r--r--webrtc/test/common_unittest.cc3
7 files changed, 48 insertions, 7 deletions
diff --git a/talk/libjingle.gyp b/talk/libjingle.gyp
index da7f80b60d..6e0f8a3424 100755
--- a/talk/libjingle.gyp
+++ b/talk/libjingle.gyp
@@ -712,10 +712,16 @@
'include_dirs': [
'<(DEPTH)/testing/gtest/include',
],
+ 'include_dirs!': [
+ '<(DEPTH)/webrtc',
+ ],
'direct_dependent_settings': {
'include_dirs': [
'<(DEPTH)/testing/gtest/include',
],
+ 'include_dirs!': [
+ '<(DEPTH)/webrtc',
+ ],
},
'sources': [
'session/media/audiomonitor.cc',
diff --git a/webrtc/BUILD.gn b/webrtc/BUILD.gn
index b26d29f2ee..be824b7bc7 100644
--- a/webrtc/BUILD.gn
+++ b/webrtc/BUILD.gn
@@ -238,6 +238,12 @@ source_set("webrtc_common") {
configs += [ ":common_config" ]
public_configs = [ ":common_inherited_config" ]
+
+ if (is_clang && !is_nacl) {
+ # Suppress warnings from Chrome's Clang plugins.
+ # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
+ configs -= [ "//build/config/clang:find_bad_constructs" ]
+ }
}
source_set("gtest_prod") {
diff --git a/webrtc/common.h b/webrtc/common.h
index dda045ee6c..d705d4b8ed 100644
--- a/webrtc/common.h
+++ b/webrtc/common.h
@@ -17,6 +17,23 @@
namespace webrtc {
+// Only add new values to the end of the enumeration and never remove (only
+// deprecate) to maintain binary compatibility.
+enum class ConfigOptionID {
+ kMyExperimentForTest,
+ kAlgo1CostFunctionForTest,
+ kTemporalLayersFactory,
+ kNetEqCapacityConfig,
+ kNetEqFastAccelerate,
+ kVoicePacing,
+ kExtendedFilter,
+ kDelayAgnostic,
+ kExperimentalAgc,
+ kExperimentalNs,
+ kBeamforming,
+ kIntelligibility
+};
+
// Class Config is designed to ease passing a set of options across webrtc code.
// Options are identified by typename in order to avoid incorrect casts.
//
@@ -61,8 +78,6 @@ class Config {
}
private:
- typedef void* OptionIdentifier;
-
struct BaseOption {
virtual ~BaseOption() {}
};
@@ -76,11 +91,9 @@ class Config {
T* value;
};
- // Own implementation of rtti-subset to avoid depending on rtti and its costs.
template<typename T>
- static OptionIdentifier identifier() {
- static char id_placeholder;
- return &id_placeholder;
+ static ConfigOptionID identifier() {
+ return T::identifier;
}
// Used to instantiate a default constructed object that doesn't needs to be
@@ -92,7 +105,7 @@ class Config {
return def;
}
- typedef std::map<OptionIdentifier, BaseOption*> OptionMap;
+ typedef std::map<ConfigOptionID, BaseOption*> OptionMap;
OptionMap options_;
// RTC_DISALLOW_COPY_AND_ASSIGN
diff --git a/webrtc/config.h b/webrtc/config.h
index 45a2ece416..06460ae359 100644
--- a/webrtc/config.h
+++ b/webrtc/config.h
@@ -16,6 +16,7 @@
#include <string>
#include <vector>
+#include "webrtc/common.h"
#include "webrtc/common_types.h"
#include "webrtc/typedefs.h"
@@ -128,6 +129,7 @@ struct VideoEncoderConfig {
struct NetEqCapacityConfig {
NetEqCapacityConfig() : enabled(false), capacity(0) {}
explicit NetEqCapacityConfig(int value) : enabled(true), capacity(value) {}
+ static const ConfigOptionID identifier = ConfigOptionID::kNetEqCapacityConfig;
bool enabled;
int capacity;
};
@@ -135,12 +137,14 @@ struct NetEqCapacityConfig {
struct NetEqFastAccelerate {
NetEqFastAccelerate() : enabled(false) {}
explicit NetEqFastAccelerate(bool value) : enabled(value) {}
+ static const ConfigOptionID identifier = ConfigOptionID::kNetEqFastAccelerate;
bool enabled;
};
struct VoicePacing {
VoicePacing() : enabled(false) {}
explicit VoicePacing(bool value) : enabled(value) {}
+ static const ConfigOptionID identifier = ConfigOptionID::kVoicePacing;
bool enabled;
};
diff --git a/webrtc/modules/audio_processing/include/audio_processing.h b/webrtc/modules/audio_processing/include/audio_processing.h
index 5dd63ebc30..9a3a4b32d5 100644
--- a/webrtc/modules/audio_processing/include/audio_processing.h
+++ b/webrtc/modules/audio_processing/include/audio_processing.h
@@ -65,6 +65,7 @@ class VoiceDetection;
struct ExtendedFilter {
ExtendedFilter() : enabled(false) {}
explicit ExtendedFilter(bool enabled) : enabled(enabled) {}
+ static const ConfigOptionID identifier = ConfigOptionID::kExtendedFilter;
bool enabled;
};
@@ -76,6 +77,7 @@ struct ExtendedFilter {
struct DelayAgnostic {
DelayAgnostic() : enabled(false) {}
explicit DelayAgnostic(bool enabled) : enabled(enabled) {}
+ static const ConfigOptionID identifier = ConfigOptionID::kDelayAgnostic;
bool enabled;
};
@@ -96,6 +98,7 @@ struct ExperimentalAgc {
: enabled(enabled), startup_min_volume(kAgcStartupMinVolume) {}
ExperimentalAgc(bool enabled, int startup_min_volume)
: enabled(enabled), startup_min_volume(startup_min_volume) {}
+ static const ConfigOptionID identifier = ConfigOptionID::kExperimentalAgc;
bool enabled;
int startup_min_volume;
};
@@ -105,6 +108,7 @@ struct ExperimentalAgc {
struct ExperimentalNs {
ExperimentalNs() : enabled(false) {}
explicit ExperimentalNs(bool enabled) : enabled(enabled) {}
+ static const ConfigOptionID identifier = ConfigOptionID::kExperimentalNs;
bool enabled;
};
@@ -127,6 +131,7 @@ struct Beamforming {
: enabled(enabled),
array_geometry(array_geometry),
target_direction(target_direction) {}
+ static const ConfigOptionID identifier = ConfigOptionID::kBeamforming;
const bool enabled;
const std::vector<Point> array_geometry;
const SphericalPointf target_direction;
@@ -141,6 +146,7 @@ struct Beamforming {
struct Intelligibility {
Intelligibility() : enabled(false) {}
explicit Intelligibility(bool enabled) : enabled(enabled) {}
+ static const ConfigOptionID identifier = ConfigOptionID::kIntelligibility;
bool enabled;
};
diff --git a/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h b/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h
index 7fe03a4da8..47112c64aa 100644
--- a/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h
+++ b/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h
@@ -14,6 +14,7 @@
#include "vpx/vpx_encoder.h"
+#include "webrtc/common.h"
#include "webrtc/common_video/include/video_image.h"
#include "webrtc/typedefs.h"
@@ -30,6 +31,8 @@ class TemporalLayers {
virtual ~Factory() {}
virtual TemporalLayers* Create(int temporal_layers,
uint8_t initial_tl0_pic_idx) const;
+ static const ConfigOptionID identifier =
+ ConfigOptionID::kTemporalLayersFactory;
};
virtual ~TemporalLayers() {}
diff --git a/webrtc/test/common_unittest.cc b/webrtc/test/common_unittest.cc
index 082c18c2c7..a239dade73 100644
--- a/webrtc/test/common_unittest.cc
+++ b/webrtc/test/common_unittest.cc
@@ -15,6 +15,7 @@ namespace webrtc {
namespace {
struct MyExperiment {
+ static const ConfigOptionID identifier = ConfigOptionID::kMyExperimentForTest;
static const int kDefaultFactor;
static const int kDefaultOffset;
@@ -56,6 +57,8 @@ TEST(Config, SetNullSetsTheOptionBackToDefault) {
}
struct Algo1_CostFunction {
+ static const ConfigOptionID identifier =
+ ConfigOptionID::kAlgo1CostFunctionForTest;
Algo1_CostFunction() {}
virtual int cost(int x) const {