custom instruction
final class CustomVideoCompositionInstruction: NSObject, AVVideoCompositionInstructionProtocol {
/// Custom
var videoColorStrength = ColorStrength(red: 1, green: 1, blue: 1)
let textureModel: TextureModel
let dependency: Dependency
let offscreenRenderer: OffscreenRenderer
/// AVVideoCompositionInstructionProtocol
var timeRange = CMTimeRange()
var enablePostProcessing: Bool = false // to enable/disable AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer, in: outputLayer)
var containsTweening: Bool = false
var requiredSourceTrackIDs: [NSValue]?
var passthroughTrackID: CMPersistentTrackID = kCMPersistentTrackID_Invalid
init?(videoTrack: AVAssetTrack, usedForExport: Bool, dependency: Dependency, timeRange: CMTimeRange) throws {
let orientation: AVAssetTrack.VideoTrackOrientation = usedForExport ? videoTrack.orientation : .upSideDown
guard
let textureModel = try TextureModel(dependency: dependency, orientation: orientation)
else {
print("TextureModel is nil")
return nil
}
guard let offscreenRenderer = OffscreenRenderer(device: dependency.device)
else {
print("OffscreenRenderer is nil")
return nil
}
self.textureModel = textureModel
self.dependency = dependency
self.offscreenRenderer = offscreenRenderer
self.requiredSourceTrackIDs = [NSNumber(value: videoTrack.trackID)]
self.timeRange = timeRange
containsTweening = true
}
}