MijickCamera/Sources/Internal/Manager/Helpers/Capture Session/CaptureSession+MockCaptureSession.swift

58 lines
1.9 KiB
Swift
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// CaptureSession+MockCaptureSession.swift of MijickCamera
//
// Created by Tomasz Kurylik. Sending from Kraków!
// - Mail: tomasz.kurylik@mijick.com
// - GitHub: https://github.com/FulcrumOne
// - Medium: https://medium.com/@mijick
//
// Copyright ©2024 Mijick. All rights reserved.
import AVKit
extension MockCaptureSession: @unchecked Sendable {}
class MockCaptureSession: NSObject, CaptureSession { required override init() {}
// MARK: Attributes
var isRunning: Bool { _isRunning }
var deviceInputs: [any CaptureDeviceInput] { _deviceInputs }
var outputs: [AVCaptureOutput] { _outputs }
var sessionPreset: AVCaptureSession.Preset = .cif352x288
// MARK: Private Attributes
private var _isRunning: Bool = false
private var _deviceInputs: [any CaptureDeviceInput] = []
private var _outputs: [AVCaptureOutput] = []
}
// MARK: - METHODS
extension MockCaptureSession {
func startRunning() { Task { @MainActor in
_isRunning = true
}}
func stopRunningAndReturnNewInstance() -> any CaptureSession {
_isRunning = false
return MockCaptureSession()
}
}
extension MockCaptureSession {
func add(input: (any CaptureDeviceInput)?) throws(MCameraError) {
guard let input = input as? MockDeviceInput, !_deviceInputs.contains(where: { input == $0 }) else { throw .cannotSetupInput }
_deviceInputs.append(input)
}
func remove(input: (any CaptureDeviceInput)?) {
guard let input = input as? MockDeviceInput, let index = _deviceInputs.firstIndex(where: { $0.device.uniqueID == input.device.uniqueID }) else { return }
_deviceInputs.remove(at: index)
}
}
extension MockCaptureSession {
func add(output: AVCaptureOutput?) throws(MCameraError) {
guard let output, !outputs.contains(output) else { throw .cannotSetupOutput }
_outputs.append(output)
}
}