Kinect 2 - AcquireLatestFrame()大多数时候都失败了
Kinect 2 - AcquireLatestFrame() fails most of the time
给出以下c++代码,用于连续地从Kinect 2获取最新帧。
int main()
{
setupKinect();
acquireFrames();
return 0;
}
template<class Interface>
inline static void safeRelease(Interface *&interfaceToRelease)
{
if (interfaceToRelease != nullptr) {
interfaceToRelease->Release();
interfaceToRelease = nullptr;
}
}
void acquireFrames() {
while (true) {
if (bodyFrameReader != nullptr) {
IBodyFrame* bodyFrame = nullptr;
HRESULT hr = bodyFrameReader->AcquireLatestFrame(&bodyFrame);
if (SUCCEEDED(hr)) {
// processing bodyFrame
} else {
// acquiring frame failed
}
safeRelease(bodyFrame);
}
}
}
void setupKinect() {
IKinectSensor * sensor = nullptr;
HRESULT hr = GetDefaultKinectSensor(&sensor);
if (SUCCEEDED(hr)) {
hr = sensor->Open();
if (SUCCEEDED(hr)) {
IBodyFrameSource* bodyFrameSource = nullptr;
hr = sensor->get_BodyFrameSource(&bodyFrameSource);
if (SUCCEEDED(hr)) {
hr = bodyFrameSource->OpenReader(&bodyFrameReader);
}
safeRelease(bodyFrameSource);
}
}
safeRelease(sensor);
}
为什么AcquireLatestFrame
经常返回一个失败的HRESULT?一些测试显示,该功能每秒只能成功30次,所以似乎该功能最多只能获取/返回一次特定帧(Kinect帧率为30 fps)。这样对吗?
是的,你是对的。
来源:见表中"深度感应"下的"30hz":(你可能需要向下滚动一点)
https://developer.microsoft.com/en-us/windows/kinect/hardware
函数的文档说:
返回值类型:HRESULT
返回S_OK;否则,返回失败代码。
(来源:https://msdn.microsoft.com/en-us/library/microsoft.kinect.kinect.ibodyframereader.acquirelatestframe.aspx)
它大多数时候返回的失败HRESULT代码是E_PENDING。这意味着新的框架还没有准备好。
回答你的问题:为什么AcquireLatestFrame最经常返回一个失败的HRESULT?
因为不需要多次处理相同的输入数据(反复计算相同的结果只会浪费CPU时间)。
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 生成MRPT库时cmake配置失败
- Kinect 2 - AcquireLatestFrame()大多数时候都失败了
- c++ 11头的大多数基本并行化都失败了