Urho3D
GameDev.ru / Сообщества / Urho3D / Форум / Как получить доступ к видеопотоку с камеры в Android?

Как получить доступ к видеопотоку с камеры в Android?

Поделиться
AlexS32Пользовательwww21 авг. 201721:56#0
Добрый день.
Собственно ситуация такая. С Urho3d только начал знакомится, но как всегда что-то нужно срочно сделать.
В настоящий момент стоит такая задача - заграбить поток с хардварной камеры Android устройства, и после некоторой обработки (пусть например черно-белым сделать) отобразить как видео-текстуру.
Интересует хотя бы направление поиска, т.к. в текущий момент не могу понять с какой стороны заходить.
Все что есть это camera2 и связанный с ней  ImageReader в событии которого onImageAvailable имею доступ к текущему фрейму.
Ограничения по Android: minSDK 21.
ZamirПостоялецwww21 авг. 201722:22#1
Urho3d + андроид, здесь никто не применяет кажись...
А если речь идет о UrhoSharp, то здесь есть пример https://github.com/xamarin/urho-samples
codingmonkeyПостоялецwww21 авг. 201722:45#2
Здравствуйте, попробуйте продублировать тему на офф.cайте Urho3D(https://discourse.urho3d.io/), это увеличит шансы на получение хоть какого-то фидбека по данному вопросу

> Интересует хотя бы направление поиска

+ Показать

Правка: 21 авг. 2017 22:47

NaggПостоялецwww21 авг. 201723:02#3
О, мы тоже с GLoom тут задаемся этим вопросом :-)
В iOS как-то проще получилось.
Но в целом в ведре должно быть тоже самое - получаем YUV с камеры и рисуем их в текстуру шейдерком, в случае формата ios это https://github.com/EgorBo/ARKitXamarinDemo/blob/master/ARKitXamar… mebuffer.glsl
если сделаешь для андроида - пошарь плз :-)
GLoomПостоялецwww21 авг. 201723:56#4
Zamir
Я применяю! Это для меня платформа #2 после PC.

AlexS32
У меня есть план как это сделать. Можешь на меня как то выйти (Скайп, дискорд) чтоб я рассказал что нужно сделать?

ZamirПостоялецwww22 авг. 20170:04#5
GLoom
> Это для меня платформа #2 после PC.
Для меня тоже, но мы юзаем чз урхошарп, я об этом
GLoomПостоялецwww22 авг. 20170:13#6
А, ок. Но там в любом случае надо пробросить external textures в api urho3d сначала.
AlexS32Пользовательwww22 авг. 201717:30#7
Добрый день.
Спасибо за советы. Буду экспериментировать. Пока главным остается вопрос - можно ли как-то "достучаться" до Урхи в обход SDL
AlexS32Пользовательwww25 сен. 201716:33#8
День добрый.

Код пока пошарить не могу, но, в целом, получилось примерно так (в Android использовал camera2, соответственно minSDK=21):
Главный поток Urho3d:
1. Создаем "экран": StaticModel c Plane.mdl
2. Для экрана создаем нужных нам размеров динамическую текстуру
3. Создаем буфер в котором храним последний полученный с камеры кадр
4. Каждое E_UPDATE проверяем изменилось ли содержимое (я использовал тупо флаг)
5. Если содержимое изменилось, то записываем его в текстуру и сбрасываем флаг обновления.

Поток камеры Android
1. Полученный Image c камеры при помощи RenderScript конвертим из YUV в RGB и соответственно ротейтим
2. Кладем полученные данные в буфер
3. Устанавливаем флаг обновления текстуры

GLoomПостоялецwww25 сен. 201716:36#9
Сильно медленно работает на глаз если сравнивать с приложениями вроде встроенной камеры?
AlexS32Пользовательwww25 сен. 201717:16#10
Нет, не сильно (на Galaxy S7). Есть некоторая плавность, но я думаю вполне оптимизируемо - сейчас код никак не назовешь идеальным.
Разрешение 640х480

Правка: 25 сен. 2017 17:17

ZamirПостоялецwww25 сен. 201717:35#11
GLoom
> Полученный Image c камеры при помощи RenderScript конвертим из YUV в RGB и соответственно ротейтим
А как камеру (де)активируешь?
AlexS32Пользовательwww25 сен. 201718:16#12
За основу взял этот пример: https://github.com/googlesamples/android-Camera2Basic
ZamirПостоялецwww25 сен. 201722:04#13
AlexS32
> За основу взял этот пример
В урхошарпе к нейтив функциям телефона осущ. через xamarin, в плюсах понятия не имею... Если в первом случае, есть связка камеры с рендером урха, м.б.(наверняка!) и в плюсах возможно такое, не знаю как Nagg провернул сие, но вряд ли через буфер и прочие лисапеды)
AlexS32Пользовательwww25 сен. 201723:45#14
В принципе согласен. Например для конвертации цвета он использует сразу рисующий шейдер. Надо разбираться. Но есть проблема в межпотоковом взаимодействии. Камера работает в своем потоке, а урха в своем. И просто так получив кадр от камеры сказать что его нужно рисовать - не получается.
Я опирался на то, как обработка клавиш сделана - главный поток урхи проверяет что нажато и соответственно реагирует.

/ Форум / Urho3D - игровой движок / ЗАДАВАЙТЕ ВОПРОСЫ

2001—2017 © GameDev.ru — Разработка игр