10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2012, Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef TALK_APP_WEBRTC_TEST_FAKECONSTRAINTS_H_ 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TALK_APP_WEBRTC_TEST_FAKECONSTRAINTS_H_ 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <string> 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector> 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/app/webrtc/mediaconstraintsinterface.h" 352a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/stringencode.h" 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace webrtc { 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass FakeConstraints : public webrtc::MediaConstraintsInterface { 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org FakeConstraints() { } 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~FakeConstraints() { } 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual const Constraints& GetMandatory() const { 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return mandatory_; 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual const Constraints& GetOptional() const { 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return optional_; 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org template <class T> 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddMandatory(const std::string& key, const T& value) { 542a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org mandatory_.push_back(Constraint(key, rtc::ToString<T>(value))); 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org template <class T> 588841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org void SetMandatory(const std::string& key, const T& value) { 598841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org std::string value_str; 608841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org if (mandatory_.FindFirst(key, &value_str)) { 618841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org for (Constraints::iterator iter = mandatory_.begin(); 628841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org iter != mandatory_.end(); ++iter) { 638841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org if (iter->key == key) { 648841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org mandatory_.erase(iter); 658841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org break; 668841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org } 678841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org } 688841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org } 692a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org mandatory_.push_back(Constraint(key, rtc::ToString<T>(value))); 708841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org } 718841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org 728841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org template <class T> 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddOptional(const std::string& key, const T& value) { 742a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org optional_.push_back(Constraint(key, rtc::ToString<T>(value))); 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetMandatoryMinAspectRatio(double ratio) { 788841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kMinAspectRatio, ratio); 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetMandatoryMinWidth(int width) { 828841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kMinWidth, width); 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetMandatoryMinHeight(int height) { 868841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kMinHeight, height); 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetOptionalMaxWidth(int width) { 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddOptional(MediaConstraintsInterface::kMaxWidth, width); 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetMandatoryMaxFrameRate(int frame_rate) { 948841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kMaxFrameRate, frame_rate); 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetMandatoryReceiveAudio(bool enable) { 988841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kOfferToReceiveAudio, enable); 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetMandatoryReceiveVideo(bool enable) { 1028841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kOfferToReceiveVideo, enable); 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetMandatoryUseRtpMux(bool enable) { 1068841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kUseRtpMux, enable); 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetMandatoryIceRestart(bool enable) { 1108841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kIceRestart, enable); 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetAllowRtpDataChannels() { 1148841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kEnableRtpDataChannels, true); 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetOptionalVAD(bool enable) { 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddOptional(MediaConstraintsInterface::kVoiceActivityDetection, enable); 1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetAllowDtlsSctpDataChannels() { 1228841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org SetMandatory(MediaConstraintsInterface::kEnableDtlsSrtp, true); 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Constraints mandatory_; 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Constraints optional_; 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace webrtc 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // TALK_APP_WEBRTC_TEST_FAKECONSTRAINTS_H_ 133