使用MediaCodec编码器读取由Renderer处理的帧

时间:2019-03-28 14:38:12

标签: android opengl-es android-camera2 egl

当前,我正在使用Camera2 API,并已设法将摄像机帧处理移至OpenGL上下文(当前仅用于预览);为此,我将Renderer绑定到GlTextureViewGlSurfaceView的克隆,但从TextureView扩展而来),创建一个SurfaceTexture,当我想显示预览-我只是将一个Surface实例传递到已经提到的SurfaceTexture的构造函数中,并将其提供给createCaptureSession实例的CameraDevice方法。

但是当我想使用Renderer编码器记录MediaCodec对象正在处理的帧时,就会出现问题。

据我所知-我必须将与EglContext的{​​{1}}对应的Renderer与创建的表面纹理ID一起传递给编码线程,然后创建一个Thread“代理”,它将映射到SurfaceTexture已经渲染的相同纹理。

但是令我困惑的是如何实际绑定 RendererMediaCodec:在GPUVideo项目中,纹理ID只是传递给了视频编码外观对象来自SurfaceTexture,而固有的OpenGL程序(顶点着色器和片段着色器对)可以工作并重新处理纹理,再次重复Renderer已经执行的所有步骤。

Grafika的作用几乎相同:视频记录系统使用它自己的OpenGL程序,并使用Renderer重绘场景。

我的问题是,为什么这些项目中的编码器使用固有的OpenGL程序来处理纹理,以及是否有可能在GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, firstVertex, vertexCount)实例中一次执行一次纹理以提供预览和记录处理?

0 个答案:

没有答案
相关问题