如何解决无法获取 ptz 属性范围
我无法使用 IKsControl
/IKsPropertySet
接口获取 ptz 属性范围/步长/默认值。使用 IAMCameraControl::GetRange
没有问题,它工作正常。但是使用 IKsControl
我总是得到 0-values
范围/步长和默认值(我在几个 ptz 摄像机上尝试过)。你能帮我找出问题吗?或者这仅仅是因为这些相机的驱动程序?我的代码如下:
IKsControl* pIKsControl;
...
KSP_NODE node;
memset(&node,sizeof(KSP_NODE));
node.Property.Set = PROPSETID_VIDCAP_CAMERACONTROL;
node.Property.Id = KSPROPERTY_CAMERACONTROL_TILT;
node.Property.Flags = KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_TOPOLOGY;
KSPROPERTY_DESCRIPTION description;
unsigned long bytes_received = 0;
pIKsControl->KsProperty((PKSPROPERTY)&node,sizeof(node),& description,sizeof(KSPROPERTY_DESCRIPTION),& bytes_received);
unsigned long size = description.DescriptionSize;
std::vector<BYTE> buffer((long)size);
pIKsControl->KsProperty((PKSPROPERTY)&node,buffer.data(),size,&bytes_received);
if (bytes_received != size)
{
throw std::runtime_error("wrong data");
}
BYTE* pRangeValues = buffer.data() + sizeof(KSPROPERTY_MEMBERSHEADER) + sizeof(KSPROPERTY_DESCRIPTION);
int step(0),min(0),max(0);
step = (int)*pRangeValues;
pRangeValues++;
min = (int)*pRangeValues;
pRangeValues++;
max = (int)*pRangeValues;
memset(&node,sizeof(KSP_NODE));
node.Property.Set = PROPSETID_VIDCAP_CAMERACONTROL;
node.Property.Id = KSPROPERTY_CAMERACONTROL_TILT;
node.Property.Flags = KSPROPERTY_TYPE_DEFAULTVALUES | KSPROPERTY_TYPE_TOPOLOGY;
bytes_received = 0;
pIKsControl->KsProperty(
(PKSPROPERTY)&node,&description,&bytes_received);
size = description.DescriptionSize;
buffer.clear();
buffer.resize(size);
pIKsControl->KsProperty(
(PKSPROPERTY)&node,&bytes_received);
if (bytes_received != size)
{
throw std::runtime_error("wrong data");
}
pRangeValues = buffer.data() + sizeof(KSPROPERTY_MEMBERSHEADER) + sizeof(KSPROPERTY_DESCRIPTION);
def = (int)*pRangeValues;
如果您向我展示一些通过 IKsPropertySet
获取此内容的伪代码(暂时无法获取),我也会非常感激
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。