IOS; Неподдерживаемый формат пикселей
Приложение My Unity использует канал "Камера" для нескольких систем, которые использует приложение; таких как Vuforia, ARKit и просто общий вход для фотокамер.
Проблема, с которой я сталкиваюсь, заключается в том, что каждый из этих запросов требует другого пиксельного формата, который, похоже, вызывает проблему для ARKit. Для этого требуется YUV, и я не знаю, как изменить формат пикселя камеры назад. Поэтому я получаю эту ошибку, когда пытаюсь запустить ARKit после других;
2017-08-21 08: 51: 38.749452 + 0100 ar_app [399: 105849] [Датчик] Формат неподдерживаемого пикселя: 875704438
2017-08-21 08: 51: 38.749876 + 0100 ar_app [399: 105849] [Сессия] Сессия завершилась с ошибкой: Ошибка Домен = com.apple.arkit.error Код = 104 "Неподдерживаемый сеанс захвата конфигурации."
UserInfo = { NSLocalizedRecoverySuggestion = Убедитесь, что для захвата используются правильное устройство и формат.
NSLocalizedDescription = Неподдерживаемая конфигурация сеанса захвата.,
NSLocalizedFailureReason = Устройство ввода и/или формат предоставленного сеанса захвата не поддерживаются для данного конфигурации. }
По крайней мере, это то, что я считаю проблемой; что он не получает формат в YUV. Любая помощь приветствуется.
,
Спасибо.
Ответы
Ответ 1
YUV - это цветовое пространство, существует несколько форматов.
ar_app [399: 105849] [Сенсор] Формат неподдерживаемого пикселя: 875704438
875704438
переводится на 420v
(NV12) или kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange = '420v'
Итак, у вас есть формат пикселя YUV, в частности бипланар с диапазоном видео.
ARKit docs упоминают бипланарный YUV-формат, но не тип диапазона:
Содержимое буферов пикселей кодируется в бипланарном формате YCbCr (также называемом YUV)
Однако плагин Unity ARKit делает проверку kCVPixelFormatType_420YpCbCr8BiPlanarFullRange в didUpdateFrame:
if (CVPixelBufferGetPlaneCount(pixelBuffer) < 2 || CVPixelBufferGetPixelFormatType(pixelBuffer) != kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) {
return;
}
Итак, в заключение может не понравиться тот факт, что он не полный, но у меня нет простого способа его протестировать. Возможно, вы можете попробовать добиться полного диапазона, если камера и другие модули поддерживают его.
Ответ 2
Обязательно не используйте .jpg изображения. iOS хочет, чтобы вы использовали .png изображения. У меня было такое же предупреждение/ошибка в Swift 4 и XCode 9 Beta.