无法获取 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 (将#修改为@)