Files
HaishinKit.swift/HaishinKit/Sources/Codec/VTSessionConvertible.swift
2025-08-07 09:16:20 +09:00

31 lines
1.0 KiB
Swift

import AVFoundation
import Foundation
import VideoToolbox
enum VTSessionError: Swift.Error {
case failedToCreate(status: OSStatus)
case failedToPrepare(status: OSStatus)
case failedToConvert(status: OSStatus)
}
protocol VTSessionConvertible {
func setOption(_ option: VTSessionOption) -> OSStatus
func setOptions(_ options: Set<VTSessionOption>) -> OSStatus
func convert(_ sampleBuffer: CMSampleBuffer, continuation: AsyncStream<CMSampleBuffer>.Continuation?) throws
func invalidate()
}
extension VTSessionConvertible where Self: VTSession {
func setOption(_ option: VTSessionOption) -> OSStatus {
return VTSessionSetProperty(self, key: option.key.CFString, value: option.value)
}
func setOptions(_ options: Set<VTSessionOption>) -> OSStatus {
var properties: [AnyHashable: AnyObject] = [:]
for option in options {
properties[option.key.CFString] = option.value
}
return VTSessionSetProperties(self, propertyDictionary: properties as CFDictionary)
}
}