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:cbbd8c76e8TBR=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:
parent
e47c1d3ca1
commit
a2fb30c8cb
@ -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;
|
||||
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user