Я использую CoreImageHelpers в качестве основы использования металла для отображения отфильтрованного в реальном времени вывода через камеру. Проблема в том, что я неожиданно получаю сильный заряд батареи, когда ожидаю, что Metal будет работать намного лучше, чем обновление UIImageView или даже OpenGL.
Обновление: тест с моей раздвоенной версией , ИЛИ
Перед тестированием исходного проекта обязательно обновите пару вещей:
-В ImageView.swift функция draw () должна вызываться после commandBuffer.commit ()
-Открытие DispatchQueue.main.async вокруг connection.videoOrientation в captureOutput:
DispatchQueue.main.async{
connection.videoOrientation = AVCaptureVideoOrientation(rawValue: UIApplication.shared.statusBarOrientation.rawValue)!
}
Я тестирую на iPhone 6s Plus, и один эффект CICMYKHalftone увеличивает уровень заряда батареи при просмотре в Debug Navigator.
Я думал, что использование этого представления Металла значительно повысит производительность, но, похоже, это не так, даже при работе с более низкой частотой кадров 25-30 кадров в секунду.
Есть ли что-то важное, что могло бы сделать использование батареи лучше, чем в других приложениях с эффектами живой камеры?
Обновления :
Еще одно обновление производительности, которое я добавил, - это настройка MTKView для предпочитаемого фрейм-макера, которую я установил на 30, поскольку по умолчанию он будет вызываться до 60 раз в секунду. Я комбинирую это с более низкой частотой кадров устройства, чтобы добиться лучшей производительности и меньшего воздействия батареи.