Android基于共享texture(surfaceTexture)实现glSurfaceView高效camera预览

    处理和渲染视频需要较高的性能,而移动端的cpu性能有限,所以在处理和渲染视频的时候尽量要用gpu的能力,在移动设备里主要是opengles api的使用,今天主要想介绍一下通过共享texture(surfacetexture)来实现Android camera的高效预览。

    在本文中主要介绍Android camera预览,用opengl shader对camera数据进行简单的对比度处理,然后在glSurfaceView预览,其中避免直接操作yuv裸数据,通过共享texture完成数据传递,大致原理图见下:

    


    本方案的思路就是camera预览不采用直接到View和数据回调的方式,而是采用setPreviewTexture方式,将camera数据预览到surfaceTexture,surfaceTexture由于opengl 中texture关联,数据准备好后surfaceTexture中onFrameAvailable回调通知Render开始处理,通过updateImage将surfaceTexture数据更新到texture,然后进行处理,最后显示到glSurfaceView上。

    Demo资源下载:https://download.csdn.net/download/cmshao/10371209 

    Demo中实现了一个类MyGLSurfaceView,继承自GLSurfaceView,实现GLSurfaceView.Render和SurfaceTexture.OnFrameAvailableListener接口,GLSurfaceView rendermode位RENDERMODE_WHEN_DITY,靠onFrameAvailable中调用requestRender驱动,texture绑定需要GLES11Ext.GL_TEXTURE_EXTERNAL_OES类型,Fragement中需要声明extension GL_OES_EGL_image_external : require。

    引用参考链接:

    https://developer.android.com/training/graphics/opengl/index.html

    https://github.com/muojie/PlayCamera_V3.0.0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值