2012-03-28 122 views
20

我想在android上的GPU上進行相機圖像處理。將SurfaceTexture與RenderScript結合使用

以我目前的設置我使用表面紋理以捕獲來自攝像機圖像流作爲一個OpenGL ES紋理幀。這是在我的着色器中獲取相機流的有效方法。現在(http://developer.android.com/reference/android/graphics/SurfaceTexture.html

我想開始使用新的renderScript API,而不是直接OenGL ES的使用。 (http://developer.android.com/guide/topics/renderscript/index.html

但要創造一個表面紋理,我需要OpenGL的紋理ID傳遞給構造。不幸的是,紋理ID是不可用的(RenderScript使用Allocation類來加載紋理,它不公開紋理ID)。所以我無法在使用RenderScript時創建SurfaceTexture。

我已閱讀上的renderScript所有文檔(這仍然是相當稀疏),並看了看樣品,但他們對這個問題的任何信息。

所以我的問題是: 是否有可能將SurfaceTexture與RenderScript結合使用,還是有其他一些有效的方法來使用RenderScript圖形腳本中的實時相機流?

回答

1

如果我理解正確的話,你已經在使用SurfaceTexture。然後您可以用setOnFrameAvailableListener註冊一個回叫。

我看到兩個解決方案:

  1. 實現你自己的RSTextureView,從SurfaceTexture.OnFrameAvailableListener繼承。將您的視圖註冊爲SurfaceTexture回調。 每次通過相機流更新表面視圖時,您的RSTextureView都會收到通知,您可以按照自己的想法進行處理。

  2. 另一種解決辦法是實現自己的RenderScriptGL(仍然SurfaceTexture.OnFrameAvailableListener繼承),並調用setSurfaceTexture回調時被調用。

你應該能夠RenderScriptSurfaceTexture這兩個解決方案中的至少一個結合。

+0

我很欣賞答案,但自從發佈這個問題後,我決定使用GLSL作爲我的應用程序。這是因爲我找不到一個簡單的方法來使它工作,最近因爲renderscript圖形部分將在4.1(Jelly Bean)中折舊。所以我沒有自己測試這個。所以對於這個線程的其他追隨者:我接受這個答案,因爲它接縫合理,但我沒有實現。 – Arjan 2012-07-09 08:21:23