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 "RTCMediaStreamTrack.h"
     12 
     13 #import "webrtc/api/objc/RTCMediaStreamTrack+Private.h"
     14 #import "webrtc/base/objc/NSString+StdString.h"
     15 
     16 @implementation RTCMediaStreamTrack {
     17   rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> _nativeTrack;
     18 }
     19 
     20 - (NSString *)kind {
     21   return [NSString stringForStdString:_nativeTrack->kind()];
     22 }
     23 
     24 - (NSString *)trackId {
     25   return [NSString stringForStdString:_nativeTrack->id()];
     26 }
     27 
     28 - (BOOL)isEnabled {
     29   return _nativeTrack->enabled();
     30 }
     31 
     32 - (void)setIsEnabled:(BOOL)isEnabled {
     33   _nativeTrack->set_enabled(isEnabled);
     34 }
     35 
     36 - (RTCMediaStreamTrackState)readyState {
     37   return [[self class] trackStateForNativeState:_nativeTrack->state()];
     38 }
     39 
     40 - (NSString *)description {
     41   NSString *readyState = [[self class] stringForState:self.readyState];
     42   return [NSString stringWithFormat:@"RTCMediaStreamTrack:\n%@\n%@\n%@\n%@",
     43                                     self.kind,
     44                                     self.trackId,
     45                                     self.isEnabled ? @"enabled" : @"disabled",
     46                                     readyState];
     47 }
     48 
     49 #pragma mark - Private
     50 
     51 - (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack {
     52   return _nativeTrack;
     53 }
     54 
     55 - (instancetype)initWithNativeTrack:
     56     (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack {
     57   NSParameterAssert(nativeTrack);
     58   if (self = [super init]) {
     59     _nativeTrack = nativeTrack;
     60   }
     61   return self;
     62 }
     63 
     64 + (webrtc::MediaStreamTrackInterface::TrackState)nativeTrackStateForState:
     65     (RTCMediaStreamTrackState)state {
     66   switch (state) {
     67     case RTCMediaStreamTrackStateInitializing:
     68       return webrtc::MediaStreamTrackInterface::kInitializing;
     69     case RTCMediaStreamTrackStateLive:
     70       return webrtc::MediaStreamTrackInterface::kLive;
     71     case RTCMediaStreamTrackStateEnded:
     72       return webrtc::MediaStreamTrackInterface::kEnded;
     73     case RTCMediaStreamTrackStateFailed:
     74       return webrtc::MediaStreamTrackInterface::kFailed;
     75   }
     76 }
     77 
     78 + (RTCMediaStreamTrackState)trackStateForNativeState:
     79     (webrtc::MediaStreamTrackInterface::TrackState)nativeState {
     80   switch (nativeState) {
     81     case webrtc::MediaStreamTrackInterface::kInitializing:
     82       return RTCMediaStreamTrackStateInitializing;
     83     case webrtc::MediaStreamTrackInterface::kLive:
     84       return RTCMediaStreamTrackStateLive;
     85     case webrtc::MediaStreamTrackInterface::kEnded:
     86       return RTCMediaStreamTrackStateEnded;
     87     case webrtc::MediaStreamTrackInterface::kFailed:
     88       return RTCMediaStreamTrackStateFailed;
     89   }
     90 }
     91 
     92 + (NSString *)stringForState:(RTCMediaStreamTrackState)state {
     93   switch (state) {
     94     case RTCMediaStreamTrackStateInitializing:
     95       return @"Initializing";
     96     case RTCMediaStreamTrackStateLive:
     97       return @"Live";
     98     case RTCMediaStreamTrackStateEnded:
     99       return @"Ended";
    100     case RTCMediaStreamTrackStateFailed:
    101       return @"Failed";
    102   }
    103 }
    104 
    105 @end
    106