Index: webrtc/api/objc/RTCMediaStreamTrack.mm |
diff --git a/webrtc/api/objc/RTCMediaStreamTrack.mm b/webrtc/api/objc/RTCMediaStreamTrack.mm |
index 25979b38d9a32bd968d531bdc66a5553ec77f4d7..7f24c94f38d785423b32f9b186fd7214fa89685b 100644 |
--- a/webrtc/api/objc/RTCMediaStreamTrack.mm |
+++ b/webrtc/api/objc/RTCMediaStreamTrack.mm |
@@ -47,6 +47,20 @@ |
readyState]; |
} |
+- (BOOL)isEqual:(id)object { |
+ if (self == object) { |
+ return YES; |
+ } |
+ if (![object isMemberOfClass:[self class]]) { |
+ return NO; |
+ } |
+ return [self isEqualToTrack:(RTCMediaStreamTrack *)object]; |
+} |
+ |
+- (NSUInteger)hash { |
+ return (NSUInteger)_nativeTrack.get(); |
+} |
+ |
#pragma mark - Private |
- (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack { |
@@ -64,6 +78,29 @@ |
return self; |
} |
+- (instancetype)initWithNativeTrack: |
+ (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack { |
+ NSParameterAssert(nativeTrack); |
+ if (nativeTrack->kind() == |
+ std::string(webrtc::MediaStreamTrackInterface::kAudioKind)) { |
+ return [self initWithNativeTrack:nativeTrack |
+ type:RTCMediaStreamTrackTypeAudio]; |
+ } |
+ if (nativeTrack->kind() == |
+ std::string(webrtc::MediaStreamTrackInterface::kVideoKind)) { |
+ return [self initWithNativeTrack:nativeTrack |
+ type:RTCMediaStreamTrackTypeVideo]; |
+ } |
+ return nil; |
+} |
+ |
+- (BOOL)isEqualToTrack:(RTCMediaStreamTrack *)track { |
+ if (!track) { |
+ return NO; |
+ } |
+ return _nativeTrack == track.nativeTrack; |
+} |
+ |
+ (webrtc::MediaStreamTrackInterface::TrackState)nativeTrackStateForState: |
(RTCMediaStreamTrackState)state { |
switch (state) { |