QI在查询IAMStreamConfig时返回E_NOINTERFACE

时间:2012-08-22 12:06:51

标签: c++ directshow

我正在尝试从集成摄像头的输出引脚检索IAMStreamConfig接口,但未能E_NOINTERFACE

我正在使用IntCam作为测试设备,实际上我将有一个带有两个输出引脚的源滤波器,每个引脚都支持不同的配置。

这就是为什么我不确定使用ICaptureGraphBuilder2::FindInterface是一个选项,因为我仍然没有弄清楚如何从特定的输出引脚获取接口。

CComPtr<IEnumPins> pEnum = NULL;
IPin* pPin = NULL;

HRESULT hr = pFilter->EnumPins(&pEnum);
if (FAILED(hr))
    return hr;

while (S_OK == pEnum->Next(1, &pPin, NULL))
{
   IAMStreamConfig* pAMStreamConfig;
   hr = pPin->QueryInterface(IID_PPV_ARGS(&pAMStreamConfig));
   if (FAILED(hr))
      return hr;
   // ...
}

1 个答案:

答案 0 :(得分:3)

IAMStreamConfig不是强制性接口,可能会遗漏,但在相机过滤器上它几乎总是可用的(许多应用程序会拒绝使用没有此接口的设备)。也就是说,你应该仔细检查你是否正在查询正确的过滤器和引脚,代码片段看起来不错。

真正的相机通常是通过WDM Video Capture Filter实现的IAMStreamConfig,但由于您使用的是虚拟设备,因此可能会有所不同。