2015-03-04 5 views
0

Я пытаюсь отобразить свои кадры камеры в Android и использовать холст, растровое изображение, onDraw(), чтобы отображать кадры на моем Surfaceview. Однако моя производительность кода, которая делает рендеринг на родной стороне, занимает до 70% моего процессора. Скорость рендеринга хороша, но потребление процессора плохое. Проблема в том, что у меня есть еще один наложенный вид поверхности (surfaceview2), чтобы отображать что-то еще, пока я снимаю и снимаю камеру. Мне было интересно, как я могу уменьшить потребление процессора и использовать gpu больше или т. Д. Возможные решения до сих пор: a) используя opengl для рисования моих кадров на поверхности, но ограниченные ресурсы и коды образцов b) с использованием родной стороны к нарисуйте мои рамки, но ограниченные ресурсы такжеРамка для фотоаппарата для Android

Кто-нибудь знает, как я могу выполнить YV12 в rbg, используя вышеприведенные методы?

+0

Это тот же проект, что и http://stackoverflow.com/questions/28706700/? Что ты пытаешься сделать? Похоже, вы отправляли его прямо в SurfaceView или TextureView из ответа там; что вы пытаетесь сделать здесь? – fadden

+0

Fadden, у меня есть Surfaceview1, который показывает что-то и Surfaceview2 (наложенная поверхность), которая делает захват камеры. Я хочу захватить кадры из своей камеры и сделать их. Я использовал собственный код, который был хорош, но процент моего процессора вырос. Я ищу решение для снижения использования процессора. Я не мог найти ничего особенного в этом вопросе на Opengl. Считаете ли вы, что openGl является решением. Не работает ли с помощью native? –

+1

«OpenGL ES» и «native» не являются синонимами. Как отмечено в ответе Isogen74, данные камеры можно рассматривать как «внешнюю» текстуру. Это используется в нескольких действиях в Grafika (https://github.com/google/grafika), таких как «текстура с камеры». Grafika не использует какой-либо собственный (NDK) код в самом приложении. – fadden

ответ

0

Многие современные графические процессоры могут декодировать YUV изначально; проблема заключается в том, как получить поверхность YUV в OpenGL ES, поскольку это обычно не то, что Open GL ES делает ...

Большинство операционных систем (Android в комплекте) позволяют импортировать внешние поверхности в OpenGL ES через расширение EGL_image_external, и эти внешние поверхности могут быть обозначены как бытие YUV.

Единственная проблема заключается в том, что я не совсем уверен, как это работает на стороне Android (извините), поэтому кому-то придется ответить на это. Я знаю только драйвер видеокарты - просто знайте, что это возможно на большинстве современных мобильных графических процессоров.

+1

Если вам интересно, механизм Android - «SurfaceTexture». Система описана здесь: https://source.android.com/devices/graphics/architecture.html – fadden

Смежные вопросы