blob: 3d307be507d30e1f474e40d2d17cb08a49fe6646 [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
tkchin9eeb6242016-04-27 01:54:20 -070011#import "RTCMediaStreamTrack+Private.h"
Jon Hjelle81028792016-01-11 13:16:13 -080012
tkchin9eeb6242016-04-27 01:54:20 -070013#import "NSString+StdString.h"
Jon Hjelle81028792016-01-11 13:16:13 -080014
15@implementation RTCMediaStreamTrack {
16 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> _nativeTrack;
Jon Hjelleca91e382016-01-21 15:36:47 -080017 RTCMediaStreamTrackType _type;
Jon Hjelle81028792016-01-11 13:16:13 -080018}
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
skvlad79b4b872016-04-08 17:28:55 -070049- (BOOL)isEqual:(id)object {
50 if (self == object) {
51 return YES;
52 }
53 if (![object isMemberOfClass:[self class]]) {
54 return NO;
55 }
56 return [self isEqualToTrack:(RTCMediaStreamTrack *)object];
57}
58
59- (NSUInteger)hash {
60 return (NSUInteger)_nativeTrack.get();
61}
62
Jon Hjelle81028792016-01-11 13:16:13 -080063#pragma mark - Private
64
65- (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack {
66 return _nativeTrack;
67}
68
69- (instancetype)initWithNativeTrack:
Jon Hjelleca91e382016-01-21 15:36:47 -080070 (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
71 type:(RTCMediaStreamTrackType)type {
Jon Hjelle81028792016-01-11 13:16:13 -080072 NSParameterAssert(nativeTrack);
73 if (self = [super init]) {
74 _nativeTrack = nativeTrack;
Jon Hjelleca91e382016-01-21 15:36:47 -080075 _type = type;
Jon Hjelle81028792016-01-11 13:16:13 -080076 }
77 return self;
78}
79
skvlad79b4b872016-04-08 17:28:55 -070080- (instancetype)initWithNativeTrack:
81 (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack {
82 NSParameterAssert(nativeTrack);
83 if (nativeTrack->kind() ==
84 std::string(webrtc::MediaStreamTrackInterface::kAudioKind)) {
85 return [self initWithNativeTrack:nativeTrack
86 type:RTCMediaStreamTrackTypeAudio];
87 }
88 if (nativeTrack->kind() ==
89 std::string(webrtc::MediaStreamTrackInterface::kVideoKind)) {
90 return [self initWithNativeTrack:nativeTrack
91 type:RTCMediaStreamTrackTypeVideo];
92 }
93 return nil;
94}
95
96- (BOOL)isEqualToTrack:(RTCMediaStreamTrack *)track {
97 if (!track) {
98 return NO;
99 }
100 return _nativeTrack == track.nativeTrack;
101}
102
Jon Hjelle81028792016-01-11 13:16:13 -0800103+ (webrtc::MediaStreamTrackInterface::TrackState)nativeTrackStateForState:
104 (RTCMediaStreamTrackState)state {
105 switch (state) {
Jon Hjelle81028792016-01-11 13:16:13 -0800106 case RTCMediaStreamTrackStateLive:
107 return webrtc::MediaStreamTrackInterface::kLive;
108 case RTCMediaStreamTrackStateEnded:
109 return webrtc::MediaStreamTrackInterface::kEnded;
Jon Hjelle81028792016-01-11 13:16:13 -0800110 }
111}
112
113+ (RTCMediaStreamTrackState)trackStateForNativeState:
114 (webrtc::MediaStreamTrackInterface::TrackState)nativeState {
115 switch (nativeState) {
Jon Hjelle81028792016-01-11 13:16:13 -0800116 case webrtc::MediaStreamTrackInterface::kLive:
117 return RTCMediaStreamTrackStateLive;
118 case webrtc::MediaStreamTrackInterface::kEnded:
119 return RTCMediaStreamTrackStateEnded;
Jon Hjelle81028792016-01-11 13:16:13 -0800120 }
121}
122
123+ (NSString *)stringForState:(RTCMediaStreamTrackState)state {
124 switch (state) {
Jon Hjelle81028792016-01-11 13:16:13 -0800125 case RTCMediaStreamTrackStateLive:
126 return @"Live";
127 case RTCMediaStreamTrackStateEnded:
128 return @"Ended";
Jon Hjelle81028792016-01-11 13:16:13 -0800129 }
130}
131
132@end