private int GetCrossbarPinAtIndex(IAMCrossbar crossbar, int pinIndex, bool isInputPin, out IPin pin)
{
pin = null;
if (crossbar == null)
return -1;
int cntInPins, cntOutPins;
if (crossbar.get_PinCounts(out cntOutPins, out cntInPins) != 0)
return unchecked((int)0x80004005); //E_FAIL;
int trueIndex = isInputPin ? pinIndex : pinIndex + cntInPins;
IBaseFilter filter = crossbar as IBaseFilter;
if (filter != null)
{
IEnumPins enumPins = null;
if (filter.EnumPins(out enumPins) == 0)
{
int i = 0;
IPin [] pins = new IPin[1];
//22 int n;
//22 while(enumPins.Next(1, pins, out n) == 0)
while (enumPins.Next(1, pins, IntPtr.Zero) == 0)
{
//pP.Release();
if (i == trueIndex)
{
pin = pins[0];
break;
}
Marshal.ReleaseComObject(pins[0]);
i++;
}
Marshal.ReleaseComObject(enumPins);
}
//pFilter.Release();
}
return pin != null ? 0 : unchecked((int)0x80004005); //E_FAIL;
}