10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2013, 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// This file contains the interface for MediaConstraints, corresponding to 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// the definition at 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// http://www.w3.org/TR/mediacapture-streams/#mediastreamconstraints and also 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// used in WebRTC: http://dev.w3.org/2011/webrtc/editor/webrtc.html#constraints. 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef TALK_APP_WEBRTC_MEDIACONSTRAINTSINTERFACE_H_ 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TALK_APP_WEBRTC_MEDIACONSTRAINTSINTERFACE_H_ 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <string> 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector> 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace webrtc { 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// MediaConstraintsInterface 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Interface used for passing arguments about media constraints 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// to the MediaStream and PeerConnection implementation. 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass MediaConstraintsInterface { 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org struct Constraint { 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Constraint() {} 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Constraint(const std::string& key, const std::string value) 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : key(key), value(value) { 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string key; 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string value; 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org class Constraints : public std::vector<Constraint> { 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool FindFirst(const std::string& key, std::string* value) const; 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual const Constraints& GetMandatory() const = 0; 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual const Constraints& GetOptional() const = 0; 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Constraint keys used by a local video source. 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Specified by draft-alvestrand-constraints-resolution-00b 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kMinAspectRatio[]; // minAspectRatio 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kMaxAspectRatio[]; // maxAspectRatio 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kMaxWidth[]; // maxWidth 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kMinWidth[]; // minWidth 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kMaxHeight[]; // maxHeight 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kMinHeight[]; // minHeight 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kMaxFrameRate[]; // maxFrameRate 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kMinFrameRate[]; // minFrameRate 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Constraint keys used by a local audio source. 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // These keys are google specific. 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kEchoCancellation[]; // googEchoCancellation 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kExperimentalEchoCancellation[]; // googEchoCancellation2 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kAutoGainControl[]; // googAutoGainControl 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kExperimentalAutoGainControl[]; // googAutoGainControl2 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kNoiseSuppression[]; // googNoiseSuppression 8170022fa5eb218ec690774cc4a74558699a79600asergeyu@chromium.org static const char kExperimentalNoiseSuppression[]; // googNoiseSuppression2 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kHighpassFilter[]; // googHighpassFilter 83ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org static const char kTypingNoiseDetection[]; // googTypingNoiseDetection 845c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org static const char kAudioMirroring[]; // googAudioMirroring 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Google-specific constraint keys for a local video source 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kNoiseReduction[]; // googNoiseReduction 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kLeakyBucket[]; // googLeakyBucket 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kTemporalLayeredScreencast[]; 909da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org // googTemporalLayeredScreencast 91c97efd086dfa83409483daf9fb4daba673ebf896henrike@webrtc.org 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Constraint keys for CreateOffer / CreateAnswer 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Specified by the W3C PeerConnection spec 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kOfferToReceiveVideo[]; // OfferToReceiveVideo 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kOfferToReceiveAudio[]; // OfferToReceiveAudio 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kVoiceActivityDetection[]; // VoiceActivityDetection 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kIceRestart[]; // IceRestart 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // These keys are google specific. 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kUseRtpMux[]; // googUseRtpMUX 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Constraints values. 1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kValueTrue[]; // true 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kValueFalse[]; // false 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1059da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org // PeerConnection constraint keys. 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Temporary pseudo-constraints used to enable DTLS-SRTP 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kEnableDtlsSrtp[]; // Enable DTLS-SRTP 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Temporary pseudo-constraints used to enable DataChannels 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kEnableRtpDataChannels[]; // Enable RTP DataChannels 1109da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org // Google-specific constraint keys. 11180303b162fe139828d0661df23e03f09126508acwu@webrtc.org // Temporary pseudo-constraint for enabling DSCP through JS. 1129da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kEnableDscp[]; // googDscp 1138485ec698cd13d65354e2f81132b5763a3d216a4henrika@webrtc.org // Constraint to enable IPv6 through JS. 1149da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kEnableIPv6[]; // googIPv6 115bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org // Temporary constraint to enable suspend below min bitrate feature. 116bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org static const char kEnableVideoSuspendBelowMinBitrate[]; 1179da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org // googSuspendBelowMinBitrate 118b752f54aad7adfda3ccf223fb86f23c8b3ae7283buildbot@webrtc.org static const char kNumUnsignalledRecvStreams[]; 119b752f54aad7adfda3ccf223fb86f23c8b3ae7283buildbot@webrtc.org // googNumUnsignalledRecvStreams 1205462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org // Constraint to enable combined audio+video bandwidth estimation. 1215462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org static const char kCombinedAudioVideoBwe[]; // googCombinedAudioVideoBwe 1229da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kScreencastMinBitrate[]; // googScreencastMinBitrate 1239da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kCpuOveruseDetection[]; // googCpuOveruseDetection 1249da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kCpuUnderuseThreshold[]; // googCpuUnderuseThreshold 1259da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kCpuOveruseThreshold[]; // googCpuOveruseThreshold 1262e507b2e465fe7f63c74e04d136ec2e23810c61fbuildbot@webrtc.org // Low cpu adaptation threshold for relative standard deviation of encode 1272e507b2e465fe7f63c74e04d136ec2e23810c61fbuildbot@webrtc.org // time. 1282e507b2e465fe7f63c74e04d136ec2e23810c61fbuildbot@webrtc.org static const char kCpuUnderuseEncodeRsdThreshold[]; 1292e507b2e465fe7f63c74e04d136ec2e23810c61fbuildbot@webrtc.org // High cpu adaptation threshold for relative standard deviation of encode 1302e507b2e465fe7f63c74e04d136ec2e23810c61fbuildbot@webrtc.org // time. 1312e507b2e465fe7f63c74e04d136ec2e23810c61fbuildbot@webrtc.org static const char kCpuOveruseEncodeRsdThreshold[]; 1329da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kCpuOveruseEncodeUsage[]; // googCpuOveruseEncodeUsage 1339da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kHighStartBitrate[]; // googHighStartBitrate 1349da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kHighBitrate[]; // googHighBitrate 1359da22f7f773063d4a0a7da5030dcf60a2ed2f454wu@webrtc.org static const char kVeryHighBitrate[]; // googVeryHighBitrate 136d25cd982c474849f04f8a3670f3abe19ada78b11buildbot@webrtc.org static const char kPayloadPadding[]; // googPayloadPadding 13702632fd0ce3e3625079f6472bd55370ed58509debuildbot@webrtc.org 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The prefix of internal-only constraints whose JS set values should be 1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // stripped by Chrome before passed down to Libjingle. 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const char kInternalConstraintPrefix[]; 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Dtor protected as objects shouldn't be deleted via this interface 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual ~MediaConstraintsInterface() {} 1450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgbool FindConstraint(const MediaConstraintsInterface* constraints, 1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& key, bool* value, 1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org size_t* mandatory_constraints); 1500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace webrtc 1520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // TALK_APP_WEBRTC_MEDIACONSTRAINTSINTERFACE_H_ 154