1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_COMMON_MEDIA_MEDIA_STREAM_OPTIONS_H_ 6#define CONTENT_COMMON_MEDIA_MEDIA_STREAM_OPTIONS_H_ 7 8#include <string> 9#include <vector> 10 11#include "content/common/content_export.h" 12#include "content/public/common/media_stream_request.h" 13 14namespace content { 15 16// MediaStreamConstraint keys for constraints that are passed to getUserMedia. 17CONTENT_EXPORT extern const char kMediaStreamSource[]; 18CONTENT_EXPORT extern const char kMediaStreamSourceId[]; 19CONTENT_EXPORT extern const char kMediaStreamSourceInfoId[]; 20CONTENT_EXPORT extern const char kMediaStreamSourceTab[]; 21CONTENT_EXPORT extern const char kMediaStreamSourceScreen[]; 22CONTENT_EXPORT extern const char kMediaStreamSourceDesktop[]; 23CONTENT_EXPORT extern const char kMediaStreamSourceSystem[]; 24 25// Experimental constraint to do device matching. When this optional constraint 26// is set, WebRTC audio renderer will render audio from media streams to an 27// output device that belongs to the same hardware as the requested source 28// device belongs to. 29CONTENT_EXPORT extern const char kMediaStreamRenderToAssociatedSink[]; 30 31// Controls whether ducking of audio is enabled on platforms that support it. 32CONTENT_EXPORT extern const char kMediaStreamAudioDucking[]; 33 34// StreamOptions is a Chromium representation of constraints 35// used in WebUserMediaRequest. 36// It describes properties requested by JS in a request for a new 37// media stream. 38class CONTENT_EXPORT StreamOptions { 39 public: 40 StreamOptions(); 41 StreamOptions(bool request_audio, bool request_video); 42 ~StreamOptions(); 43 44 struct CONTENT_EXPORT Constraint { 45 Constraint(); 46 Constraint(const std::string& name, 47 const std::string& value); 48 49 std::string name; 50 std::string value; 51 }; 52 typedef std::vector<Constraint> Constraints; 53 54 bool audio_requested; 55 Constraints mandatory_audio; 56 Constraints optional_audio; 57 58 bool video_requested; 59 Constraints mandatory_video; 60 Constraints optional_video; 61 62 // Fetches |value| from the first audio constraint with a name that matches 63 // |name| from |mandatory_audio| and |optional_audio|. First mandatory 64 // constraints are searched, then optional. 65 // |is_mandatory| may be NULL but if it is provided, it is set 66 // to true if the found constraint is mandatory. 67 // Returns false if no constraint is found. 68 bool GetFirstAudioConstraintByName(const std::string& name, 69 std::string* value, 70 bool* is_mandatory) const; 71 72 // Fetches |value| from the first video constraint with a name that matches 73 // |name| from |mandatory_video| and |optional_video|. First mandatory 74 // constraints are searched, then optional. 75 // |is_mandatory| may be NULL but if it is provided, it is set 76 // to true if the found constraint is mandatory. 77 // Returns false if no constraint is found. 78 bool GetFirstVideoConstraintByName(const std::string& name, 79 std::string* value, 80 bool* is_mandatory) const; 81 82 // Fetches |values| from all constraint with a name that matches |name| 83 // from |constraints|. 84 static void GetConstraintsByName( 85 const StreamOptions::Constraints& constraints, 86 const std::string& name, 87 std::vector<std::string>* values); 88}; 89 90// StreamDeviceInfo describes information about a device. 91struct CONTENT_EXPORT StreamDeviceInfo { 92 static const int kNoId; 93 94 StreamDeviceInfo(); 95 StreamDeviceInfo(MediaStreamType service_param, 96 const std::string& name_param, 97 const std::string& device_param); 98 StreamDeviceInfo(MediaStreamType service_param, 99 const std::string& name_param, 100 const std::string& device_param, 101 int sample_rate, 102 int channel_layout, 103 int frames_per_buffer); 104 static bool IsEqual(const StreamDeviceInfo& first, 105 const StreamDeviceInfo& second); 106 107 MediaStreamDevice device; 108 109 // Id for this capture session. Unique for all sessions of the same type. 110 int session_id; 111}; 112 113typedef std::vector<StreamDeviceInfo> StreamDeviceInfoArray; 114 115} // namespace content 116 117#endif // CONTENT_COMMON_MEDIA_MEDIA_STREAM_OPTIONS_H_ 118