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类图如下。

相关推荐
线束线缆组件品替网15 小时前
Amphenol ICC RJE1Y22610C42401线束组件应用解析
网络·数码相机·智能手机·计算机外设·电脑·电视盒子
LongtengGensSupreme16 小时前
C#图像内存高速拷贝:使用Marshal.AllocHGlobal与ArrayPool实现内存拷贝的几个方法
开发语言·数码相机·c#
、我是男生。20 小时前
激光切割机——相机焦点——激光焦点
数码相机
最爱老式锅包肉21 小时前
HarmonyOS技术精讲-Camera Kit(相机服务)第3篇:实现相机预览功能
数码相机·华为·harmonyos
是摆烂第一名呀21 小时前
RK3576+GMSL摄像头底层适配与调试
linux·arm开发·驱动开发·嵌入式硬件·数码相机
wuhanzhanhui1 天前
从 3D 建模到高光谱2026 武汉机器视觉展会|工业相机展会洞见感知力量新高度
数码相机·3d
m0_617493941 天前
Python OpenCV 亚像素角点检测(cornerSubPix)详解与实战
python·数码相机·opencv
3DVisionary2 天前
单目高速DIC如何啃下精密件微米级高频振动这块“硬骨头“
数码相机·航空发动机微型叶片·mems器件·pcb与电子封装·精密钟表/齿轮·微纳加工件·全尺寸3d检测
_helen_5202 天前
【第3篇】自定义飞机关键点标注数据获取
数码相机
中达瑞和-高光谱·多光谱2 天前
跨越波段盲区,获取多维信息:全波段光谱相机能解决什么?
数码相机