Bug 987186 - now take params as ConstrainBooleans; r=jib
--- a/dom/media/webrtc/MediaEngineWebRTCAudio.cpp
+++ b/dom/media/webrtc/MediaEngineWebRTCAudio.cpp
@@ -247,19 +247,21 @@ MediaEngineWebRTCMicrophoneSource::Alloc
return Restart(aConstraints, aPrefs, aDeviceId);
}
nsresult
MediaEngineWebRTCMicrophoneSource::Restart(const dom::MediaTrackConstraints& aConstraints,
const MediaEnginePrefs &aPrefs,
const nsString& aDeviceId)
{
- bool aec_on = aConstraints.mEchoCancellation.WasPassed() ? aConstraints.mEchoCancellation.Value() : aPrefs.mAecOn;
- bool agc_on = aConstraints.mMozAutoGainControl.WasPassed() ? aConstraints.mMozAutoGainControl.Value() : aPrefs.mAgcOn;
- bool noise_on = aConstraints.mMozNoiseSuppression.WasPassed() ? aConstraints.mMozNoiseSuppression.Value() : aPrefs.mNoiseOn;
+ FlattenedConstraints c(aConstraints);
+
+ bool aec_on = c.mEchoCancellation.Get(aPrefs.mAecOn);
+ bool agc_on = c.mMozAutoGainControl.Get(aPrefs.mAgcOn);
+ bool noise_on = c.mMozNoiseSuppression.Get(aPrefs.mNoiseOn);
LOG(("Audio config: aec: %d, agc: %d, noise: %d",
aec_on ? aPrefs.mAec : -1,
agc_on ? aPrefs.mAgc : -1,
noise_on ? aPrefs.mNoise : -1));
bool update_echo = (mEchoOn != aec_on);
bool update_agc = (mAgcOn != agc_on);
--- a/dom/media/webrtc/MediaTrackConstraints.cpp
+++ b/dom/media/webrtc/MediaTrackConstraints.cpp
@@ -56,16 +56,38 @@ NormalizedConstraintSet::DoubleRange::Do
} else {
mIdeal.Construct(aOther.GetAsDouble());
}
} else {
SetFrom(aOther.GetAsConstrainDoubleRange());
}
}
+NormalizedConstraintSet::BooleanRange::BooleanRange(
+ const dom::OwningBooleanOrConstrainBooleanParameters& aOther, bool advanced)
+: Range<bool>(false, true)
+{
+ if (aOther.IsBoolean()) {
+ if (advanced) {
+ mMin = mMax = aOther.GetAsBoolean();
+ } else {
+ mIdeal.Construct(aOther.GetAsBoolean());
+ }
+ } else {
+ const ConstrainBooleanParameters& r = aOther.GetAsConstrainBooleanParameters();
+ if (r.mIdeal.WasPassed()) {
+ mIdeal.Construct(r.mIdeal.Value());
+ }
+ if (r.mExact.WasPassed()) {
+ mMin = r.mExact.Value();
+ mMax = r.mExact.Value();
+ }
+ }
+}
+
FlattenedConstraints::FlattenedConstraints(const dom::MediaTrackConstraints& aOther)
: NormalizedConstraintSet(aOther, false)
{
if (aOther.mAdvanced.WasPassed()) {
const auto& advanced = aOther.mAdvanced.Value();
for (size_t i = 0; i < advanced.Length(); i++) {
NormalizedConstraintSet set(advanced[i], true);
// Must only apply compatible i.e. inherently non-overconstraining sets
--- a/dom/media/webrtc/MediaTrackConstraints.h
+++ b/dom/media/webrtc/MediaTrackConstraints.h
@@ -67,30 +67,40 @@ struct NormalizedConstraintSet
};
struct DoubleRange : public Range<double>
{
DoubleRange(const dom::OwningDoubleOrConstrainDoubleRange& aOther,
bool advanced);
};
+ struct BooleanRange : public Range<bool>
+ {
+ BooleanRange(const dom::OwningBooleanOrConstrainBooleanParameters& aOther,
+ bool advanced);
+ };
+
// Do you need to add your constraint here? Only if your code uses flattening
LongRange mWidth, mHeight;
DoubleRange mFrameRate;
LongRange mViewportOffsetX, mViewportOffsetY, mViewportWidth, mViewportHeight;
+ BooleanRange mEchoCancellation, mMozNoiseSuppression, mMozAutoGainControl;
NormalizedConstraintSet(const dom::MediaTrackConstraintSet& aOther,
bool advanced)
: mWidth(aOther.mWidth, advanced)
, mHeight(aOther.mHeight, advanced)
, mFrameRate(aOther.mFrameRate, advanced)
, mViewportOffsetX(aOther.mViewportOffsetX, advanced)
, mViewportOffsetY(aOther.mViewportOffsetY, advanced)
, mViewportWidth(aOther.mViewportWidth, advanced)
- , mViewportHeight(aOther.mViewportHeight, advanced) {}
+ , mViewportHeight(aOther.mViewportHeight, advanced)
+ , mEchoCancellation(aOther.mEchoCancellation, advanced)
+ , mMozNoiseSuppression(aOther.mMozNoiseSuppression, advanced)
+ , mMozAutoGainControl(aOther.mMozAutoGainControl, advanced) {}
};
struct FlattenedConstraints : public NormalizedConstraintSet
{
explicit FlattenedConstraints(const dom::MediaTrackConstraints& aOther);
};
// A helper class for MediaEngines
--- a/dom/webidl/MediaStreamTrack.webidl
+++ b/dom/webidl/MediaStreamTrack.webidl
@@ -49,19 +49,19 @@ dictionary MediaTrackConstraintSet {
DOMString mediaSource = "camera";
long long browserWindow;
boolean scrollWithPage;
ConstrainDOMString deviceId;
ConstrainLong viewportOffsetX;
ConstrainLong viewportOffsetY;
ConstrainLong viewportWidth;
ConstrainLong viewportHeight;
- boolean echoCancellation;
- boolean mozNoiseSuppression;
- boolean mozAutoGainControl;
+ ConstrainBoolean echoCancellation;
+ ConstrainBoolean mozNoiseSuppression;
+ ConstrainBoolean mozAutoGainControl;
};
dictionary MediaTrackConstraints : MediaTrackConstraintSet {
sequence<MediaTrackConstraintSet> advanced;
};
[Exposed=Window]
interface MediaStreamTrack : EventTarget {