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
获取此信息的伪代码,我也将非常感激(目前无法获取此信息)