Files
HaishinKit.swift/HaishinKit/Sources/Mixer/CaptureSession.Capabilities.swift

106 lines
3.1 KiB
Swift

import AVFoundation
extension CaptureSession {
#if os(macOS)
struct Capabilities {
static let isMultiCamSupported = true
var isMultiCamSessionEnabled = true {
didSet {
isMultiCamSessionEnabled = true
}
}
func synchronizationClock(_ session: AVCaptureSession) -> CMClock? {
if #available(macOS 12.3, *) {
return session.synchronizationClock
} else {
return session.masterClock
}
}
func makeSession(_ sessionPreset: AVCaptureSession.Preset) -> AVCaptureSession {
let session = AVCaptureSession()
if session.canSetSessionPreset(sessionPreset) {
session.sessionPreset = sessionPreset
}
return session
}
func isMultitaskingCameraAccessEnabled(_ session: AVCaptureSession) -> Bool {
false
}
}
#elseif os(iOS) || os(tvOS)
struct Capabilities {
static var isMultiCamSupported: Bool {
if #available(tvOS 17.0, *) {
return AVCaptureMultiCamSession.isMultiCamSupported
} else {
return false
}
}
var isMultiCamSessionEnabled = false {
didSet {
if !Self.isMultiCamSupported {
isMultiCamSessionEnabled = false
logger.info("This device can't support the AVCaptureMultiCamSession.")
}
}
}
#if os(iOS)
func synchronizationClock(_ session: AVCaptureSession) -> CMClock? {
if #available(iOS 15.4, *) {
return session.synchronizationClock
} else {
return session.masterClock
}
}
#endif
@available(tvOS 17.0, *)
func isMultitaskingCameraAccessEnabled(_ session: AVCaptureSession) -> Bool {
if #available(iOS 16.0, tvOS 17.0, *) {
session.isMultitaskingCameraAccessEnabled
} else {
false
}
}
@available(tvOS 17.0, *)
func makeSession(_ sessionPreset: AVCaptureSession.Preset) -> AVCaptureSession {
let session: AVCaptureSession
if isMultiCamSessionEnabled {
session = AVCaptureMultiCamSession()
} else {
session = AVCaptureSession()
}
if session.canSetSessionPreset(sessionPreset) {
session.sessionPreset = sessionPreset
}
return session
}
}
#else
struct Capabilities {
static let isMultiCamSupported = false
var isMultiCamSessionEnabled = false {
didSet {
isMultiCamSessionEnabled = false
}
}
func synchronizationClock(_ session: AVCaptureSession) -> CMClock? {
return session.synchronizationClock
}
func isMultitaskingCameraAccessEnabled(_ session: AVCaptureSession) -> Bool {
false
}
}
#endif
}