首页 文章

将SurfaceTexture与RenderScript结合使用

提问于
浏览
20

我想在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 回答

  • 1

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

    我看到两个解决方案:

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

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

    您应该能够将 RenderScriptSurfaceTexture 与这两个解决方案中的至少一个结合起来 .

相关问题