public static ArrayList GetPins(ArrayList pins, _PinDirection dir) { ArrayList ret = new ArrayList(); foreach(IPin pin in pins) { _PinDirection pinDir; pin.QueryDirection(out pinDir); if(pinDir == dir) { ret.Add(pin); } } return ret; }
public static IPin GetPin(IBaseFilter iBF, _PinDirection pinDir, Guid category, Guid type, bool unconnected, int num) { GCHandle hCatGuid = new GCHandle(); GCHandle hTypeGuid = new GCHandle(); IntPtr pCatGuid = IntPtr.Zero; IntPtr pTypeGuid = IntPtr.Zero; if(category != Guid.Empty) { hCatGuid = GCHandle.Alloc(category, GCHandleType.Pinned); pCatGuid = hCatGuid.AddrOfPinnedObject(); } else if(type != Guid.Empty) { hTypeGuid = GCHandle.Alloc(type, GCHandleType.Pinned); pTypeGuid = hTypeGuid.AddrOfPinnedObject(); } IPin pin = null; try { ICaptureGraphBuilder2 cgb2 = CaptureGraphBuilder2Class.CreateInstance(); cgb2.FindPin(iBF, pinDir, pCatGuid, pTypeGuid, unconnected, num, out pin); } finally { if(pCatGuid != IntPtr.Zero) { hCatGuid.Free(); } if(pTypeGuid != IntPtr.Zero) { hTypeGuid.Free(); } } return pin; }