我想在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图形脚本中使用实时摄影机流?

最佳答案

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

我看到两个解决方案:

  • 实现您自己的RSTextureView,该代码继承自SurfaceTexture.OnFrameAvailableListener。将您的 View 注册为SurfaceTexture回调。
    每次相机流更新您的表面 View 时,您的RSTextureView都会收到通知,您可以按照自己的方式进行处理。
  • 另一个解决方案是实现自己的RenderScriptGL(仍然继承自SurfaceTexture.OnFrameAvailableListener),并在调用回调时调用setSurfaceTexture

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

    10-06 15:36