Пиксели m_videoOverlayTextureY недопустимы, но текстура корректно отображается с помощью GUI.DrawTexture.

Я пытаюсь получить изображение YUV с камеры, но когда я пытаюсь прочитать пиксели в YUVTexure предоставлено GetVideoOverlayTextureYUV() все пиксели установлены на "205". Странная вещь, я могу нарисовать текстуру 'Y' сGUI.DrawTexture(someRect, _texture.m_videoOverlayTextureY); и я вижу изображение там, я просто не могу прочитать его с getPixels(),

Я также использую Tango AR Camera сборный в проекте так m_useExperimentalVideoOverlay установлен в true. Мы попытались использовать неэкспериментальный API, но затем префаб AR Camera перестал работать.

Как кто-либо был в состоянии получить доступ к данным изображения в Unity, используя IExperimentalTangoVideoOverlay?

1 ответ

Решение

Текстура от GetVideoOverlayTextureYUV отличается от обычного Unity Texture2D. В Tango Unity SDK он создает объект Texture2D на уровне Unity и передает textureID в собственный API C++ для заполнения. Таким образом, значение пикселя текстуры не сохраняется в Unity, вместо этого оно копируется в память GPU непосредственно из собственного кода, а текстура Unity имеет только textureID этого объекта. Вот почему это может быть вынесено, но не может быть прочитано.

Чтобы получить реальный байтовый буфер от цветной камеры, вы должны использовать интерфейс ITangoVideoOverlay. Обратный вызов возвращает буфер YUV, функция преобразования в RGB такая же, как в YUV2RGB.shader.

Другие вопросы по тегам