Index: webrtc/sdk/objc/Framework/UnitTests/RTCMTLVideoViewTests.mm |
diff --git a/webrtc/sdk/objc/Framework/UnitTests/RTCMTLVideoViewTests.mm b/webrtc/sdk/objc/Framework/UnitTests/RTCMTLVideoViewTests.mm |
index 1d422eb09aa9b55e8a0b98414b30b9c605ea7e17..98acf442942878c96b0bbca192f17f331e78b7a2 100644 |
--- a/webrtc/sdk/objc/Framework/UnitTests/RTCMTLVideoViewTests.mm |
+++ b/webrtc/sdk/objc/Framework/UnitTests/RTCMTLVideoViewTests.mm |
@@ -18,27 +18,31 @@ |
// Extension of RTCMTLVideoView for testing purposes. |
@interface RTCMTLVideoView (Testing) |
-@property(nonatomic, strong) id<RTCMTLRenderer> renderer; |
+@property(nonatomic, strong) id<RTCMTLRenderer> rendererI420; |
+@property(nonatomic, strong) id<RTCMTLRenderer> rendererNV12; |
@property(nonatomic, strong) UIView* metalView; |
@property(atomic, strong) RTCVideoFrame* videoFrame; |
+ (BOOL)isMetalAvailable; |
+ (UIView*)createMetalView:(CGRect)frame; |
-+ (id<RTCMTLRenderer>)createMetalRenderer; |
++ (id<RTCMTLRenderer>)createNV12Renderer; |
++ (id<RTCMTLRenderer>)createI420Renderer; |
- (void)drawInMTKView:(id)view; |
@end |
@interface RTCMTLVideoViewTests : NSObject |
@property(nonatomic, strong) id classMock; |
@property(nonatomic, strong) id metalViewMock; |
-@property(nonatomic, strong) id rendererMock; |
+@property(nonatomic, strong) id rendererNV12Mock; |
+@property(nonatomic, strong) id rendererI420Mock; |
@end |
@implementation RTCMTLVideoViewTests |
@synthesize classMock = _classMock; |
@synthesize metalViewMock = _metalViewMock; |
-@synthesize rendererMock = _rendererMock; |
+@synthesize rendererNV12Mock = _rendererNV12Mock; |
+@synthesize rendererI420Mock = _rendererI420Mock; |
- (void)setup { |
self.classMock = OCMClassMock([RTCMTLVideoView class]); |
@@ -48,16 +52,20 @@ |
[[[[self.classMock stub] ignoringNonObjectArgs] andReturn:self.metalViewMock] |
createMetalView:CGRectZero]; |
- self.rendererMock = OCMProtocolMock(@protocol(RTCMTLRenderer)); |
- OCMStub([self.classMock createMetalRenderer]).andReturn(self.rendererMock); |
+ self.rendererNV12Mock = OCMProtocolMock(@protocol(RTCMTLRenderer)); |
+ OCMStub([self.classMock createI420Renderer]).andReturn(self.rendererI420Mock); |
+ self.rendererI420Mock = OCMProtocolMock(@protocol(RTCMTLRenderer)); |
+ OCMStub([self.classMock createNV12Renderer]).andReturn(self.rendererNV12Mock); |
} |
- (void)tearDown { |
[self.classMock stopMocking]; |
- [self.rendererMock stopMocking]; |
+ [self.rendererI420Mock stopMocking]; |
+ [self.rendererNV12Mock stopMocking]; |
[self.metalViewMock stopMocking]; |
self.classMock = nil; |
- self.rendererMock = nil; |
+ self.rendererI420Mock = nil; |
+ self.rendererNV12Mock = nil; |
self.metalViewMock = nil; |
} |
@@ -67,59 +75,64 @@ |
RTCMTLVideoView *realView = [[RTCMTLVideoView alloc] init]; |
// then |
- EXPECT_TRUE(realView.renderer == nil); |
- EXPECT_TRUE(realView.metalView == nil); |
+ EXPECT_EQ(realView.rendererI420, nil); |
+ EXPECT_EQ(realView.rendererNV12, nil); |
+ EXPECT_EQ(realView.metalView, nil); |
} |
- (void)testMetalConfigureExecuted { |
// given |
OCMStub([self.classMock isMetalAvailable]).andReturn(YES); |
- OCMStub([self.rendererMock addRenderingDestination:self.metalViewMock]) |
- .andReturn(NO); |
+ OCMStub([self.rendererNV12Mock addRenderingDestination:self.metalViewMock]).andReturn(NO); |
+ OCMStub([self.rendererI420Mock addRenderingDestination:self.metalViewMock]).andReturn(NO); |
// when |
RTCMTLVideoView *realView = [[RTCMTLVideoView alloc] init]; |
// then |
- EXPECT_TRUE(realView.renderer == nil); |
+ EXPECT_EQ(realView.rendererI420, nil); |
+ EXPECT_EQ(realView.rendererNV12, nil); |
EXPECT_TRUE(realView.metalView != nil); |
} |
-- (void)testMetalDrawCallback { |
+- (void)testRTCVideoRenderNilFrameCallback { |
// given |
- OCMStub([self.classMock isMetalAvailable]).andReturn(NO); |
- OCMExpect([self.rendererMock drawFrame:[OCMArg any]]); |
RTCMTLVideoView *realView = [[RTCMTLVideoView alloc] init]; |
- realView.metalView = self.metalViewMock; |
- realView.renderer = self.rendererMock; |
// when |
- [realView drawInMTKView:self.metalViewMock]; |
+ [realView renderFrame:nil]; |
// then |
- [self.rendererMock verify]; |
+ EXPECT_TRUE(realView.videoFrame == nil); |
} |
-- (void)testRTCVideoRenderNilFrameCallback { |
+- (void)testRTCVideoRenderFrameCallbackI420 { |
// given |
- OCMStub([self.classMock isMetalAvailable]).andReturn(NO); |
RTCMTLVideoView *realView = [[RTCMTLVideoView alloc] init]; |
+ id frame = OCMClassMock([RTCVideoFrame class]); |
+ |
+ realView.metalView = self.metalViewMock; |
+ realView.rendererI420 = self.rendererI420Mock; |
+ OCMExpect([self.rendererI420Mock drawFrame:frame]); |
// when |
- [realView renderFrame:nil]; |
+ [realView renderFrame:frame]; |
+ [realView drawInMTKView:self.metalViewMock]; |
// then |
- EXPECT_TRUE(realView.videoFrame == nil); |
+ EXPECT_EQ(realView.videoFrame, frame); |
+ [self.rendererI420Mock verify]; |
} |
-- (void)testRTCVideoRenderFrameCallback { |
+- (void)testRTCVideoRenderFrameCallbackNV12 { |
// given |
- OCMStub([self.classMock isMetalAvailable]).andReturn(NO); |
RTCMTLVideoView *realView = [[RTCMTLVideoView alloc] init]; |
id frame = OCMClassMock([RTCVideoFrame class]); |
+ OCMStub([frame nativeHandle]).andReturn((CVPixelBufferRef)[OCMArg anyPointer]); |
+ |
realView.metalView = self.metalViewMock; |
- realView.renderer = self.rendererMock; |
- OCMExpect([self.rendererMock drawFrame:frame]); |
+ realView.rendererNV12 = self.rendererNV12Mock; |
+ OCMExpect([self.rendererNV12Mock drawFrame:frame]); |
// when |
[realView renderFrame:frame]; |
@@ -127,7 +140,7 @@ |
// then |
EXPECT_EQ(realView.videoFrame, frame); |
- [self.rendererMock verify]; |
+ [self.rendererNV12Mock verify]; |
} |
@end |
@@ -146,23 +159,23 @@ TEST(RTCMTLVideoViewTests, MetalConfigureExecuted) { |
[test tearDown]; |
} |
-TEST(RTCMTLVideoViewTests, MetalDrawCallback) { |
+TEST(RTCMTLVideoViewTests, RTCVideoRenderNilFrameCallback) { |
RTCMTLVideoViewTests *test = [[RTCMTLVideoViewTests alloc] init]; |
[test setup]; |
- [test testMetalDrawCallback]; |
+ [test testRTCVideoRenderNilFrameCallback]; |
[test tearDown]; |
} |
-TEST(RTCMTLVideoViewTests, RTCVideoRenderNilFrameCallback) { |
+TEST(RTCMTLVideoViewTests, RTCVideoRenderFrameCallbackI420) { |
RTCMTLVideoViewTests *test = [[RTCMTLVideoViewTests alloc] init]; |
[test setup]; |
- [test testRTCVideoRenderNilFrameCallback]; |
+ [test testRTCVideoRenderFrameCallbackI420]; |
[test tearDown]; |
} |
-TEST(RTCMTLVideoViewTests, RTCVideoRenderFrameCallback) { |
+TEST(RTCMTLVideoViewTests, RTCVideoRenderFrameCallbackNV12) { |
RTCMTLVideoViewTests *test = [[RTCMTLVideoViewTests alloc] init]; |
[test setup]; |
- [test testRTCVideoRenderFrameCallback]; |
+ [test testRTCVideoRenderFrameCallbackNV12]; |
[test tearDown]; |
} |