将SurfaceTexture与RenderScript结合使用

时间:2012-03-28 13:57:31

标签: android android-camera renderscript

我想在Android上的GPU上进行相机图像处理。

在我目前的设置中,我使用SurfaceTexture从相机图像流中捕获帧作为OpenGL ES纹理。这是在我的着色器中访问相机流的有效方法。 (http://developer.android.com/reference/android/graphics/SurfaceTexture.html

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

但是要创建一个SurfaceTexture,我需要将openGl纹理ID传递给构造函数。遗憾的是,纹理ID不可用(RenderScript使用Allocation类来加载纹理,不会显示纹理ID)。所以我在使用RenderScript时无法创建SurfaceTexture。

我已阅读有关renderscript的所有文档(仍然非常稀疏)并查看了示例,但他们没有关于该主题的信息。

所以我的问题是: 是否可以将SurfaceTexture与RenderScript结合使用,还是有其他一些在RenderScript Graphics脚本中使用实时相机流的有效方法?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您已使用SurfaceTexture。然后,您可以使用setOnFrameAvailableListener注册回调。

我看到两个解决方案:

  1. 实现您拥有的RSTextureView,其继承自SurfaceTexture.OnFrameAvailableListener。将您的视图注册为SurfaceTexture回调。 每次通过相机流更新表面视图时,系统都会通知您RSTextureView,您可以按照自己的方式处理。

  2. 另一种解决方案是实现您自己的RenderScriptGL(仍然继承自SurfaceTexture.OnFrameAvailableListener)并在调用回调时调用setSurfaceTexture

  3. 您应该能够将RenderScriptSurfaceTexture结合使用这两种解决方案中的至少一种。

相关问题