Reland "Improve thread-safety of MTL Renderer."
This is a reland of a8f13ccad400eb8ff84a379042c0595951ca9658
Original change's description:
> Improve thread-safety of MTL Renderer.
>
> Bug: b/77579859
> Change-Id: I427d0f41593155dc5cbf98a09d7ec826497b803c
> Reviewed-on: https://webrtc-review.googlesource.com/67040
> Commit-Queue: Kári Helgason <kthelgason@webrtc.org>
> Reviewed-by: Anders Carlsson <andersc@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22795}
Bug: b/77579859
Change-Id: I9582cffaae5e241fdb4e41a2a5892738b7246e39
Reviewed-on: https://webrtc-review.googlesource.com/68960
Reviewed-by: Anders Carlsson <andersc@webrtc.org>
Commit-Queue: Kári Helgason <kthelgason@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22806}
diff --git a/sdk/objc/Framework/Classes/Metal/RTCMTLNV12Renderer.mm b/sdk/objc/Framework/Classes/Metal/RTCMTLNV12Renderer.mm
index 079b5fb..6de9c34 100644
--- a/sdk/objc/Framework/Classes/Metal/RTCMTLNV12Renderer.mm
+++ b/sdk/objc/Framework/Classes/Metal/RTCMTLNV12Renderer.mm
@@ -18,6 +18,7 @@
#import "WebRTC/RTCVideoFrameBuffer.h"
#import "RTCMTLRenderer+Private.h"
+#include "rtc_base/checks.h"
#define MTL_STRINGIFY(s) @ #s
@@ -85,6 +86,7 @@
}
- (BOOL)setupTexturesForFrame:(nonnull RTCVideoFrame *)frame {
+ RTC_DCHECK([frame.buffer isKindOfClass:[RTCCVPixelBuffer class]]);
[super setupTexturesForFrame:frame];
CVPixelBufferRef pixelBuffer = ((RTCCVPixelBuffer *)frame.buffer).pixelBuffer;
diff --git a/sdk/objc/Framework/Classes/Metal/RTCMTLVideoView.m b/sdk/objc/Framework/Classes/Metal/RTCMTLVideoView.m
index 0e17777..5334edb 100644
--- a/sdk/objc/Framework/Classes/Metal/RTCMTLVideoView.m
+++ b/sdk/objc/Framework/Classes/Metal/RTCMTLVideoView.m
@@ -105,12 +105,12 @@
- (void)drawInMTKView:(nonnull MTKView *)view {
NSAssert(view == self.metalView, @"Receiving draw callbacks from foreign instance.");
- if (!self.videoFrame) {
+ RTCVideoFrame *videoFrame = self.videoFrame;
+ if (!videoFrame) {
return;
}
- id<RTCMTLRenderer> renderer = nil;
- if ([self.videoFrame.buffer isKindOfClass:[RTCCVPixelBuffer class]]) {
+ if ([videoFrame.buffer isKindOfClass:[RTCCVPixelBuffer class]]) {
if (!self.rendererNV12) {
self.rendererNV12 = [RTCMTLVideoView createNV12Renderer];
if (![self.rendererNV12 addRenderingDestination:self.metalView]) {
@@ -118,7 +118,7 @@
RTCLogError(@"Failed to create NV12 renderer");
}
}
- renderer = self.rendererNV12;
+ [self.rendererNV12 drawFrame:videoFrame];
} else {
if (!self.rendererI420) {
self.rendererI420 = [RTCMTLVideoView createI420Renderer];
@@ -127,10 +127,8 @@
RTCLogError(@"Failed to create I420 renderer");
}
}
- renderer = self.rendererI420;
+ [self.rendererI420 drawFrame:videoFrame];
}
-
- [renderer drawFrame:self.videoFrame];
}
- (void)mtkView:(MTKView *)view drawableSizeWillChange:(CGSize)size {