gpt4 book ai didi

macos - 在 GPU Cocoa 上应用 CIFilter

转载 作者:行者123 更新时间:2023-12-03 16:19:15 24 4
gpt4 key购买 nike

Apple 文档给出了将 CIFilter 应用于 AVAsset 的示例:

let filter = CIFilter(name: "CIGaussianBlur")!
let composition = AVVideoComposition(asset: asset, applyingCIFiltersWithHandler: { request in

// Clamp to avoid blurring transparent pixels at the image edges
let source = request.sourceImage.clampingToExtent()
filter.setValue(source, forKey: kCIInputImageKey)

// Vary filter parameters based on video timing
let seconds = CMTimeGetSeconds(request.compositionTime)
filter.setValue(seconds * 10.0, forKey: kCIInputRadiusKey)

// Crop the blurred output to the bounds of the original image
let output = filter.outputImage!.cropping(to: request.sourceImage.extent)

// Provide the filter output to the composition
request.finish(with: output, context: nil)
})

这在某些视频上效果很好(对于使用 AAC 编解码器的视频来说,它的性能似乎要高得多),而在其他视频上,CPU 使用率会急剧上升,并且视频永远不会完成处理。有没有办法将其移至 GPU 上以加快速度/不占用太多 CPU 资源?我看到this question适用于 iOS,但 CIContext contextWithEAGLContext: 在 OS X 上不可用。我是 AVFoundation/视频处理新手,OS X 上有等效的吗?

注意:我不想实时执行此操作,我只是想应用过滤器并使用 GPU 将文件导出到文件系统。

最佳答案

macOS 有用于 OpenGL 的 contextWithCGLContext:

+ (CIContext *)contextWithCGLContext:(CGLContextObj)cglctx
pixelFormat:(nullable CGLPixelFormatObj)pixelFormat
colorSpace:(nullable CGColorSpaceRef)colorSpace
options:(nullable NSDictionary<NSString*,id> *)options;

contextWithMTLDevice: 对于 Metal,如果您愿意的话:

+ (CIContext *)contextWithMTLDevice:(id<MTLDevice>)device;

关于macos - 在 GPU Cocoa 上应用 CIFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40177721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com