From 0d335c7756e172c38f5a86287aec7b62ff288be8 Mon Sep 17 00:00:00 2001 From: meetAkshay99 Date: Tue, 18 Apr 2017 07:12:05 -0700 Subject: [PATCH] Fixed that RTCCameraPreviewView did not rotate the video on device rotation. BUG=webrtc:6749 Review-Url: https://codereview.webrtc.org/2798993002 Cr-Commit-Position: refs/heads/master@{#17742} --- AUTHORS | 1 + .../Framework/Classes/RTCCameraPreviewView.m | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/AUTHORS b/AUTHORS index e13033eb72..627eab7aca 100644 --- a/AUTHORS +++ b/AUTHORS @@ -2,6 +2,7 @@ # Name or Organization Adam Fedor +Akshay Shah Alexander Brauckmann Alexandre Gouaillard Andrew MacDonald diff --git a/webrtc/sdk/objc/Framework/Classes/RTCCameraPreviewView.m b/webrtc/sdk/objc/Framework/Classes/RTCCameraPreviewView.m index 659973ff18..5a60ba3e89 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCCameraPreviewView.m +++ b/webrtc/sdk/objc/Framework/Classes/RTCCameraPreviewView.m @@ -11,6 +11,7 @@ #import "WebRTC/RTCCameraPreviewView.h" #import +#import #import "RTCDispatcher+Private.h" @@ -34,6 +35,37 @@ }]; } +- (void)layoutSubviews { + [super layoutSubviews]; + + // Update the video orientation based on the device orientation. + [self setCorrectVideoOrientation]; +} + +- (void)setCorrectVideoOrientation { + // Get current device orientation. + UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; + AVCaptureVideoPreviewLayer *previewLayer = [self previewLayer]; + + // First check if we are allowed to set the video orientation. + if (previewLayer.connection.isVideoOrientationSupported) { + // Set the video orientation based on device orientation. + if (deviceOrientation == UIInterfaceOrientationPortraitUpsideDown) { + previewLayer.connection.videoOrientation = + AVCaptureVideoOrientationPortraitUpsideDown; + } else if (deviceOrientation == UIInterfaceOrientationLandscapeRight) { + previewLayer.connection.videoOrientation = + AVCaptureVideoOrientationLandscapeRight; + } else if (deviceOrientation == UIInterfaceOrientationLandscapeLeft) { + previewLayer.connection.videoOrientation = + AVCaptureVideoOrientationLandscapeLeft; + } else { + previewLayer.connection.videoOrientation = + AVCaptureVideoOrientationPortrait; + } + } +} + #pragma mark - Private - (AVCaptureVideoPreviewLayer *)previewLayer {