Синхронизируйте ImageReader и SurfaceTexture с выходом Android Camera2 - PullRequest
0 голосов
/ 14 декабря 2018

ImageReader и SurfaceTexture асинхронны со стороны приложения.SurfaceTexture.OnFrameAvailableListener и ImageReader.OnImageAvailableListener приходят в разное время.

Теперь я сделаю приложение AR.Я вычисляю движение объекта с помощью изображения из ImageReader и выводю информацию о движении объекта.С другой стороны.Звоните updateTexImage, чтобы сделать фон.Но вопрос в том, что движение объекта явно задерживается за фоновым рендерингом.

Рабочий процесс представлен ниже:

Camera2-> ImageReader-> Расчет движения объекта -> Визуализация виртуального объекта с информацией о движении объекта

Camera2-> SufaceTexture-> Визуализация фонас updateTexImage

upateTexImage и рендеринг-виртуальный объект вызывается в Render.onDrawFrame

Итак, очевидно, вопрос заключается в том, как синхронизировать ImageReader и SurfaceTexture с выходом Android Camera2

1 Ответ

0 голосов
/ 14 декабря 2018

Самый простой вариант - не использовать два пути данных, а вместо этого либо выполнять анализ изображения в буфере SurfaceTexture (либо в EGL, либо считывать данные с GPU в CPU для анализа), либо использовать буфер ImageReader для рисования всего с помощью.

Если это невозможно, вам нужно посмотреть на временные метки (https://developer.android.com/reference/android/graphics/SurfaceTexture.html#getTimestamp() и https://developer.android.com/reference/android/media/Image.html#getTimestamp()).. Для одного и того же захвата два пути будут иметь одинаковую временную метку, поэтому вы можете поставить в очередьи синхронизировать ваш окончательный рисунок, сопоставляя их.

...