我有一个应用程序,它使用GPUImage的安卓端口作为OpenGL渲染器和几个过滤器的管理器。
它目前没有视频实现,所以我正在尝试调整来自Google grafika存储库的Google grafika存储库来处理GPUImage体系结构。
基类GPUImage管理GLContext和GLSurfaceView,GPUImageRenderer类实现Renderer类。
这就是我试图从格拉菲卡的RenderThread中调整RecordFBOActivity的那个类。有几个问题。
First,在preparegl()方法中,我传递的是SurfaceTexture而不是SurfaceTexture,因为GPUImage根本不使用SurfaceHolder (我认为我可以实现它,但我不想过多地更改基本代码,因为我想将实现推到前面提到的回购)。我知道WindowSurface.java有一个重载的方法,可以从SurfaceTexture和surface构建WindowSurface,但是如果我这样做,mSurface iVar总是空的,因为我从来没有一个曲面可以传递给它,这会导致记录makeCurrent()方法中的NPE。
Second,GPUImage将自己附加到GLSurfaceView上,而不是像grafika示例所使用的SurfaceView,所以我有点不确定是否有任何低层次的不一致,可能会给我造成冲突…
Third,我认为这是主要的问题,至少目前是这样的,我似乎无法调和GPUImage的相机预览和格拉菲卡的WindowSurface。如果我注释掉prepareGl()方法,GPUImage的setUpSurfaceTexture()会从glGenTextures()创建的SurfaceTexture中设置摄像机的预览纹理,预览效果很好。以及连接到过滤器呈现链。但是,如果我试图调用prepareGL()方法,并将完全相同的SurfaceTexture传递给mWindowSurface的构造函数,那么相机服务就会消失,并得到一个EGL_BAD_SURFACE错误。
很长的问题,有几个移动的部分,我知道.将尝试编辑/更新,因为我可以澄清问题和方法自己。但如果有人有任何想法或审讯..。特别@fadden :D
发布于 2014-12-06 17:17:23
我也在努力实现同样的目标,并尝试了法登的建议。试图将CameraSurfaceRenderer功能集成到GPUImageRenderer。预览是好的,但录音只是一个黑色帧的视频。EGL14.eglGetCurrentContext()返回用于以下调用的null,我的猜测是,如果创建了一个新的上下文,它将与GPUImage可能具有的内容不一样
mVideoEncoder.startRecording(new TextureMovieEncoder.EncoderConfig(
mOutputFile, 640, 480, 1000000, EGL14.eglGetCurrentContext()));@Jesses.co.tt你能做到吗?
(因为我不能添加注释,所以它是作为答复添加的)。
https://stackoverflow.com/questions/26984073
复制相似问题