大佬,有个合成效率问题请教下
o03150 opened this issue · comments
你的demo原代码(MP4Processor类):
mEGLHelper.setSurface(mOutputSurface);//这里传入编码器内部创建的输出surface
实际合成时间32秒左右
我改了代码:
mEGLHelper.setSurface(new SurfaceTexture(1));//这里不直接传入编码器的surface
在GLThread循环中,绘制之前调用以下代码:
mEglWindowSurface = mEGLHelper.createEGLWindowSurface(mOutputSurface);//这里才传入编码器的 surface,相当于又重新创建一个EGLSurface,
mEGLHelper.setEGLSurface(mEglWindowSurface);//然后调用set方法重置EGLSurface
mRenderer.draw(mVideoTextureId);//最后才开始渲染
结果: 通过以上改法,其他条件不变,但合成效率提升一半,平均16秒左右
问题: 为什么一开始传入输出surface效率低,要先new SurfaceTexture(1),再重新创建EGLSurface,反而效率提升?
我测试是mEGLHelper.swapBuffers();这个方法耗时,源代码每次调用需要几十毫秒,修改后平均2毫秒左右
额,是我搞错了,重新创建,还是需要makeCurrent,一样耗时