2015-05-26 68 views
1

我正在尝试将过滤器(如Instagram的过滤器)应用于现有视频。使用GLSurfaceView呈现视频

我使用GLSurfaceView来显示视频帧,并希望通过对传入帧应用特定的过滤器来渲染每个帧的onDrawFrame()。

但在里面onDrawFrame()我怎么能得到传入的帧?

谢谢。

回答

1

这取决于您希望过滤器如何工作。

如果您希望OpenGL ES修改像素,可以使用片段着色器like this进行过滤。

如果您只是想将静态图像叠加在视频帧的顶部,您可以将帧播放到SurfaceTexture中,然后渲染与位图混合的帧(再次使用GLES)。

Grafika有各种例子; “来自相机的纹理”活动可能是一个很好的起点。 Grafika中的其他活动如果要保存输出(尽管在Android 5.x中,您可以使用MediaRecorder代替),它将演示如何使用MediaCodec记录GLES渲染。

FWIW,我会推荐使用普通的SurfaceView,而不是GLSurfaceView,因为EGL管理可能会有点痛苦。

+0

谢谢。我将改变即将到来的帧的像素。我会看看你指出的。至于GLSurfaceView,我听说它提供了更简单的方法来使用OpenGL ES,但SurfaceView很难使用。真的吗? – user2326258

+0

GLSurfaceView是SurfaceView的包装。它处理EGL设置并管理渲染器线程。对于一个简单的GLES应用程序,很高兴为您完成这些工作,但如果您操纵图像并录制它们,它有时会妨碍您的工作。 – fadden

+0

感谢您的回答。 – user2326258