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