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

相关推荐
8K超高清15 小时前
回望2025,纷呈超清智能科技影像世界
网络·人工智能·科技·数码相机·智能硬件
ballball~~17 小时前
ISP-AWB(Auto White Balance 白平衡)
图像处理·数码相机·算法
JMchen12318 小时前
Android CameraX深度解析:从Camera1到CameraX的相机架构演进
android·java·数码相机·架构·kotlin·移动开发·android-studio
PHOSKEY1 天前
光子精密3D工业相机实现3C/汽车/半导体连接器pin针高效质检
数码相机·3d·汽车
Piar1231sdafa2 天前
【计算机视觉 01】传送带煤炭识别与计量:基于RPN-X101-FPN模型的输煤量检测系统_1
人工智能·数码相机·计算机视觉
一起养小猫2 天前
Flutter for OpenHarmony多媒体功能开发完全指南
数码相机·flutter
labview_自动化2 天前
线扫相机记录
数码相机
gaosushexiangji2 天前
基于 sCMOS 相机的单分子荧光成像及双螺旋布朗运动追踪研究
数码相机
_李小白3 天前
【Android 美颜相机】第二十一天:GPUImageChromaKeyBlendFilter (颜色加深混合滤镜)
android·数码相机
_李小白3 天前
【Android 美颜相机】第二十天:GPUImageColorBlendFilter(颜色混合滤镜)
android·数码相机