blob: 5a60ba3e896ddd0585ab7746c261537faa46a9c6 [file] [log] [blame]
hayscedd8fef2015-12-08 11:08:39 -08001/*
2 * Copyright 2015 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
tkchin9eeb6242016-04-27 01:54:20 -070011#import "WebRTC/RTCCameraPreviewView.h"
hayscedd8fef2015-12-08 11:08:39 -080012
13#import <AVFoundation/AVFoundation.h>
meetAkshay990d335c72017-04-18 07:12:05 -070014#import <UIKit/UIKit.h>
hayscedd8fef2015-12-08 11:08:39 -080015
tkchin9eeb6242016-04-27 01:54:20 -070016#import "RTCDispatcher+Private.h"
hayscedd8fef2015-12-08 11:08:39 -080017
18@implementation RTCCameraPreviewView
19
20@synthesize captureSession = _captureSession;
21
22+ (Class)layerClass {
23 return [AVCaptureVideoPreviewLayer class];
24}
25
26- (void)setCaptureSession:(AVCaptureSession *)captureSession {
27 if (_captureSession == captureSession) {
28 return;
29 }
30 _captureSession = captureSession;
31 AVCaptureVideoPreviewLayer *previewLayer = [self previewLayer];
32 [RTCDispatcher dispatchAsyncOnType:RTCDispatcherTypeCaptureSession
33 block:^{
34 previewLayer.session = captureSession;
35 }];
36}
37
meetAkshay990d335c72017-04-18 07:12:05 -070038- (void)layoutSubviews {
39 [super layoutSubviews];
40
41 // Update the video orientation based on the device orientation.
42 [self setCorrectVideoOrientation];
43}
44
45- (void)setCorrectVideoOrientation {
46 // Get current device orientation.
47 UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
48 AVCaptureVideoPreviewLayer *previewLayer = [self previewLayer];
49
50 // First check if we are allowed to set the video orientation.
51 if (previewLayer.connection.isVideoOrientationSupported) {
52 // Set the video orientation based on device orientation.
53 if (deviceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
54 previewLayer.connection.videoOrientation =
55 AVCaptureVideoOrientationPortraitUpsideDown;
56 } else if (deviceOrientation == UIInterfaceOrientationLandscapeRight) {
57 previewLayer.connection.videoOrientation =
58 AVCaptureVideoOrientationLandscapeRight;
59 } else if (deviceOrientation == UIInterfaceOrientationLandscapeLeft) {
60 previewLayer.connection.videoOrientation =
61 AVCaptureVideoOrientationLandscapeLeft;
62 } else {
63 previewLayer.connection.videoOrientation =
64 AVCaptureVideoOrientationPortrait;
65 }
66 }
67}
68
hayscedd8fef2015-12-08 11:08:39 -080069#pragma mark - Private
70
71- (AVCaptureVideoPreviewLayer *)previewLayer {
72 return (AVCaptureVideoPreviewLayer *)self.layer;
73}
74
75@end