• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "content/common/media/media_stream_options.h"
6 
7 #include "base/logging.h"
8 
9 namespace content {
10 
11 const char kMediaStreamSource[] = "chromeMediaSource";
12 const char kMediaStreamSourceId[] = "chromeMediaSourceId";
13 const char kMediaStreamSourceInfoId[] = "sourceId";
14 const char kMediaStreamSourceTab[] = "tab";
15 const char kMediaStreamSourceScreen[] = "screen";
16 const char kMediaStreamSourceDesktop[] = "desktop";
17 const char kMediaStreamSourceSystem[] = "system";
18 const char kMediaStreamRenderToAssociatedSink[] =
19     "chromeRenderToAssociatedSink";
20 // The prefix of this constant is 'goog' to match with other getUserMedia
21 // constraints for audio.
22 const char kMediaStreamAudioDucking[] = "googDucking";
23 
24 namespace {
25 
GetFirstConstraintByName(const StreamOptions::Constraints & constraints,const std::string & name,std::string * value)26 bool GetFirstConstraintByName(const StreamOptions::Constraints& constraints,
27                               const std::string& name,
28                               std::string* value) {
29   for (StreamOptions::Constraints::const_iterator it = constraints.begin();
30       it != constraints.end(); ++it ) {
31     if (it->name == name) {
32       *value = it->value;
33       return true;
34     }
35   }
36   return false;
37 }
38 
GetFirstConstraintByName(const StreamOptions::Constraints & mandatory,const StreamOptions::Constraints & optional,const std::string & name,std::string * value,bool * is_mandatory)39 bool GetFirstConstraintByName(const StreamOptions::Constraints& mandatory,
40                               const StreamOptions::Constraints& optional,
41                               const std::string& name,
42                               std::string* value,
43                               bool* is_mandatory) {
44   if (GetFirstConstraintByName(mandatory, name, value)) {
45     if (is_mandatory)
46       *is_mandatory = true;
47     return true;
48   }
49   if (is_mandatory)
50     *is_mandatory = false;
51   return GetFirstConstraintByName(optional, name, value);
52 }
53 
54 } // namespace
55 
StreamOptions()56 StreamOptions::StreamOptions()
57     : audio_requested(false),
58       video_requested(false) {}
59 
StreamOptions(bool request_audio,bool request_video)60 StreamOptions::StreamOptions(bool request_audio, bool request_video)
61     :  audio_requested(request_audio), video_requested(request_video) {
62 }
63 
~StreamOptions()64 StreamOptions::~StreamOptions() {}
65 
Constraint()66 StreamOptions::Constraint::Constraint() {}
67 
Constraint(const std::string & name,const std::string & value)68 StreamOptions::Constraint::Constraint(const std::string& name,
69                                       const std::string& value)
70     : name(name), value(value) {
71 }
72 
GetFirstAudioConstraintByName(const std::string & name,std::string * value,bool * is_mandatory) const73 bool StreamOptions::GetFirstAudioConstraintByName(const std::string& name,
74                                                   std::string* value,
75                                                   bool* is_mandatory) const {
76   return GetFirstConstraintByName(mandatory_audio, optional_audio, name, value,
77                                   is_mandatory);
78 }
79 
GetFirstVideoConstraintByName(const std::string & name,std::string * value,bool * is_mandatory) const80 bool StreamOptions::GetFirstVideoConstraintByName(const std::string& name,
81                                                   std::string* value,
82                                                   bool* is_mandatory) const {
83   return GetFirstConstraintByName(mandatory_video, optional_video, name, value,
84                                   is_mandatory);
85 }
86 
87 // static
GetConstraintsByName(const StreamOptions::Constraints & constraints,const std::string & name,std::vector<std::string> * values)88 void StreamOptions::GetConstraintsByName(
89     const StreamOptions::Constraints& constraints,
90     const std::string& name,
91     std::vector<std::string>* values) {
92   for (StreamOptions::Constraints::const_iterator it = constraints.begin();
93       it != constraints.end(); ++it ) {
94     if (it->name == name)
95       values->push_back(it->value);
96   }
97 }
98 
99 // static
100 const int StreamDeviceInfo::kNoId = -1;
101 
StreamDeviceInfo()102 StreamDeviceInfo::StreamDeviceInfo()
103     : session_id(kNoId) {}
104 
StreamDeviceInfo(MediaStreamType service_param,const std::string & name_param,const std::string & device_param)105 StreamDeviceInfo::StreamDeviceInfo(MediaStreamType service_param,
106                                    const std::string& name_param,
107                                    const std::string& device_param)
108     : device(service_param, device_param, name_param),
109       session_id(kNoId) {
110 }
111 
StreamDeviceInfo(MediaStreamType service_param,const std::string & name_param,const std::string & device_param,int sample_rate,int channel_layout,int frames_per_buffer)112 StreamDeviceInfo::StreamDeviceInfo(MediaStreamType service_param,
113                                    const std::string& name_param,
114                                    const std::string& device_param,
115                                    int sample_rate,
116                                    int channel_layout,
117                                    int frames_per_buffer)
118     : device(service_param, device_param, name_param, sample_rate,
119              channel_layout, frames_per_buffer),
120       session_id(kNoId) {
121 }
122 
123 // static
IsEqual(const StreamDeviceInfo & first,const StreamDeviceInfo & second)124 bool StreamDeviceInfo::IsEqual(const StreamDeviceInfo& first,
125                                const StreamDeviceInfo& second) {
126   return first.device.IsEqual(second.device) &&
127       first.session_id == second.session_id;
128 }
129 
130 }  // namespace content
131