yangjie10930 / OpenGL4Android

OpenGL运用在Android上的Demo,结合Camera和MediaCodec实现预览和渲染,用于实现视频的裁剪,翻转,缩放,滤镜功能。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

大佬,有个合成效率问题请教下

o03150 opened this issue · comments

commented

你的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毫秒左右

commented

额,是我搞错了,重新创建,还是需要makeCurrent,一样耗时