summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/libjingle/source/talk/app/webrtc/objc/RTCMediaStreamTrack.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/libjingle/source/talk/app/webrtc/objc/RTCMediaStreamTrack.mm')
-rw-r--r--chromium/third_party/libjingle/source/talk/app/webrtc/objc/RTCMediaStreamTrack.mm40
1 files changed, 32 insertions, 8 deletions
diff --git a/chromium/third_party/libjingle/source/talk/app/webrtc/objc/RTCMediaStreamTrack.mm b/chromium/third_party/libjingle/source/talk/app/webrtc/objc/RTCMediaStreamTrack.mm
index 6c8f7154292..59313120029 100644
--- a/chromium/third_party/libjingle/source/talk/app/webrtc/objc/RTCMediaStreamTrack.mm
+++ b/chromium/third_party/libjingle/source/talk/app/webrtc/objc/RTCMediaStreamTrack.mm
@@ -29,23 +29,40 @@
#error "This file requires ARC support."
#endif
-#import "RTCMediaStreamTrack+internal.h"
+#import "RTCMediaStreamTrack+Internal.h"
#import "RTCEnumConverter.h"
+namespace webrtc {
+
+class RTCMediaStreamTrackObserver : public ObserverInterface {
+ public:
+ RTCMediaStreamTrackObserver(RTCMediaStreamTrack* track) { _track = track; }
+
+ virtual void OnChanged() OVERRIDE {
+ [_track.delegate mediaStreamTrackDidChange:_track];
+ }
+
+ private:
+ __weak RTCMediaStreamTrack* _track;
+};
+}
+
@implementation RTCMediaStreamTrack {
talk_base::scoped_refptr<webrtc::MediaStreamTrackInterface> _mediaTrack;
+ talk_base::scoped_ptr<webrtc::RTCMediaStreamTrackObserver> _observer;
}
@synthesize label;
- (BOOL)isEqual:(id)other {
// Equality is purely based on the label just like the C++ implementation.
- if (self == other) return YES;
+ if (self == other)
+ return YES;
if (![other isKindOfClass:[self class]] ||
![self isKindOfClass:[other class]]) {
return NO;
}
- RTCMediaStreamTrack *otherMediaStream = (RTCMediaStreamTrack *)other;
+ RTCMediaStreamTrack* otherMediaStream = (RTCMediaStreamTrack*)other;
return [self.label isEqual:otherMediaStream.label];
}
@@ -53,11 +70,11 @@
return [self.label hash];
}
-- (NSString *)kind {
+- (NSString*)kind {
return @(self.mediaTrack->kind().c_str());
}
-- (NSString *)label {
+- (NSString*)label {
return @(self.mediaTrack->id().c_str());
}
@@ -82,20 +99,27 @@
@implementation RTCMediaStreamTrack (Internal)
-- (id)initWithMediaTrack:(
- talk_base::scoped_refptr<webrtc::MediaStreamTrackInterface>)mediaTrack {
+- (id)initWithMediaTrack:
+ (talk_base::scoped_refptr<webrtc::MediaStreamTrackInterface>)
+ mediaTrack {
if (!mediaTrack) {
NSAssert(NO, @"nil arguments not allowed");
self = nil;
return nil;
}
- if ((self = [super init])) {
+ if (self = [super init]) {
_mediaTrack = mediaTrack;
label = @(mediaTrack->id().c_str());
+ _observer.reset(new webrtc::RTCMediaStreamTrackObserver(self));
+ _mediaTrack->RegisterObserver(_observer.get());
}
return self;
}
+- (void)dealloc {
+ _mediaTrack->UnregisterObserver(_observer.get());
+}
+
- (talk_base::scoped_refptr<webrtc::MediaStreamTrackInterface>)mediaTrack {
return _mediaTrack;
}