Android相机API2,基于GLSurfaceView+SurfaceTexture实现相机预览,集成的相机算法采用GPU方案,简要说明

Android相机API2,基于GLSurfaceView+SurfaceTexture实现相机预览,集成的相机算法采用GPU方案,简要流程如下(不叠加相机算法的预览显示流程也大体如此,只是去掉了算法部分):

进入相机:

1,新建实现了GLSurfaceView.Renderer接口的自定义类CameraRenderer,初始化GLSurfaceView,将两者绑定在一起,GLSurfaceView作为View组件来显示相机预览;

相机启动:

1,在起预览配流时,创建SurfaceTexture,用它来接收相机预览数据;

OpenGL初始化:

1,在Surface创建时会触发回调CameraRenderer.onSurfaceCreated,在里面获取当前的GLSurfaceView的EGLContext,并将其传递给相机算法,使得允许相机算法和GLSurfaceView共享GPU资源;

循环渲染:

1,当有预览帧来时,触发回调SurfaceTexture.OnFrameAvailable,在里面调用glSurfaceView.requestRender进行重绘;

2,glSurfaceView.requestRender中释放锁唤醒GLThread的线程执行,里面循环检查是否需要进行绘制,需要的话就调CameraRenderer.onDrawFrame;

3,onDrawFrame中调surfaceTexture.updateTexImage,将最新的相机预览帧数据更新到SurfaceTexture内部的纹理中;

4,调算法处理接口,输入纹理ID,输出也是纹理ID;

5,将这个纹理ID作为数据源,绘制到GLSurfaceView上,至此预览完成这一帧显示;后续重复"循环渲染"的步骤;

总结:

1,创建GLSurfaceView,这个作为View组件显示相机预览;

2,在相机起预览配流时,创建SurfaceTexture,用来接收相机预览数据;

3,OpenGL要初始化;

4,最后就是循环绘制的流程,当有预览帧来时,触发回调SurfaceTexture.OnFrameAvailable,在里面触发重绘,更新最新预览数据到SurfaceTexture内部纹理中,将纹理ID输入算法进行处理,算法处理后输出更新后的纹理ID,最后将这个纹理ID作为数据源绘制到GLSurfaceView上;

UML类图如下。

相关推荐
AomanHao18 小时前
【ISP】提升工业相机图像亮度,改善画面暗
数码相机·工业相机
LongJ_Sir3 天前
Cesium--Primitive随相机高度缩放的实现
数码相机
Hi202402173 天前
如何实现xtreme1与Apollo相机外参的双向转换
数码相机·标定·相机外参
sali-tec3 天前
C# 基于halcon的视觉工作流-章66 四目匹配
开发语言·人工智能·数码相机·算法·计算机视觉·c#
gaosushexiangji4 天前
sCMOS相机Gloria 6504 工作模式与行时间详解
数码相机
fengfuyao9854 天前
光场相机成像系统与普通相机二维成像的模拟方法详解
数码相机
格林威4 天前
多相机拼接:消除重叠区域的6个核心方法,附OpenCV+Halcon实战代码!
人工智能·数码相机·opencv·计算机视觉·机器人·视觉检测·制造
合方圆~小文6 天前
双变焦摄像头实现双画面监控的原理
数据库·人工智能·数码相机·模块测试
_李小白6 天前
【Android FrameWork】延伸阅读:Camera2与V4L2CameraHAL
android·数码相机
_李小白6 天前
【Android FrameWork】延伸阅读:Camera1、Camera2 与CameraX
android·数码相机