blob: c686b5643c3ae3f20f83c9f7ae279208e33e95b8 [file] [log] [blame]
hjon6f5ca082016-01-07 09:29:29 -08001/*
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
tkchin9eeb6242016-04-27 01:54:20 -070011#import "RTCMediaConstraints+Private.h"
hjon6f5ca082016-01-07 09:29:29 -080012
tkchin9eeb6242016-04-27 01:54:20 -070013#import "NSString+StdString.h"
hjon6f5ca082016-01-07 09:29:29 -080014
kwibergbfefb032016-05-01 14:53:46 -070015#include <memory>
16
magjed78810b62016-08-17 11:07:37 -070017NSString * const kRTCMediaConstraintsMinAspectRatio =
18 @(webrtc::MediaConstraintsInterface::kMinAspectRatio);
19NSString * const kRTCMediaConstraintsMaxAspectRatio =
20 @(webrtc::MediaConstraintsInterface::kMaxAspectRatio);
21NSString * const kRTCMediaConstraintsMinWidth =
22 @(webrtc::MediaConstraintsInterface::kMinWidth);
23NSString * const kRTCMediaConstraintsMaxWidth =
24 @(webrtc::MediaConstraintsInterface::kMaxWidth);
25NSString * const kRTCMediaConstraintsMinHeight =
26 @(webrtc::MediaConstraintsInterface::kMinHeight);
27NSString * const kRTCMediaConstraintsMaxHeight =
28 @(webrtc::MediaConstraintsInterface::kMaxHeight);
29NSString * const kRTCMediaConstraintsMinFrameRate =
30 @(webrtc::MediaConstraintsInterface::kMinFrameRate);
31NSString * const kRTCMediaConstraintsMaxFrameRate =
32 @(webrtc::MediaConstraintsInterface::kMaxFrameRate);
tkchinab1293a2016-08-30 12:35:05 -070033NSString * const kRTCMediaConstraintsLevelControl =
34 @(webrtc::MediaConstraintsInterface::kLevelControl);
haysc98c43742017-02-03 13:03:39 -080035NSString * const kRTCMediaConstraintsAudioNetworkAdaptorConfig =
36 @(webrtc::MediaConstraintsInterface::kAudioNetworkAdaptorConfig);
tkchinab1293a2016-08-30 12:35:05 -070037
VladimirTechMan7b3eca92017-05-31 18:25:48 -070038NSString * const kRTCMediaConstraintsIceRestart =
39 @(webrtc::MediaConstraintsInterface::kIceRestart);
40NSString * const kRTCMediaConstraintsOfferToReceiveAudio =
41 @(webrtc::MediaConstraintsInterface::kOfferToReceiveAudio);
42NSString * const kRTCMediaConstraintsOfferToReceiveVideo =
43 @(webrtc::MediaConstraintsInterface::kOfferToReceiveVideo);
44NSString * const kRTCMediaConstraintsVoiceActivityDetection =
45 @(webrtc::MediaConstraintsInterface::kVoiceActivityDetection);
46
tkchinab1293a2016-08-30 12:35:05 -070047NSString * const kRTCMediaConstraintsValueTrue =
48 @(webrtc::MediaConstraintsInterface::kValueTrue);
49NSString * const kRTCMediaConstraintsValueFalse =
50 @(webrtc::MediaConstraintsInterface::kValueFalse);
magjed78810b62016-08-17 11:07:37 -070051
hjon6f5ca082016-01-07 09:29:29 -080052namespace webrtc {
53
54MediaConstraints::~MediaConstraints() {}
55
56MediaConstraints::MediaConstraints() {}
57
58MediaConstraints::MediaConstraints(
59 const MediaConstraintsInterface::Constraints& mandatory,
60 const MediaConstraintsInterface::Constraints& optional)
61 : mandatory_(mandatory), optional_(optional) {}
62
63const MediaConstraintsInterface::Constraints&
64MediaConstraints::GetMandatory() const {
65 return mandatory_;
66}
67
68const MediaConstraintsInterface::Constraints&
69MediaConstraints::GetOptional() const {
70 return optional_;
71}
72
73} // namespace webrtc
74
75
76@implementation RTCMediaConstraints {
Jon Hjelle32e0c012016-03-08 16:04:46 -080077 NSDictionary<NSString *, NSString *> *_mandatory;
78 NSDictionary<NSString *, NSString *> *_optional;
hjon6f5ca082016-01-07 09:29:29 -080079}
80
81- (instancetype)initWithMandatoryConstraints:
Jon Hjelle32e0c012016-03-08 16:04:46 -080082 (NSDictionary<NSString *, NSString *> *)mandatory
hjon6f5ca082016-01-07 09:29:29 -080083 optionalConstraints:
Jon Hjelle32e0c012016-03-08 16:04:46 -080084 (NSDictionary<NSString *, NSString *> *)optional {
hjon6f5ca082016-01-07 09:29:29 -080085 if (self = [super init]) {
86 _mandatory = [[NSDictionary alloc] initWithDictionary:mandatory
87 copyItems:YES];
88 _optional = [[NSDictionary alloc] initWithDictionary:optional
89 copyItems:YES];
90 }
91 return self;
92}
93
94- (NSString *)description {
95 return [NSString stringWithFormat:@"RTCMediaConstraints:\n%@\n%@",
96 _mandatory,
97 _optional];
98}
99
100#pragma mark - Private
101
kwibergbfefb032016-05-01 14:53:46 -0700102- (std::unique_ptr<webrtc::MediaConstraints>)nativeConstraints {
hjon6f5ca082016-01-07 09:29:29 -0800103 webrtc::MediaConstraintsInterface::Constraints mandatory =
104 [[self class] nativeConstraintsForConstraints:_mandatory];
105 webrtc::MediaConstraintsInterface::Constraints optional =
106 [[self class] nativeConstraintsForConstraints:_optional];
107
108 webrtc::MediaConstraints *nativeConstraints =
109 new webrtc::MediaConstraints(mandatory, optional);
kwibergbfefb032016-05-01 14:53:46 -0700110 return std::unique_ptr<webrtc::MediaConstraints>(nativeConstraints);
hjon6f5ca082016-01-07 09:29:29 -0800111}
112
113+ (webrtc::MediaConstraintsInterface::Constraints)
114 nativeConstraintsForConstraints:
Jon Hjelle32e0c012016-03-08 16:04:46 -0800115 (NSDictionary<NSString *, NSString *> *)constraints {
hjon6f5ca082016-01-07 09:29:29 -0800116 webrtc::MediaConstraintsInterface::Constraints nativeConstraints;
117 for (NSString *key in constraints) {
118 NSAssert([key isKindOfClass:[NSString class]],
119 @"%@ is not an NSString.", key);
hjon6b039952016-02-25 12:32:58 -0800120 NSString *value = [constraints objectForKey:key];
121 NSAssert([value isKindOfClass:[NSString class]],
122 @"%@ is not an NSString.", value);
haysc98c43742017-02-03 13:03:39 -0800123 if ([kRTCMediaConstraintsAudioNetworkAdaptorConfig isEqualToString:key]) {
124 // This value is base64 encoded.
125 NSData *charData = [[NSData alloc] initWithBase64EncodedString:value options:0];
126 std::string configValue =
127 std::string(reinterpret_cast<const char *>(charData.bytes), charData.length);
128 nativeConstraints.push_back(webrtc::MediaConstraintsInterface::Constraint(
129 key.stdString, configValue));
130 } else {
131 nativeConstraints.push_back(webrtc::MediaConstraintsInterface::Constraint(
132 key.stdString, value.stdString));
133 }
hjon6f5ca082016-01-07 09:29:29 -0800134 }
135 return nativeConstraints;
136}
137
138@end