2013-05-13 1 views
0

Я строй приложения AR на Android с некоторой обработкой изображений, как я обращаться с камерой, что я создаю поддельную поверхность:Как улучшить с помощью Android камеру с некоторой обработкой изображений

 SurfaceView view = new SurfaceView(context); 
     camera.setPreviewDisplay(view.getHolder()); 

Затем используйте setPreviewCallbackWithBuffer, чтобы получить буферы камеры и отправить буфер в некоторый общий буфер, используя System.arraycopy(data, 0, Buffer.m_data, 0, data.length);, где, как и Buffer.m_data, я использую основную деятельность.

В моей основной деятельности я бы запустить цикл, получить общий буфер, отправить его на мою NDK коды, получить его обратно, а затем отобразить его как изображение:

if(m_bitmap == null){ 
    m_bitmap = Bitmap.createBitmap(m_width, m_height, Bitmap.Config.ARGB_8888); 
} 
m_bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(m_imData.m_data)); 

img.setImageBitmap(m_bitmap); 

Где, как img является ImageView который показывает обработанный буфер.

Все это работает ДЕЙСТВИТЕЛЬНО медленно. Я считаю, что часть проблемы заключается в том, как я работаю с камерой.

Не могли бы вы заметить проблему?

Спасибо!

+0

Обновление растрового изображения на 'ImageView' * является чрезвычайно медленным процессом, поэтому я не уверен, что проблема исходит от камеры. – mbrenon

+0

Мысль так: как бы вы показывали изображение без использования ImageView? – Roman

+1

Если вы нацелены на производительность, и если обработка, которую вы делаете в части NDK, поддерживает массивную параллелизацию, вы можете использовать аппаратное ускорение рендеринга. Вместо отображения с помощью 'setPreviewDisplay' используйте' setPreviewTexture' и выполняйте обработку в шейдере OpenGL. Другим вариантом может быть использование [Renderscript] (http://developer.android.com/guide/topics/renderscript/compute.html). Я никогда не пробовал, хотя ... – mbrenon

ответ