C++ Can';无法获取ptz属性范围
我无法使用C++ Can';无法获取ptz属性范围,c++,winapi,directshow,ms-media-foundation,C++,Winapi,Directshow,Ms Media Foundation,我无法使用IKsControl/IKsPropertySet接口获取ptz属性范围/步骤/默认值。使用IAMCameraControl::GetRange没有问题,它工作正常。但是使用IKsControl我总是得到范围/步长和默认值的0值(我在几个云台摄像机上试过)。你能帮我找个问题吗?或者这仅仅是因为这些相机的驱动程序?我的代码如下: IKsControl* pIKsControl; ... KSP_NODE node; memset(&node, 0, sizeof(KSP_NOD
IKsControl
/IKsPropertySet
接口获取ptz属性范围/步骤/默认值。使用IAMCameraControl::GetRange
没有问题,它工作正常。但是使用IKsControl
我总是得到范围/步长和默认值的0值(我在几个云台摄像机上试过)。你能帮我找个问题吗?或者这仅仅是因为这些相机的驱动程序?我的代码如下:
IKsControl* pIKsControl;
...
KSP_NODE node;
memset(&node, 0, 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,
sizeof(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, 0, 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,
sizeof(node),
&description,
sizeof(KSPROPERTY_DESCRIPTION),
&bytes_received);
size = description.DescriptionSize;
buffer.clear();
buffer.resize(size);
pIKsControl->KsProperty(
(PKSPROPERTY)&node,
sizeof(node),
buffer.data(),
size,
&bytes_received);
if (bytes_received != size)
{
throw std::runtime_error("wrong data");
}
pRangeValues = buffer.data() + sizeof(KSPROPERTY_MEMBERSHEADER) + sizeof(KSPROPERTY_DESCRIPTION);
def = (int)*pRangeValues;
IKsControl*pIKsControl;
...
KSP_节点;
memset(&node,0,sizeof(KSP_节点));
node.Property.Set=PROPSETID\u VIDCAP\u CAMERACONTROL;
node.Property.Id=KSPROPERTY\u CAMERACONTROL\u TILT;
node.Property.Flags=KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_拓扑;
KSU属性描述;
接收到的无符号长字节=0;
pIKsControl->KsProperty((PKSPROPERTY)和节点,
sizeof(节点),
&描述,
sizeof(KSPROPERTY_说明),
&字节(u接收到);
无符号长尺寸=description.DescriptionSize;
std::向量缓冲区((长)大小);
pIKsControl->KsProperty((PKSPROPERTY)和节点,
sizeof(节点),
buffer.data(),
大小,
&字节(u接收到);
如果(接收的字节数!=大小)
{
抛出std::运行时_错误(“错误数据”);
}
BYTE*pRangeValues=buffer.data()+sizeof(KSPROPERTY\u MEMBERSHEADER)+sizeof(KSPROPERTY\u DESCRIPTION);
整数步长(0)、最小步长(0)、最大步长(0);
步骤=(int)*参数值;
胡说八道的价值观++;
最小值=(整数)*最大值;
胡说八道的价值观++;
最大值=(整数)*最大值;
memset(&node,0,sizeof(KSP_节点));
node.Property.Set=PROPSETID\u VIDCAP\u CAMERACONTROL;
node.Property.Id=KSPROPERTY\u CAMERACONTROL\u TILT;
node.Property.Flags=KSPROPERTY_TYPE_DEFAULTVALUES | KSPROPERTY_TYPE_拓扑;
接收的字节数=0;
pIKsControl->KsProperty(
(PKSPROPERTY)和节点,
sizeof(节点),
&描述,
sizeof(KSPROPERTY_说明),
&字节(u接收到);
大小=description.DescriptionSize;
buffer.clear();
调整缓冲区大小(大小);
pIKsControl->KsProperty(
(PKSPROPERTY)和节点,
sizeof(节点),
buffer.data(),
大小,
&字节(u接收到);
如果(接收的字节数!=大小)
{
抛出std::运行时_错误(“错误数据”);
}
pRangeValues=buffer.data()+sizeof(KSPROPERTY\u MEMBERSHEADER)+sizeof(KSPROPERTY\u DESCRIPTION);
def=(int)*pRangeValues;
如果您向我展示一些通过IKsPropertySet
获取此信息的伪代码,我也将非常感激(目前无法获取此信息)