20

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

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

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

但要创建 SurfaceTexture,我需要将 openGl 纹理 ID 传递给构造函数。不幸的是,纹理 ID 不可用(RenderScript 使用分配类来加载纹理,它不会暴露纹理 ID)。所以我在使用 RenderScript 时无法创建 SurfaceTexture。

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

所以我的问题是:是否可以将 SurfaceTexture 与 RenderScript 结合使用,或者是否有其他有效的方法可以在 RenderScript 图形脚本中使用实时摄像机流?

4

1 回答 1

1

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

我看到两个解决方案:

  1. 实现你自己的RSTextureView,它继承自SurfaceTexture.OnFrameAvailableListener。将您的视图注册为SurfaceTexture回调。每次相机流更新您的表面视图时,您RSTextureView都会收到通知,您可以按照自己的方式进行处理。

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

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

于 2012-06-25T12:54:18.310 回答