(转载请注明出处)
我真的不是故意把标题写这么严肃的
这节重点解释SDK里那些看起来比较晦涩的,剩下那些简那些单的、能在chm文档里查到的粗略提一下或者不说废话。
PS:至于我们所关注的获取视频流,SDK给出了两种方式,一种是用PXCSenseManager获取默认设备上的数据。另一种是完全自定义的方法,一步一步地配置并获取更详细更有(加)价(无)值(聊)的数据。为了满(装)足(一)好(手)奇(好)心(B),我们暂时不用SenseManager。
关于怎么用另一种方式获取视频流,个人稍微总结了一下流(套)程(路):
简直蛋疼
来来来,先理解几个SDK中会经常见到的单词,否则你会怀疑你的阅读能力:
Implementation // 装置,这里对应着DCM服务(DCM是深度相机管理器的意思)
Instance // 看得见摸得着的(雾)玩意儿
Capture // 采集,特指信息采集
Device // 设备IO、硬件IO、摄像头IO。。。反正看到Device 就知道这是在控制硬件(激光器、曝光乱七八糟的)
……不说人话。
下面上代码,两大步:枚举设备、枚举视频流。
枚举设备并查看信息:
不说废话,直接上代码:
pxcStatus retStatus;// 函数返回状态
// Realsense会话
PXCSession *Session = PXCSession::CreateInstance();
PXCSession::ImplVersion ver = Session->QueryVersion();
cout << "Realsense SDK 版本 " << ver.major << "." << ver.minor << endl;
cout << "==================================================" << endl;
// 收集信息-----------------------------------------------------------------------------\\
cout << "Checking Cable..." << endl;
cout << "-----------------" << endl;
// 限定为RealSense DCM视频服务
PXCSession::ImplDesc Qtemplat = {};
Qtemplat.group = PXCSession::IMPL_GROUP_SENSOR;// 分组于传感器
Qtemplat.subgroup = PXCSession::IMPL_SUBGROUP_VIDEO_CAPTURE;// 子分组于视频采集
for (size_t DCMidx = 0; ; DCMidx += 1)
{
// 查询可用的DCM服务
PXCSession::ImplDesc Impl;
retStatus = Session->QueryImpl(&Qtemplat, DCMidx, &Impl);
if (retStatus < PXC_STATUS_NO_ERROR)break;
wcout << "Enum_Index[" << DCMidx << "]" << "@" << Impl.friendlyName<< ":" << endl;
// 尝试初始化信息采集
PXCCapture *Capture = NULL;
retStatus = Session->CreateImpl<PXCCapture>(&Impl, &Capture);
if (retStatus<PXC_STATUS_NO_ERROR) continue;
// 输出硬件信息
for (size_t Didx = 0;; Didx += 1)
{
PXCCapture::DeviceInfo dinfo;
retStatus = Capture->QueryDeviceInfo(Didx, &dinfo);