Bug 987186 - now take params as ConstrainBooleans; r=jib draft
authorBrian Armstrong <brian.armstrong.ece+moz@gmail.com>
Wed, 20 Jan 2016 13:11:42 -0800
changeset 323633 5b9892ae3a8e786de7d56536d71418f556f57732
parent 323632 f88c6fe71ba0e306583c81d836b82e423d9c2dfe
child 513249 1ccfb33c3d5f9f682dbfa85c2ee2a5d535543f95
push id9759
push userbmo:brian.armstrong.ece+github@gmail.com
push dateWed, 20 Jan 2016 21:19:45 +0000
reviewersjib
bugs987186
milestone46.0a1
Bug 987186 - now take params as ConstrainBooleans; r=jib
dom/media/webrtc/MediaEngineWebRTCAudio.cpp
dom/media/webrtc/MediaTrackConstraints.cpp
dom/media/webrtc/MediaTrackConstraints.h
dom/webidl/MediaStreamTrack.webidl
--- 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 {