Использование SurfaceTexture в сочетании с RenderScript
Я хочу обработать изображение на графическом процессоре на Android.
В моей текущей настройке я использую SurfaceTexture для захвата кадров из потока изображения камеры в виде текстуры OpenGL ES. Это эффективный способ получить поток камеры, доступный в моих шейдерах. (http://developer.android.com/reference/android/graphics/SurfaceTexture.html)
Теперь я хотел бы начать использовать новый API RenderScript вместо прямого использования OenGL ES. (http://developer.android.com/guide/topics/renderscript/index.html)
Но для создания SurfaceTexture мне нужно передать OpenGl Texture ID конструктору. К сожалению, идентификатор текстуры недоступен (RenderScript использует класс Allocation для загрузки текстур, который не отображает идентификатор текстуры). Поэтому я не могу создать SurfaceTexture при использовании RenderScript.
Я прочитал всю документацию по renderscript (который все еще довольно разрежен) и посмотрел образцы, но у них нет информации по этому вопросу.
Итак, мой вопрос:
Можно ли использовать SurfaceTexture в сочетании с RenderScript или существует какой-то другой эффективный способ использования потока живой камеры в RenderScript Graphics script?
Ответы
Ответ 1
Если я правильно понимаю, вы уже используете SurfaceTexture
. Затем вы можете зарегистрировать обратный вызов с помощью setOnFrameAvailableListener.
Я вижу два решения:
-
Реализует собственный RSTextureView
, который наследует от SurfaceTexture.OnFrameAvailableListener. Зарегистрируйте свое мнение как обратный вызов SurfaceTexture
.
Каждый раз, когда ваш поверхностный вид обновляется потоком камеры, ваш RSTextureView
будет уведомлен, и вы сможете обрабатывать его так, как хотите.
-
Еще одно решение - реализовать собственный RenderScriptGL
(все еще наследуемый от SurfaceTexture.OnFrameAvailableListener
) и вызвать setSurfaceTexture, когда вызывается обратный вызов.
Вы можете объединить RenderScript
с SurfaceTexture
с помощью хотя бы одного из этих двух решений.