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.