我有一个应用程序使用GPUImage 的 Android 端口作为 OpenGL 渲染器和几个过滤器的管理器。
它目前没有视频实现,因此我正在尝试调整Google grafika 存储库中的 RecordFBOActivity 以与 GPUImage 架构一起使用。
基础 GPUImage 类管理 GLContext 和 GLSurfaceView,GPUImageRenderer 类实现 Renderer 类。
这是我试图从 grafika 的 RecordFBOActivity 改编 RenderThread 的类。有几个问题。
首先,在preparegl()方法中,我传递的是SurfaceTexture而不是Surface,因为GPUImage根本不使用SurfaceHolder(我想我可以实现它,但我尽量不要过多地更改基本代码,因为我想将我的实施推迟到上述回购)。我知道WindowSurface.java具有从SurfaceTexture和 Surface 构造WindowSurface的重载方法,但如果我这样做,mSurface iVar 始终为空,因为我从来没有要传递给它的表面,这会导致 NPE在makeCurrent()记录方法中。
其次,GPUImage将自己附加到GLSurfaceView,而不是像 grafika 示例使用的SurfaceView,所以我有点不确定是否有任何可能导致冲突的低级不一致...
第三,我认为这是主要问题,至少目前,我似乎无法将 GPUImage 的相机预览与grafika的WindowSurface相协调。如果我注释掉prepareGl()方法,则GPUImage的setUpSurfaceTexture()从由glGenTextures()创建的SurfaceTexture设置相机的预览纹理,并且预览工作正常......以及附加到过滤器渲染链. 但是,如果我尝试调用prepareGL()方法,并将完全相同的SurfaceTexture传递给mWindowSurface的构造函数,相机服务停止,我收到EGL_BAD_SURFACE错误。
很长的问题,有一些移动的部分,我知道......将尝试编辑/更新,因为我可以澄清自己的问题和方法。但是如果有人有任何想法/审讯,我会很高兴......特别是@fadden:D