diff --git a/Capturer/Basic/CaptureBody.swift b/Capturer/Basic/CaptureBody.swift index fd1a12c..100a658 100644 --- a/Capturer/Basic/CaptureBody.swift +++ b/Capturer/Basic/CaptureBody.swift @@ -14,6 +14,8 @@ public final class CaptureBodyWrapper: @unchecked Sendable { public var sessionPreset: AVCaptureSession.Preset = .photo + public var enableMultitaskingCameraAccessIfSupported: Bool = false + public init() { } @@ -63,6 +65,10 @@ public final class CaptureBodyWrapper: @unchecked Sendable { self.session.performConfiguration { $0.sessionPreset = configuration.sessionPreset $0.automaticallyConfiguresCaptureDeviceForWideColor = true + if configuration.enableMultitaskingCameraAccessIfSupported, + $0.isMultitaskingCameraAccessSupported { + $0.isMultitaskingCameraAccessEnabled = true + } } } diff --git a/Capturer/Basic/Outputs/PhotoOutput.swift b/Capturer/Basic/Outputs/PhotoOutput.swift index a673edb..0ad470a 100644 --- a/Capturer/Basic/Outputs/PhotoOutput.swift +++ b/Capturer/Basic/Outputs/PhotoOutput.swift @@ -32,6 +32,7 @@ public final class PhotoOutput: _StatefulObjectBase, OutputNodeType, @unchecked } private let _output = AVCapturePhotoOutput() + public var avCapturePhotoOutput: AVCapturePhotoOutput { _output } public init(quality: AVCapturePhotoOutput.QualityPrioritization = .balanced) { super.init() diff --git a/Capturer/Basic/PhotoTools.swift b/Capturer/Basic/PhotoTools.swift index 7161393..aaf44e6 100644 --- a/Capturer/Basic/PhotoTools.swift +++ b/Capturer/Basic/PhotoTools.swift @@ -4,7 +4,7 @@ import UIKit enum PhotoTools { @MainActor - public static func save(image: UIImage, completion: @escaping (Result) -> Void) { + public static func save(image: UIImage, completion: @escaping @Sendable (Result) -> Void) { PHPhotoLibrary.shared().performChanges { diff --git a/Capturer/Basic/Views/PixelBufferView.swift b/Capturer/Basic/Views/PixelBufferView.swift index 79d31a4..d5bd4ec 100644 --- a/Capturer/Basic/Views/PixelBufferView.swift +++ b/Capturer/Basic/Views/PixelBufferView.swift @@ -32,14 +32,15 @@ public final class PixelBufferView: UIView, PixelBufferDisplaying { subscription?.cancel() - Task { - subscription = await output + Task { [weak self] in + let subscription = await output .pixelBufferBus - .addHandler { [unowned self] pixelBuffer in - Task { - await self.input(pixelBuffer: pixelBuffer) + .addHandler { [weak self] pixelBuffer in + Task { @MainActor in + self?.input(pixelBuffer: pixelBuffer) } } + self?.subscription = subscription } } diff --git a/Capturer/Extended/Filters/CoreImageFilter.swift b/Capturer/Extended/Filters/CoreImageFilter.swift index 3c8ea2c..1d49e3e 100644 --- a/Capturer/Extended/Filters/CoreImageFilter.swift +++ b/Capturer/Extended/Filters/CoreImageFilter.swift @@ -2,7 +2,7 @@ import Foundation import CoreImage -open class CoreImageFilter: CVPixelBufferModifying { +open class CoreImageFilter: CVPixelBufferModifying, @unchecked Sendable { private lazy var ciContext = MTLCreateSystemDefaultDevice() .map {