// // AVCaptureOutput+mirror.swift // mrousavy // // Created by Marc Rousavy on 18.01.21. // Copyright © 2021 mrousavy. All rights reserved. // import AVFoundation extension AVCaptureOutput { /** Mirrors the video output if possible. */ func mirror() { connections.forEach { connection in if connection.isVideoMirroringSupported { connection.automaticallyAdjustsVideoMirroring = false connection.isVideoMirrored = true } } } /** Sets the target orientation of the video output. This does not always physically rotate image buffers. - For Preview, an orientation hint is used to rotate the layer/view itself. - For Photos, an EXIF tag is used. - For Videos, the buffers are physically rotated if available, since we use an AVCaptureVideoDataOutput instead of an AVCaptureMovieFileOutput. */ func setOrientation(_ orientation: Orientation) { // Camera Sensors are always in 90deg rotation. // We are setting the target rotation here, so we need to rotate by 90deg once. let cameraOrientation = orientation.rotateRight() // Set orientation for each connection connections.forEach { connection in // TODO: Use this once Xcode 15 is rolled out // if #available(iOS 17.0, *) { // let degrees = cameraOrientation.toDegrees() // if connection.isVideoRotationAngleSupported(degrees) { // connection.videoRotationAngle = degrees // } // } else { if connection.isVideoOrientationSupported { connection.videoOrientation = cameraOrientation.toAVCaptureVideoOrientation() } // } } } }