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 でフレームを処理していますが、通常は一度に 1 フレームしか処理できません。
  • 実際のレンダリングはこのスコープ外のフレームワークによって処理されるため、とにかくブロックexpensiveOperation内で実際に起こっているわけではありません。frameProcessor
于 2019-10-04T13:09:22.897 に答える