FindPin是IBaseFilter接口的一个方法,用它来可以查询到该Filter的某个pin,遗憾的是我在VideoRender的filter上直接使用FindPin来查询name为"Input"的pin时,得到的pin连接后,看不到视频窗口,原来是通过这个FindPin方法得到的pin为NULL,一开始我以为是pin的name传错了,后来发现,即使传入的pin的name是正确的也没有用。最后还得用枚举filter上的pin来得到输入pin,下面的方法有些麻烦但比较可靠。
IPin* FindPin(IBaseFilter* inFilter, PIN_DIRECTION direction)
{
IEnumPins * pinEnum = NULL;
if (SUCCEEDED(inFilter->EnumPins(&pinEnum)))
{
pinEnum->Reset();
IPin * pin = NULL;
ULONG fetchCount = 0;
while (SUCCEEDED(pinEnum->Next(1, &pin, &fetchCount)) && fetchCount)
{
if (pin)
{
PIN_DIRECTION PinDirection;
if (SUCCEEDED(pin->QueryDirection(&PinDirection)))
{
if (PinDirection == direction)
{
return pin;
}
}
pin->Release();
}
}
pinEnum->Release();
}
return NULL;
}