KsProperty()在设置相机变焦值时返回“传递给系统调用的数据区域太小”ERROR_INSUFFICIENT_BUFFER

时间:2013-04-03 12:13:34

标签: directshow

HRESULT hr = S_OK;
KSPROPERTY ksprop;    
ZeroMemory(&ksprop, sizeof(ksprop));
PVOID pData = NULL;
ULONG valueSize = 0;
ULONG dataLength = 0;
KSPROPERTY_CAMERACONTROL_S cameraControl;
ZeroMemory(&cameraControl, sizeof(cameraControl));
ksprop.Set = PROPSETID_VIDCAP_CAMERACONTROL;
ksprop.Id = KSPROPERTY_CAMERACONTROL_ZOOM;
ksprop.Flags = KSPROPERTY_TYPE_SET;
cameraControl.Property = ksprop;
cameraControl.Flags = KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
cameraControl.Capabilities = KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL;
cameraControl.Value = 50;

pData = &cameraControl;
dataLength = sizeof(cameraControl);
hr = m_pKsControl->KsProperty(
            &ksprop, sizeof(ksprop),
            pData, dataLength, &valueSize);    

此处hr“传递给系统调用的数据区域太小。”
我在Windows 7机器上编译vs 2010。

1 个答案:

答案 0 :(得分:0)

您可能会在第四个参数中提供一个太小的缓冲区。

很容易看到这一点,请参阅IKsControl::KsProperty文档:

  

确定特定属性所需的缓冲区大小   请求,您可以将PropertyData设置为NULL并调用此方法   DataLength等于零。该方法返回   HRESULT_FROM_WIN32(ERROR_MORE_DATA)和BytesReturned包含   所需缓冲区的大小。