fix preview and recording orientation fix
- add onCameraConfigurationChanged to CameraSessionDelegate to notify CameraView when configuration changes - when orientatin change update CameraView.PreviewView.videoPreviewLayer.connection orientation value
This commit is contained in:
@@ -32,28 +32,36 @@ extension AVCaptureOutput {
|
||||
func setOrientation(_ orientation: Orientation) {
|
||||
// Set orientation for each connection
|
||||
for connection in connections {
|
||||
#if swift(>=5.9)
|
||||
if #available(iOS 17.0, *) {
|
||||
// Camera Sensors are always in landscape rotation (90deg).
|
||||
// We are setting the target rotation here, so we need to rotate by landscape once.
|
||||
let cameraOrientation = orientation.rotateBy(orientation: .landscapeLeft)
|
||||
let degrees = cameraOrientation.toDegrees()
|
||||
|
||||
// TODO: Don't rotate the video output because it adds overhead. Instead just use EXIF flags for the .mp4 file if recording.
|
||||
// Does that work when we flip the camera?
|
||||
if connection.isVideoRotationAngleSupported(degrees) {
|
||||
connection.videoRotationAngle = degrees
|
||||
}
|
||||
} else {
|
||||
if connection.isVideoOrientationSupported {
|
||||
connection.videoOrientation = orientation.toAVCaptureVideoOrientation()
|
||||
}
|
||||
}
|
||||
#else
|
||||
if connection.isVideoOrientationSupported {
|
||||
connection.videoOrientation = orientation.toAVCaptureVideoOrientation()
|
||||
}
|
||||
#endif
|
||||
connection.setOrientation(orientation)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
extension AVCaptureConnection {
|
||||
func setOrientation(_ orientation: Orientation) {
|
||||
#if swift(>=5.9)
|
||||
if #available(iOS 17.0, *) {
|
||||
// Camera Sensors are always in landscape rotation (90deg).
|
||||
// We are setting the target rotation here, so we need to rotate by landscape once.
|
||||
let cameraOrientation = orientation.rotateBy(orientation: .landscapeLeft)
|
||||
let degrees = cameraOrientation.toDegrees()
|
||||
|
||||
// TODO: Don't rotate the video output because it adds overhead. Instead just use EXIF flags for the .mp4 file if recording.
|
||||
// Does that work when we flip the camera?
|
||||
if isVideoRotationAngleSupported(degrees) {
|
||||
videoRotationAngle = degrees
|
||||
}
|
||||
} else {
|
||||
if isVideoOrientationSupported {
|
||||
videoOrientation = orientation.toAVCaptureVideoOrientation()
|
||||
}
|
||||
}
|
||||
#else
|
||||
if isVideoOrientationSupported {
|
||||
videoOrientation = orientation.toAVCaptureVideoOrientation()
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user