OLD | NEW |
| (Empty) |
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 RTCMediaStreamTrackType _type; | |
19 } | |
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 - (BOOL)isEqual:(id)object { | |
51 if (self == object) { | |
52 return YES; | |
53 } | |
54 if (![object isMemberOfClass:[self class]]) { | |
55 return NO; | |
56 } | |
57 return [self isEqualToTrack:(RTCMediaStreamTrack *)object]; | |
58 } | |
59 | |
60 - (NSUInteger)hash { | |
61 return (NSUInteger)_nativeTrack.get(); | |
62 } | |
63 | |
64 #pragma mark - Private | |
65 | |
66 - (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack { | |
67 return _nativeTrack; | |
68 } | |
69 | |
70 - (instancetype)initWithNativeTrack: | |
71 (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack | |
72 type:(RTCMediaStreamTrackType)type { | |
73 NSParameterAssert(nativeTrack); | |
74 if (self = [super init]) { | |
75 _nativeTrack = nativeTrack; | |
76 _type = type; | |
77 } | |
78 return self; | |
79 } | |
80 | |
81 - (instancetype)initWithNativeTrack: | |
82 (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack { | |
83 NSParameterAssert(nativeTrack); | |
84 if (nativeTrack->kind() == | |
85 std::string(webrtc::MediaStreamTrackInterface::kAudioKind)) { | |
86 return [self initWithNativeTrack:nativeTrack | |
87 type:RTCMediaStreamTrackTypeAudio]; | |
88 } | |
89 if (nativeTrack->kind() == | |
90 std::string(webrtc::MediaStreamTrackInterface::kVideoKind)) { | |
91 return [self initWithNativeTrack:nativeTrack | |
92 type:RTCMediaStreamTrackTypeVideo]; | |
93 } | |
94 return nil; | |
95 } | |
96 | |
97 - (BOOL)isEqualToTrack:(RTCMediaStreamTrack *)track { | |
98 if (!track) { | |
99 return NO; | |
100 } | |
101 return _nativeTrack == track.nativeTrack; | |
102 } | |
103 | |
104 + (webrtc::MediaStreamTrackInterface::TrackState)nativeTrackStateForState: | |
105 (RTCMediaStreamTrackState)state { | |
106 switch (state) { | |
107 case RTCMediaStreamTrackStateLive: | |
108 return webrtc::MediaStreamTrackInterface::kLive; | |
109 case RTCMediaStreamTrackStateEnded: | |
110 return webrtc::MediaStreamTrackInterface::kEnded; | |
111 } | |
112 } | |
113 | |
114 + (RTCMediaStreamTrackState)trackStateForNativeState: | |
115 (webrtc::MediaStreamTrackInterface::TrackState)nativeState { | |
116 switch (nativeState) { | |
117 case webrtc::MediaStreamTrackInterface::kLive: | |
118 return RTCMediaStreamTrackStateLive; | |
119 case webrtc::MediaStreamTrackInterface::kEnded: | |
120 return RTCMediaStreamTrackStateEnded; | |
121 } | |
122 } | |
123 | |
124 + (NSString *)stringForState:(RTCMediaStreamTrackState)state { | |
125 switch (state) { | |
126 case RTCMediaStreamTrackStateLive: | |
127 return @"Live"; | |
128 case RTCMediaStreamTrackStateEnded: | |
129 return @"Ended"; | |
130 } | |
131 } | |
132 | |
133 @end | |
OLD | NEW |