コード例 #1
0
ファイル: Filters.cs プロジェクト: psyCHOder/conferencexp
        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;
        }
コード例 #2
0
ファイル: Filters.cs プロジェクト: psyCHOder/conferencexp
        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;
        }