到目前为止,使用MediaCodec
生成视频的大多数代码都使用纯OpenGL
或从 MediaCodec生成的 Surface锁定Canvas并对其进行编辑。我可以将它们混合使用吗?
例如,如果我以后一种方式生成框架,是否可以在编辑Surface之前或之后在 MediaCodec生成的 Surface上应用 Fragment Shader 帆布?
答案 0 :(得分:1)
Surface是生产者 - 消费者对的生产者端。一次只能连接一个生产者,因此您不能在同一个Surface上使用GLES和Canvas,而无需断开连接并连接另一个。
最后我检查过(Lollipop)没有办法断开画布。所以不可能来回切换。
您需要做的是:
glTexImage2D()
将渲染的位图上传到GLES。与上传相关的开销是不可避免的,但请记住,您可以以较小的分辨率绘制位图,并让GLES对其进行扩展。因为您绘制的是Bitmap而不是Surface,所以没有必要为每次更新重绘整个屏幕,因此有机会减少Canvas渲染开销。
无论Surface连接的是什么,上述所有内容都可以保存 - 可以是MediaCodec,SurfaceView,SurfaceTexture等。