Fix support orientation changes in Camera Preview
Bug: webrtc:8532
Change-Id: I2a3cc6974af711f1be6a55a6a1e04e7189175bd3
Reviewed-on: https://webrtc-review.googlesource.com/23220
Reviewed-by: Anders Carlsson <andersc@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20702}
diff --git a/examples/objc/AppRTCMobile/ios/ARDVideoCallViewController.m b/examples/objc/AppRTCMobile/ios/ARDVideoCallViewController.m
index ad5bc80..3deb067 100644
--- a/examples/objc/AppRTCMobile/ios/ARDVideoCallViewController.m
+++ b/examples/objc/AppRTCMobile/ios/ARDVideoCallViewController.m
@@ -63,6 +63,10 @@
[session addDelegate:self];
}
+- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
+ return UIInterfaceOrientationMaskAll;
+}
+
#pragma mark - ARDAppClientDelegate
- (void)appClient:(ARDAppClient *)client
diff --git a/examples/objc/AppRTCMobile/ios/Info.plist b/examples/objc/AppRTCMobile/ios/Info.plist
index 90d6bb4..a2f0a68 100644
--- a/examples/objc/AppRTCMobile/ios/Info.plist
+++ b/examples/objc/AppRTCMobile/ios/Info.plist
@@ -53,6 +53,9 @@
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
</array>
<key>UIAppFonts</key>
<array>
diff --git a/sdk/objc/Framework/Classes/UI/RTCCameraPreviewView.m b/sdk/objc/Framework/Classes/UI/RTCCameraPreviewView.m
index 8af3384..2b31e10 100644
--- a/sdk/objc/Framework/Classes/UI/RTCCameraPreviewView.m
+++ b/sdk/objc/Framework/Classes/UI/RTCCameraPreviewView.m
@@ -23,6 +23,26 @@
return [AVCaptureVideoPreviewLayer class];
}
+- (instancetype)initWithFrame:(CGRect)aRect {
+ self = [super initWithFrame:aRect];
+ if (self) {
+ [self addOrientationObserver];
+ }
+ return self;
+}
+
+- (instancetype)initWithCoder:(NSCoder*)aDecoder {
+ self = [super initWithCoder:aDecoder];
+ if (self) {
+ [self addOrientationObserver];
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [self removeOrientationObserver];
+}
+
- (void)setCaptureSession:(AVCaptureSession *)captureSession {
if (_captureSession == captureSession) {
return;
@@ -34,6 +54,10 @@
[RTCDispatcher dispatchAsyncOnType:RTCDispatcherTypeCaptureSession
block:^{
previewLayer.session = captureSession;
+ [RTCDispatcher dispatchAsyncOnType:RTCDispatcherTypeMain
+ block:^{
+ [self setCorrectVideoOrientation];
+ }];
}];
}];
}
@@ -45,6 +69,10 @@
[self setCorrectVideoOrientation];
}
+-(void)orientationChanged:(NSNotification *)notification {
+ [self setCorrectVideoOrientation];
+}
+
- (void)setCorrectVideoOrientation {
// Get current device orientation.
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
@@ -71,6 +99,19 @@
#pragma mark - Private
+- (void)addOrientationObserver {
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(orientationChanged:)
+ name:UIDeviceOrientationDidChangeNotification
+ object:nil];
+}
+
+- (void)removeOrientationObserver {
+ [[NSNotificationCenter defaultCenter] removeObserver:self
+ name:UIDeviceOrientationDidChangeNotification
+ object:nil];
+}
+
- (AVCaptureVideoPreviewLayer *)previewLayer {
return (AVCaptureVideoPreviewLayer *)self.layer;
}