Reland of Add Metal video view in AppRTCMobile and metal availability macro. (patchset #1 id:1 of https://codereview.webrtc.org/2739793003/ )

Reason for revert:
Fixing rendering issues in AppRTCMobile

Original issue's description:
> Revert of Add Metal video view in AppRTCMobile and metal availability macro. (patchset #5 id:80001 of https://codereview.webrtc.org/2722583002/ )
>
> Reason for revert:
> Breaks AppRTCMobile
>
> Original issue's description:
> > Add Metal video view in AppRTCMobile and Metal availability macro.
> >
> > - The RTC_SUPPORTS_METAL macro allows consumers to gracefully handle compilation for different archs that are not supporting Metal.
> >
> > BUG=webrtc:7079
> >
> > Review-Url: https://codereview.webrtc.org/2722583002
> > Cr-Commit-Position: refs/heads/master@{#17004}
> > Committed: 154a7bb877
>
> TBR=magjed@webrtc.org,tkchin@webrtc.org,denicija@webrtc.org
> # Not skipping CQ checks because original CL landed more than 1 days ago.
> BUG=webrtc:7079
>
> Review-Url: https://codereview.webrtc.org/2739793003
> Cr-Commit-Position: refs/heads/master@{#17119}
> Committed: cbbd8c76e8

TBR=magjed@webrtc.org,tkchin@webrtc.org,denicija@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:7079

Review-Url: https://codereview.webrtc.org/2742603003
Cr-Commit-Position: refs/heads/master@{#17139}
This commit is contained in:
kthelgason 2017-03-09 03:34:27 -08:00 committed by Commit bot
parent e47c1d3ca1
commit a2fb30c8cb
5 changed files with 34 additions and 14 deletions

View File

@ -10,8 +10,8 @@
#import <UIKit/UIKit.h>
#import "WebRTC/RTCCameraPreviewView.h"
#import "WebRTC/RTCEAGLVideoView.h"
#import <WebRTC/RTCCameraPreviewView.h>
#import <WebRTC/RTCVideoRenderer.h>
#import "ARDStatsView.h"
@ -38,7 +38,7 @@
@property(nonatomic, readonly) UILabel *statusLabel;
@property(nonatomic, readonly) RTCCameraPreviewView *localVideoView;
@property(nonatomic, readonly) RTCEAGLVideoView *remoteVideoView;
@property(nonatomic, readonly) __kindof UIView<RTCVideoRenderer> *remoteVideoView;
@property(nonatomic, readonly) ARDStatsView *statsView;
@property(nonatomic, weak) id<ARDVideoCallViewDelegate> delegate;

View File

@ -11,6 +11,10 @@
#import "ARDVideoCallView.h"
#import <AVFoundation/AVFoundation.h>
#import <WebRTC/RTCEAGLVideoView.h>
#import <WebRTC/RTCMTLVideoView.h>
#import "UIImage+ARDUtilities.h"
static CGFloat const kButtonPadding = 16;
@ -38,8 +42,15 @@ static CGFloat const kStatusBarHeight = 20;
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
_remoteVideoView = [[RTCEAGLVideoView alloc] initWithFrame:CGRectZero];
_remoteVideoView.delegate = self;
#if defined(RTC_SUPPORTS_METAL)
_remoteVideoView = [[RTCMTLVideoView alloc] initWithFrame:CGRectZero];
#else
RTCEAGLVideoView *remoteView = [[RTCEAGLVideoView alloc] initWithFrame:CGRectZero];
remoteView.delegate = self;
_remoteVideoView = remoteView;
#endif
[self addSubview:_remoteVideoView];
_localVideoView = [[RTCCameraPreviewView alloc] initWithFrame:CGRectZero];

View File

@ -239,10 +239,10 @@ static const NSInteger kMaxInflightBuffers = 1;
dispatch_semaphore_signal(block_semaphore);
}];
MTLRenderPassDescriptor *_renderPassDescriptor = _view.currentRenderPassDescriptor;
if (_renderPassDescriptor) { // Valid drawable.
MTLRenderPassDescriptor *renderPassDescriptor = _view.currentRenderPassDescriptor;
if (renderPassDescriptor) { // Valid drawable.
id<MTLRenderCommandEncoder> renderEncoder =
[commandBuffer renderCommandEncoderWithDescriptor:_renderPassDescriptor];
[commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor];
renderEncoder.label = renderEncoderLabel;
// Set context state.
@ -269,13 +269,13 @@ static const NSInteger kMaxInflightBuffers = 1;
#pragma mark - RTCMTLRenderer
- (void)drawFrame:(RTCVideoFrame *)frame {
[self setupTexturesForFrame:frame];
@autoreleasepool {
[self render];
if ([self setupTexturesForFrame:frame])
[self render];
}
}
- (void)setupTexturesForFrame:(nonnull RTCVideoFrame *)frame {
- (BOOL)setupTexturesForFrame:(nonnull RTCVideoFrame *)frame {
CVPixelBufferRef pixelBuffer = frame.nativeHandle;
id<MTLTexture> lumaTexture = nil;
@ -313,7 +313,9 @@ static const NSInteger kMaxInflightBuffers = 1;
_yTexture = lumaTexture;
_CrCbTexture = chromaTexture;
_offset = offsetForRotation((webrtc::VideoRotation)frame.rotation);
return YES;
}
return NO;
}
@end

View File

@ -51,9 +51,9 @@
#pragma mark - Private
+ (BOOL)isMetalAvailable {
#if defined(__OBJC__) && COREVIDEO_SUPPORTS_METAL
#if defined(RTC_SUPPORTS_METAL)
return YES;
#elif
#else
return NO;
#endif
}

View File

@ -12,8 +12,13 @@
#import "WebRTC/RTCVideoRenderer.h"
// Check if metal is supported in WebRTC.
// NOTE: Currently arm64 == Metal.
#if defined(__aarch64__)
#define RTC_SUPPORTS_METAL
#endif
NS_ASSUME_NONNULL_BEGIN
RTC_EXPORT
/**
* RTCMTLVideoView is thin wrapper around MTKView.
@ -22,6 +27,8 @@ RTC_EXPORT
* bounds using Metal.
*/
NS_CLASS_AVAILABLE_IOS(9)
RTC_EXPORT
@interface RTCMTLVideoView : UIView <RTCVideoRenderer>
@end