I am playing around with this tutorial project:
https://developer.apple.com/tutorials/sample-apps/capturingphotos-captureandsave
This app uses ultra-wide camera (0.5x) by default but I want to switch to main camera (1x) because quality of uw photos are worse. But I can’t see any options, only to switch between front/back:
class Camera: NSObject {
private let captureSession = AVCaptureSession()
private var isCaptureSessionConfigured = false
private var deviceInput: AVCaptureDeviceInput?
private var photoOutput: AVCapturePhotoOutput?
private var videoOutput: AVCaptureVideoDataOutput?
private var sessionQueue: DispatchQueue!
private var allCaptureDevices: [AVCaptureDevice] {
AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInTrueDepthCamera, .builtInDualCamera, .builtInDualWideCamera, .builtInWideAngleCamera, .builtInDualWideCamera], mediaType: .video, position: .unspecified).devices
}
private var frontCaptureDevices: [AVCaptureDevice] {
allCaptureDevices
.filter { $0.position == .front }
}
private var backCaptureDevices: [AVCaptureDevice] {
allCaptureDevices
.filter { $0.position == .back }
}
private var captureDevices: [AVCaptureDevice] {
var devices = [AVCaptureDevice]()
#if os(macOS) || (os(iOS) && targetEnvironment(macCatalyst))
devices += allCaptureDevices
#else
if let backDevice = backCaptureDevices.first {
devices += [backDevice]
}
if let frontDevice = frontCaptureDevices.first {
devices += [frontDevice]
}
#endif
return devices
}
private var availableCaptureDevices: [AVCaptureDevice] {
captureDevices
.filter( { $0.isConnected } )
.filter( { !$0.isSuspended } )
}
private var captureDevice: AVCaptureDevice? {
didSet {
guard let captureDevice = captureDevice else { return }
logger.debug("Using capture device: (captureDevice.localizedName)")
sessionQueue.async {
self.updateSessionForCaptureDevice(captureDevice)
}
}
}
...
private func initialize() {
sessionQueue = DispatchQueue(label: "session queue")
captureDevice = availableCaptureDevices.first ?? AVCaptureDevice.default(for: .video)
UIDevice.current.beginGeneratingDeviceOrientationNotifications()
NotificationCenter.default.addObserver(self, selector: #selector(updateForDeviceOrientation), name: UIDevice.orientationDidChangeNotification, object: nil)
}