2012-06-28 68 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