| Index: webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLVideoView.m
|
| diff --git a/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLVideoView.m b/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLVideoView.m
|
| index 427ae6c4a1138d4ca0207d8580eef61f5a8499c3..63ef23ad49433c8e136c646e33dda849d54e8ca5 100644
|
| --- a/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLVideoView.m
|
| +++ b/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLVideoView.m
|
| @@ -18,18 +18,15 @@
|
|
|
| #import "RTCMTLNV12Renderer.h"
|
|
|
| -// To avoid unreconized symbol linker errors, we're taking advantage of the objc runtime.
|
| -// Linking errors occur when compiling for architectures that don't support Metal.
|
| -#define MTKViewClass NSClassFromString(@"MTKView")
|
| -#define RTCMTLNV12RendererClass NSClassFromString(@"RTCMTLNV12Renderer")
|
| -
|
| @interface RTCMTLVideoView () <MTKViewDelegate>
|
| -@property(nonatomic, strong) RTCMTLNV12Renderer *renderer;
|
| +@property(nonatomic, strong) id<RTCMTLRenderer> renderer;
|
| @property(nonatomic, strong) MTKView *metalView;
|
| @property(atomic, strong) RTCVideoFrame *videoFrame;
|
| @end
|
|
|
| -@implementation RTCMTLVideoView
|
| +@implementation RTCMTLVideoView {
|
| + id<RTCMTLRenderer> _renderer;
|
| +}
|
|
|
| @synthesize renderer = _renderer;
|
| @synthesize metalView = _metalView;
|
| @@ -61,41 +58,11 @@
|
| #endif
|
| }
|
|
|
| -+ (MTKView *)createMetalView:(CGRect)frame {
|
| - MTKView *view = [[MTKViewClass alloc] initWithFrame:frame];
|
| - return view;
|
| -}
|
| -
|
| -+ (RTCMTLNV12Renderer *)createMetalRenderer {
|
| - RTCMTLNV12Renderer *renderer = [[RTCMTLNV12RendererClass alloc] init];
|
| - return renderer;
|
| -}
|
| -
|
| - (void)configure {
|
| - if (![RTCMTLVideoView isMetalAvailable]) {
|
| - RTCLog("Metal unavailable");
|
| - return;
|
| - }
|
| -
|
| - _metalView = [RTCMTLVideoView createMetalView:self.bounds];
|
| - _renderer = [RTCMTLVideoView createMetalRenderer];
|
| -
|
| - if ([self configureMetalRenderer]) {
|
| - [self configureMetalView];
|
| - } else {
|
| - _renderer = nil;
|
| - RTCLogError("Metal configuration falied.");
|
| - }
|
| -}
|
| -
|
| -- (BOOL)configureMetalRenderer {
|
| - return [_renderer addRenderingDestination:_metalView];
|
| -}
|
| -
|
| -- (void)configureMetalView {
|
| - if (_metalView) {
|
| + if ([RTCMTLVideoView isMetalAvailable]) {
|
| + _metalView = [[MTKView alloc] initWithFrame:self.bounds];
|
| + [self addSubview:_metalView];
|
| _metalView.delegate = self;
|
| - [self addSubview:_metalView];
|
| _metalView.contentMode = UIViewContentModeScaleAspectFit;
|
| _metalView.translatesAutoresizingMaskIntoConstraints = NO;
|
| UILayoutGuide *margins = self.layoutMarginsGuide;
|
| @@ -103,14 +70,20 @@
|
| [_metalView.bottomAnchor constraintEqualToAnchor:margins.bottomAnchor].active = YES;
|
| [_metalView.leftAnchor constraintEqualToAnchor:margins.leftAnchor].active = YES;
|
| [_metalView.rightAnchor constraintEqualToAnchor:margins.rightAnchor].active = YES;
|
| +
|
| + _renderer = [[RTCMTLNV12Renderer alloc] init];
|
| + if (![(RTCMTLNV12Renderer *)_renderer addRenderingDestination:_metalView]) {
|
| + _renderer = nil;
|
| + };
|
| + } else {
|
| + RTCLogError("Metal configuration falied.");
|
| }
|
| }
|
| -
|
| #pragma mark - MTKViewDelegate methods
|
|
|
| - (void)drawInMTKView:(nonnull MTKView *)view {
|
| NSAssert(view == self.metalView, @"Receiving draw callbacks from foreign instance.");
|
| - [self.renderer drawFrame:self.videoFrame];
|
| + [_renderer drawFrame:self.videoFrame];
|
| }
|
|
|
| - (void)mtkView:(MTKView *)view drawableSizeWillChange:(CGSize)size {
|
| @@ -119,8 +92,8 @@
|
| #pragma mark - RTCVideoRenderer
|
|
|
| - (void)setSize:(CGSize)size {
|
| - self.metalView.drawableSize = size;
|
| - [self.metalView draw];
|
| + _metalView.drawableSize = size;
|
| + [_metalView draw];
|
| }
|
|
|
| - (void)renderFrame:(nullable RTCVideoFrame *)frame {
|
|
|