2012-06-28 57 views
4

编写一个从相机拍摄预览帧的应用程序会对其进行一些转换,然后将其显示在屏幕上。使用OpenGL更快的相机预览?

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

我拿数据做YUV2RGB和在另一个线程的JNI一些像素处理。然后,我从RGB int数组创建位图和使用

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

我避开15-20FPS对HTC的Nexus One为640x480和30 + FPS的三星Galaxy S II

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

回答

2

实现的OpenGL ES,它确实与性能

+0

嘿,我知道这是旧的,但也许你可以帮助我?我正在研究相机应用程序,并试图找到有关如何实施OpenGL ES以提高性能的资源? –

+0

你能更具体地说明你需要什么吗? – tomi

+0

基本上我只是想通过opengl实现相机预览。通过GLSurfaceView。然后,我将使用它来使用户拍摄照片。我想它与SnapChats和Instagrams相机功能的工作方式类似吗? –

4

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

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

这就是android相机应用Panorama的工作原理。你可以找到源代码here

+0

帮助不幸的是,表面纹理仅仅是API> = 11。这个应用程序开发API9 + – tomi