blob: 208550f6c866db47f6d73c8c56cfb2fb3eff6e2e [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
skvladf3569c82016-04-29 15:30:16 -070015NSString * const kRTCMediaStreamTrackKindAudio =
16 @(webrtc::MediaStreamTrackInterface::kAudioKind);
17NSString * const kRTCMediaStreamTrackKindVideo =
18 @(webrtc::MediaStreamTrackInterface::kVideoKind);
19
Jon Hjelle81028792016-01-11 13:16:13 -080020@implementation RTCMediaStreamTrack {
21 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> _nativeTrack;
Jon Hjelleca91e382016-01-21 15:36:47 -080022 RTCMediaStreamTrackType _type;
Jon Hjelle81028792016-01-11 13:16:13 -080023}
24
25- (NSString *)kind {
26 return [NSString stringForStdString:_nativeTrack->kind()];
27}
28
29- (NSString *)trackId {
30 return [NSString stringForStdString:_nativeTrack->id()];
31}
32
33- (BOOL)isEnabled {
34 return _nativeTrack->enabled();
35}
36
37- (void)setIsEnabled:(BOOL)isEnabled {
38 _nativeTrack->set_enabled(isEnabled);
39}
40
41- (RTCMediaStreamTrackState)readyState {
42 return [[self class] trackStateForNativeState:_nativeTrack->state()];
43}
44
45- (NSString *)description {
46 NSString *readyState = [[self class] stringForState:self.readyState];
47 return [NSString stringWithFormat:@"RTCMediaStreamTrack:\n%@\n%@\n%@\n%@",
48 self.kind,
49 self.trackId,
50 self.isEnabled ? @"enabled" : @"disabled",
51 readyState];
52}
53
skvlad79b4b872016-04-08 17:28:55 -070054- (BOOL)isEqual:(id)object {
55 if (self == object) {
56 return YES;
57 }
58 if (![object isMemberOfClass:[self class]]) {
59 return NO;
60 }
61 return [self isEqualToTrack:(RTCMediaStreamTrack *)object];
62}
63
64- (NSUInteger)hash {
65 return (NSUInteger)_nativeTrack.get();
66}
67
Jon Hjelle81028792016-01-11 13:16:13 -080068#pragma mark - Private
69
70- (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack {
71 return _nativeTrack;
72}
73
74- (instancetype)initWithNativeTrack:
Jon Hjelleca91e382016-01-21 15:36:47 -080075 (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack
76 type:(RTCMediaStreamTrackType)type {
Jon Hjelle81028792016-01-11 13:16:13 -080077 NSParameterAssert(nativeTrack);
78 if (self = [super init]) {
79 _nativeTrack = nativeTrack;
Jon Hjelleca91e382016-01-21 15:36:47 -080080 _type = type;
Jon Hjelle81028792016-01-11 13:16:13 -080081 }
82 return self;
83}
84
skvlad79b4b872016-04-08 17:28:55 -070085- (instancetype)initWithNativeTrack:
86 (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack {
87 NSParameterAssert(nativeTrack);
88 if (nativeTrack->kind() ==
89 std::string(webrtc::MediaStreamTrackInterface::kAudioKind)) {
90 return [self initWithNativeTrack:nativeTrack
91 type:RTCMediaStreamTrackTypeAudio];
92 }
93 if (nativeTrack->kind() ==
94 std::string(webrtc::MediaStreamTrackInterface::kVideoKind)) {
95 return [self initWithNativeTrack:nativeTrack
96 type:RTCMediaStreamTrackTypeVideo];
97 }
98 return nil;
99}
100
101- (BOOL)isEqualToTrack:(RTCMediaStreamTrack *)track {
102 if (!track) {
103 return NO;
104 }
105 return _nativeTrack == track.nativeTrack;
106}
107
Jon Hjelle81028792016-01-11 13:16:13 -0800108+ (webrtc::MediaStreamTrackInterface::TrackState)nativeTrackStateForState:
109 (RTCMediaStreamTrackState)state {
110 switch (state) {
Jon Hjelle81028792016-01-11 13:16:13 -0800111 case RTCMediaStreamTrackStateLive:
112 return webrtc::MediaStreamTrackInterface::kLive;
113 case RTCMediaStreamTrackStateEnded:
114 return webrtc::MediaStreamTrackInterface::kEnded;
Jon Hjelle81028792016-01-11 13:16:13 -0800115 }
116}
117
118+ (RTCMediaStreamTrackState)trackStateForNativeState:
119 (webrtc::MediaStreamTrackInterface::TrackState)nativeState {
120 switch (nativeState) {
Jon Hjelle81028792016-01-11 13:16:13 -0800121 case webrtc::MediaStreamTrackInterface::kLive:
122 return RTCMediaStreamTrackStateLive;
123 case webrtc::MediaStreamTrackInterface::kEnded:
124 return RTCMediaStreamTrackStateEnded;
Jon Hjelle81028792016-01-11 13:16:13 -0800125 }
126}
127
128+ (NSString *)stringForState:(RTCMediaStreamTrackState)state {
129 switch (state) {
Jon Hjelle81028792016-01-11 13:16:13 -0800130 case RTCMediaStreamTrackStateLive:
131 return @"Live";
132 case RTCMediaStreamTrackStateEnded:
133 return @"Ended";
Jon Hjelle81028792016-01-11 13:16:13 -0800134 }
135}
136
137@end