Android OpenGLES视频模糊,毛玻璃效果

tech2024-03-16  75

最近帮朋友做了个给视频加模糊的功能,毛玻璃效果,思路很简单,首先要先知道哪些参数能修改模糊度,我在动态调节模糊里说了sigma,blurRadius和图片尺寸都会影响模糊效果,在画面清晰时sigma对模糊的效果影响特别小,而blurRadius必须很大的时候才能达到效果,可是blurRadius太大会照成视频卡顿,所以最简单的方法是先降低画面尺寸,在设置blurRadius和sigma。

思路有了,接下来是原理,缩小画面尺寸,先想到的应该是改变视频的长宽,但我们不能去改原文件的长宽,所以只能对解码出来的视频画面进行缩小,这里我们就用到了opengl的fbo,讲真的fbo是真好用

首先创建一个缩小视频的frameBuffer和一个模糊用的frameBuffer

GLES20.glGenFramebuffers(frameBuffers.length,frameBuffers,0);

在frameBuffer绑定纹理时设置纹理大小,这样就可以更改视频画面的大小了

GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frameBuffers[0]); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]); GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width, height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, null); GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, textures[0], 0); GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);

然后把视频渲染进这个frameBuffer内,这时的视频画面的大小就会变成上边绑定的纹理大小,接下来就是进行模糊处理,最后将模糊后的画面渲染到屏幕上

下边是调节参数用的SeekBar

写文章越来越不走心了,还是贴demo吧

GitHub

 

最新回复(0)