7

我正在使用 .frameProcessor 处理 PHLivePhoto 来修改每一帧。这些帧似乎是按顺序处理的,这很慢。我可以让 PHLivePhotoEditingContext.frameProcessor 利用多个核心吗?

func processLivePhoto(input: PHContentEditingInput) {
    guard let context = PHLivePhotoEditingContext(livePhotoEditingInput: input)
        else { fatalError("not a Live Photo editing input") }
    context.frameProcessor = { frame, _ in
        let renderedFrame = expensiveOperation(using: frame.image)
        return renderedFrame
    }
    // ...logic for saving
}
4

1 回答 1

0

在这种情况下,恐怕无法并行化帧处理。你必须记住:

  • 视频帧需要按顺序写入。
  • 并行处理的帧越多,需要的内存就越多。
  • Core Image 在 GPU 上处理帧,通常一次只能处理一帧。
  • 无论如何,您expensiveOperation并没有真正发生在frameProcessor块中,因为实际渲染是由此范围之外的框架处理的。
于 2019-10-04T13:09:22.897 回答