Index: webrtc/api/objc/RTCVideoTrack.mm |
diff --git a/webrtc/api/objc/RTCVideoTrack.mm b/webrtc/api/objc/RTCVideoTrack.mm |
index 7422eff926ec44808dff11dc10ff1fb947ee2925..165cf1bc6a718e209ae3a39c1f2e5839aa9f41f1 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,7 +83,6 @@ |
} |
- (void)removeRenderer:(id<RTCVideoRenderer>)renderer { |
- RTCVideoRendererAdapter *adapter; |
__block NSUInteger indexToRemove = NSNotFound; |
[_adapters enumerateObjectsUsingBlock:^(RTCVideoRendererAdapter *adapter, |
NSUInteger idx, |
@@ -87,7 +95,8 @@ |
if (indexToRemove == NSNotFound) { |
return; |
} |
- self.nativeVideoTrack->RemoveRenderer(adapter.nativeVideoRenderer); |
+ RTCVideoRendererAdapter *adapterToRemove = _adapters[indexToRemove]; |
+ self.nativeVideoTrack->RemoveRenderer(adapterToRemove.nativeVideoRenderer); |
[_adapters removeObjectAtIndex:indexToRemove]; |
} |