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 #include "content/renderer/media/rtc_media_constraints.h"
8 #include "base/logging.h"
9 #include "base/strings/string_util.h"
10 #include "content/common/media/media_stream_options.h"
11 #include "content/renderer/media/media_stream_video_source.h"
12 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
13 #include "third_party/WebKit/public/platform/WebCString.h"
14 #include "third_party/WebKit/public/platform/WebString.h"
19 void GetNativeMediaConstraints(
20 const blink::WebVector
<blink::WebMediaConstraint
>& constraints
,
21 webrtc::MediaConstraintsInterface::Constraints
* native_constraints
) {
22 DCHECK(native_constraints
);
23 for (size_t i
= 0; i
< constraints
.size(); ++i
) {
24 webrtc::MediaConstraintsInterface::Constraint new_constraint
;
25 new_constraint
.key
= constraints
[i
].m_name
.utf8();
26 new_constraint
.value
= constraints
[i
].m_value
.utf8();
28 // Ignore Chrome specific Tab capture constraints.
29 if (new_constraint
.key
== kMediaStreamSource
||
30 new_constraint
.key
== kMediaStreamSourceId
)
33 // Ignore sourceId constraint since that has nothing to do with webrtc.
34 if (new_constraint
.key
== kMediaStreamSourceInfoId
)
37 // Ignore constraints that are handled by Chrome in MediaStreamVideoSource.
38 if (MediaStreamVideoSource::IsConstraintSupported(new_constraint
.key
))
41 DVLOG(3) << "MediaStreamConstraints:" << new_constraint
.key
42 << " : " << new_constraint
.value
;
43 native_constraints
->push_back(new_constraint
);
49 RTCMediaConstraints::RTCMediaConstraints() {}
51 RTCMediaConstraints::RTCMediaConstraints(
52 const blink::WebMediaConstraints
& constraints
) {
53 if (constraints
.isNull())
54 return; // Will happen in unit tests.
55 blink::WebVector
<blink::WebMediaConstraint
> mandatory
;
56 constraints
.getMandatoryConstraints(mandatory
);
57 GetNativeMediaConstraints(mandatory
, &mandatory_
);
58 blink::WebVector
<blink::WebMediaConstraint
> optional
;
59 constraints
.getOptionalConstraints(optional
);
60 GetNativeMediaConstraints(optional
, &optional_
);
63 RTCMediaConstraints::~RTCMediaConstraints() {}
65 const webrtc::MediaConstraintsInterface::Constraints
&
66 RTCMediaConstraints::GetMandatory() const {
70 const webrtc::MediaConstraintsInterface::Constraints
&
71 RTCMediaConstraints::GetOptional() const {
75 bool RTCMediaConstraints::AddOptional(const std::string
& key
,
76 const std::string
& value
,
77 bool override_if_exists
) {
78 return AddConstraint(&optional_
, key
, value
, override_if_exists
);
81 bool RTCMediaConstraints::AddMandatory(const std::string
& key
,
82 const std::string
& value
,
83 bool override_if_exists
) {
84 return AddConstraint(&mandatory_
, key
, value
, override_if_exists
);
87 bool RTCMediaConstraints::AddConstraint(Constraints
* constraints
,
88 const std::string
& key
,
89 const std::string
& value
,
90 bool override_if_exists
) {
91 for (Constraints::iterator iter
= constraints
->begin();
92 iter
!= constraints
->end();
94 if (iter
->key
== key
) {
95 if (override_if_exists
)
97 return override_if_exists
;
100 // The key wasn't found, add it.
101 constraints
->push_back(Constraint(key
, value
));
105 } // namespace content