blob: e5751b0746bd5c855cc403d6113d25a7ac6ef4c9 [file] [log] [blame]
Jon Hjelle81028792016-01-11 13:16:13 -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
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