Index: webrtc/api/objc/RTCVideoTrack.mm |
diff --git a/webrtc/api/objc/RTCVideoTrack.mm b/webrtc/api/objc/RTCVideoTrack.mm |
index 7422eff926ec44808dff11dc10ff1fb947ee2925..955b54dbec35efc1bc2b63cd9af5e14f0530abb8 100644 |
--- a/webrtc/api/objc/RTCVideoTrack.mm |
+++ b/webrtc/api/objc/RTCVideoTrack.mm |
@@ -33,21 +33,19 @@ |
rtc::scoped_refptr<webrtc::VideoTrackInterface> track = |
factory.nativeFactory->CreateVideoTrack(nativeId, |
source.nativeVideoSource); |
- return [self initWithNativeTrack:track type:RTCMediaStreamTrackTypeVideo]; |
+ if ([self initWithNativeTrack:track type:RTCMediaStreamTrackTypeVideo]) { |
+ _source = source; |
+ } |
+ return self; |
} |
-- (instancetype)initWithNativeMediaTrack: |
+- (instancetype)initWithNativeTrack: |
(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeMediaTrack |
- type:(RTCMediaStreamTrackType)type { |
+ type:(RTCMediaStreamTrackType)type { |
NSParameterAssert(nativeMediaTrack); |
NSParameterAssert(type == RTCMediaStreamTrackTypeVideo); |
if (self = [super initWithNativeTrack:nativeMediaTrack type:type]) { |
_adapters = [NSMutableArray array]; |
- rtc::scoped_refptr<webrtc::VideoSourceInterface> source = |
- self.nativeVideoTrack->GetSource(); |
- if (source) { |
- _source = [[RTCVideoSource alloc] initWithNativeVideoSource:source.get()]; |
- } |
} |
return self; |
} |
@@ -58,6 +56,17 @@ |
} |
} |
+- (RTCVideoSource *)source { |
+ if (!_source) { |
+ rtc::scoped_refptr<webrtc::VideoSourceInterface> source = |
+ self.nativeVideoTrack->GetSource(); |
+ if (source) { |
+ _source = [[RTCVideoSource alloc] initWithNativeVideoSource:source.get()]; |
+ } |
+ } |
+ return _source; |
+} |
+ |
- (void)addRenderer:(id<RTCVideoRenderer>)renderer { |
// Make sure we don't have this renderer yet. |
for (RTCVideoRendererAdapter *adapter in _adapters) { |
@@ -74,12 +83,13 @@ |
} |
- (void)removeRenderer:(id<RTCVideoRenderer>)renderer { |
- RTCVideoRendererAdapter *adapter; |
+ __block RTCVideoRendererAdapter *adapterToRemove; |
__block NSUInteger indexToRemove = NSNotFound; |
[_adapters enumerateObjectsUsingBlock:^(RTCVideoRendererAdapter *adapter, |
NSUInteger idx, |
BOOL *stop) { |
if (adapter.videoRenderer == renderer) { |
+ adapterToRemove = adapter; |
indexToRemove = idx; |
*stop = YES; |
} |
@@ -87,7 +97,7 @@ |
if (indexToRemove == NSNotFound) { |
return; |
} |
- self.nativeVideoTrack->RemoveRenderer(adapter.nativeVideoRenderer); |
+ self.nativeVideoTrack->RemoveRenderer(adapterToRemove.nativeVideoRenderer); |
tkchin_webrtc
2016/02/20 00:17:32
grab the adapter based on the index since we're al
hjon_webrtc
2016/02/22 23:03:06
Done.
|
[_adapters removeObjectAtIndex:indexToRemove]; |
} |