使用OpenGL更快的相机预览?

时间:2012-06-28 14:24:33

标签: android opengl-es android-camera

编写一个从相机中获取预览帧的应用程序会对其进行一些转换,然后将其显示在屏幕上。

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

我把数据做yuv2rgb和另一个线程中的JNI中的一些像素操作。然后我从RGB int数组创建位图并使用

绘制它
canvas.drawBitmap(bmp, 0, 0, null);

我在HTC Nexus One上获得了大约15-20FPS的640x480和三星Galaxy S II上的30+ FPS

我想知道我是否可以通过使用Android OpenGL ES进行绘图加快速度? 我会遵循这个指南: http://obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/

2 个答案:

答案 0 :(得分:4)

您是否将SurfaceView用于相机应用程序?您获得的预览框架是屏幕上显示的实际框架的副本。我猜你添加另一个视图来显示回调预览帧。

我不是一个图形人,但你为什么不尝试SurfaceTexture。您可以使用setpreviewtexture()而不是setpreviewwindow()。这样,Camera Service会将缓冲区直接发送到应用程序,而不是制作副本并将其排队到AndroidNativeWindow。这可能会提高您的表现。

这是android Camera app Panorama的工作原理。您可以找到源代码here

答案 1 :(得分:2)

实施OpenGL ES,它确实有助于提高性能