我正在尝试将过滤器(如Instagram的过滤器)应用于现有视频。
我使用GLSurfaceView来显示视频帧,并希望通过对传入帧应用某个过滤器来使用onDrawFrame()渲染每个帧。
但是在onDrawFrame()里面我怎么能得到传入的帧?
感谢。
答案 0 :(得分:1)
这取决于您希望过滤器的工作方式。
如果您想让OpenGL ES修改像素,可以使用片段着色器like this进行过滤。
如果您只想在视频帧的顶部叠加静态图像,可以将帧播放到SurfaceTexture,然后将帧与位图混合(再次使用GLES)。
Grafika有各种例子;来自Camera""纹理活动可能是一个很好的起点。如果您想保存输出,Grafika中的其他活动演示使用MediaCodec录制GLES渲染(尽管在Android 5.x上您可以使用MediaRecorder)。
FWIW,我建议使用普通的SurfaceView,而不是GLSurfaceView,因为EGL管理可能会有点痛苦。