CodeTV.CrossbarHelper.GetCrossbarPinAtIndex C# (CSharp) Méthode

GetCrossbarPinAtIndex() private méthode

private GetCrossbarPinAtIndex ( IAMCrossbar crossbar, int pinIndex, bool isInputPin, IPin &pin ) : int
crossbar IAMCrossbar
pinIndex int
isInputPin bool
pin IPin
Résultat int
        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;
        }