PC-相机缓存机制介绍
[TOC]
相机拍照时底层C++缓存介绍。
SDK概要结构
盛相相机SDK结构大体如下图所示:
缓存大小计算
相机曝光结束后,PC与相机进行数据通信的过程中,相机所拍摄图像数据信息存在于一组Byte数组中,此数组是存放在C++驱动层中向PC操作系统申请的一段大小固定的内存空间的缓存中。缓存计算公式如下:
BufferSize = BufferBase * BufferRate
BufferSize 单位为Byte
其中,BufferRate值是在调用相机构造方法时传递,默认值为1。BufferBase是在C++驱动层中根据操作系统类型与相机CMOS分辨率大小而设置的固定值,具体关系如下:
X86系统-->128MByte;
X64系统-->相机CMOS分辨率大于500MP-->1GByte
X64系统-->相机CMOS分辨率小于500MP-->0.5GByte
单台相机缓存大小举例:
相机像素 | OS类型 | BufferRate | BufferBase(MByte) | BufferSize(MByte) |
---|---|---|---|---|
280万 | X86 | 1 | 128 | 128*1=128 |
280万 | X64 | 1 | 500 | 500*1=500 |
800万 | X86 | 1 | 128 | 128*1=128 |
800万 | X64 | 1 | 1000 | 1000*1=1000 |
1600万 | X86 | 1 | 128 | 128*1=128 |
1600万 | X64 | 1 | 1000 | 1000*1=1000 |
1600万 | X86 | 2 | 128 | 128*2=256 |
1600万 | X64 | 2 | 1000 | 1000*2=2000 |
缓存重用
相机缓存轮替机制介绍:
相机在多次拍照的过程中,随着拍照次数的增加,当相机当前拍照返回数据大小与先前拍照累加数据大小大于向系统申请的固定大小空间的内存时,当前拍照数据将会从缓存队列的起始地址开始写入,将导致存在与缓存队列队首位置的相机数据被覆盖。
注:在拍照开始后,如需保存/处理图像数据,保存/处理速率应大于相机拍照速率,否则相机图像数据将从缓存队首开始逐渐被新增图像数据覆盖。
现以1600万像素(5328x3040)相机在x64系统下,BufferRate设置为1,单次拍照图像数据空间大小约为126.5M,拍照10次为例:
如上图所示,在进行第8次拍摄时,图像8数据将会覆盖图像1数据,图像2-7数据依然存在,但随着拍摄次数的增多,缓存空间中的其余图像2-7数据也将被后续拍摄数据逐渐取代。