Home | History | Annotate | Download | only in objc
      1 /*
      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 
     11 #import "RTCMediaConstraints.h"
     12 
     13 #import "webrtc/api/objc/RTCMediaConstraints+Private.h"
     14 #import "webrtc/base/objc/NSString+StdString.h"
     15 
     16 namespace webrtc {
     17 
     18 MediaConstraints::~MediaConstraints() {}
     19 
     20 MediaConstraints::MediaConstraints() {}
     21 
     22 MediaConstraints::MediaConstraints(
     23     const MediaConstraintsInterface::Constraints& mandatory,
     24     const MediaConstraintsInterface::Constraints& optional)
     25     : mandatory_(mandatory), optional_(optional) {}
     26 
     27 const MediaConstraintsInterface::Constraints&
     28 MediaConstraints::GetMandatory() const {
     29   return mandatory_;
     30 }
     31 
     32 const MediaConstraintsInterface::Constraints&
     33 MediaConstraints::GetOptional() const {
     34   return optional_;
     35 }
     36 
     37 }  // namespace webrtc
     38 
     39 
     40 @implementation RTCMediaConstraints {
     41   NSDictionary<NSString *, NSString *> *_mandatory;
     42   NSDictionary<NSString *, NSString *> *_optional;
     43 }
     44 
     45 - (instancetype)initWithMandatoryConstraints:
     46     (NSDictionary<NSString *, NSString *> *)mandatory
     47                          optionalConstraints:
     48     (NSDictionary<NSString *, NSString *> *)optional {
     49   if (self = [super init]) {
     50     _mandatory = [[NSDictionary alloc] initWithDictionary:mandatory
     51                                                 copyItems:YES];
     52     _optional = [[NSDictionary alloc] initWithDictionary:optional
     53                                                copyItems:YES];
     54   }
     55   return self;
     56 }
     57 
     58 - (NSString *)description {
     59   return [NSString stringWithFormat:@"RTCMediaConstraints:\n%@\n%@",
     60                                     _mandatory,
     61                                     _optional];
     62 }
     63 
     64 #pragma mark - Private
     65 
     66 - (rtc::scoped_ptr<webrtc::MediaConstraints>)nativeConstraints {
     67   webrtc::MediaConstraintsInterface::Constraints mandatory =
     68       [[self class] nativeConstraintsForConstraints:_mandatory];
     69   webrtc::MediaConstraintsInterface::Constraints optional =
     70       [[self class] nativeConstraintsForConstraints:_optional];
     71 
     72   webrtc::MediaConstraints *nativeConstraints =
     73       new webrtc::MediaConstraints(mandatory, optional);
     74   return rtc::scoped_ptr<webrtc::MediaConstraints>(nativeConstraints);
     75 }
     76 
     77 + (webrtc::MediaConstraintsInterface::Constraints)
     78     nativeConstraintsForConstraints:
     79         (NSDictionary<NSString *, NSString *> *)constraints {
     80   webrtc::MediaConstraintsInterface::Constraints nativeConstraints;
     81   for (NSString *key in constraints) {
     82     NSAssert([key isKindOfClass:[NSString class]],
     83              @"%@ is not an NSString.", key);
     84     NSAssert([constraints[key] isKindOfClass:[NSString class]],
     85              @"%@ is not an NSString.", constraints[key]);
     86     nativeConstraints.push_back(webrtc::MediaConstraintsInterface::Constraint(
     87         key.stdString, constraints[key].stdString));
     88   }
     89   return nativeConstraints;
     90 }
     91 
     92 @end
     93