Обрабатывать живые фотографии в нескольких потоках - PullRequest
6 голосов
/ 04 октября 2019

Я обрабатываю PHLivePhoto, используя .frameProcessor для изменения каждого кадра. Кадры, кажется, обрабатываются в последовательности, что медленно. Могу ли я получить 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
}

1 Ответ

0 голосов
/ 04 октября 2019

Боюсь, что в этом случае нет способа распараллелить обработку кадров. Вы должны иметь в виду:

  • Видеокадры должны записываться по порядку.
  • Чем больше кадров вы будете обрабатывать параллельно, тем больше памяти вам потребуется.
  • Core Image обрабатывает кадры на графическом процессоре, который в любом случае может обрабатывать только один кадр за раз.
  • Ваш expensiveOperation на самом деле не происходит в блоке frameProcessor, так как фактическийрендеринг обрабатывается платформой вне этой области.
...