Более быстрый просмотр камеры с помощью OpenGL?

Написание приложения, которое принимает кадры предварительного просмотра с камеры, делает некоторое преобразование к нему, а затем отображает его на экране.

в

public void onPreviewFrame(byte[] data, Camera camera) {} 

Я беру данные yuv2rgb и некоторые пиксельные манипуляции в JNI в другом потоке. Затем я создаю растровое изображение из массива RGB int и рисую его, используя

 canvas.drawBitmap(bmp, 0, 0, null); 

Я получаю около 15-20FPS на HTC Nexus One на 640×480 и 30+ FPS на Samsung Galaxy S II

Мне интересно, могу ли я ускорить процесс, используя рисунок Android OpenGL ES? Я буду следовать этому руководству: http://obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/

Вы используете SurfaceView для своего приложения для камеры? Кадр предварительного просмотра, который вы получаете, представляет собой копию фактического кадра, который отображается на экране. Я предполагаю, что вы добавляете другое представление для отображения кадров предварительного просмотра обратного вызова.

Я не графический парень, но почему бы вам не попробовать SurfaceTexture . Вы можете использовать setpreviewtexture () вместо setpreviewwindow (). Таким образом, Camera Service отправит буферы непосредственно в приложение, вместо того, чтобы делать копию, а также размещать ее в AndroidNativeWindow. Это может улучшить вашу производительность.

Вот как работает приложение Panorama для Android. Здесь вы можете найти исходный код

Реализован OpenGL ES, и он помогает в производительности