Пример #1
0
        private void DoCrossbarOperation(string deviceName, CrossbarCallback callback)
        {
            IGraphBuilder         graphBuilder        = null;
            ICaptureGraphBuilder2 captureGraphBuilder = null;
            IBaseFilter           theDevice           = null;

            try
            {
                graphBuilder        = (IGraphBuilder) new FilterGraph();
                captureGraphBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
                theDevice           = CreateFilter(FilterCategory.VideoInputDevice, deviceName);

                // Attach the filter graph to the capture graph
                int hr = captureGraphBuilder.SetFiltergraph(graphBuilder);
                DsError.ThrowExceptionForHR(hr);

                // Add the Video input device to the graph
                hr = graphBuilder.AddFilter(theDevice, "source filter");
                DsError.ThrowExceptionForHR(hr);

                // Render any preview pin of the device
                hr = captureGraphBuilder.RenderStream(PinCategory.Preview, MediaType.Video, theDevice, null, null);
                DsError.ThrowExceptionForHR(hr);

                IAMCrossbar crossbar = null;
                object      o;

                hr = captureGraphBuilder.FindInterface(null, null, theDevice, typeof(IAMCrossbar).GUID, out o);
                if (hr >= 0)
                {
                    crossbar = (IAMCrossbar)o;
                    o        = null;

                    if (crossbar != null)
                    {
                        callback(crossbar);
                        return;
                    }
                }

                callback(null);
            }
            finally
            {
                Marshal.ReleaseComObject(theDevice);
                Marshal.ReleaseComObject(graphBuilder);
                Marshal.ReleaseComObject(captureGraphBuilder);
            }
        }
        private static void DoCrossbarOperation(string deviceName, CrossbarCallback callback)
        {
            IGraphBuilder graphBuilder = null;
            ICaptureGraphBuilder2 captureGraphBuilder = null;
            IBaseFilter theDevice = null;

            try
            {
                graphBuilder = (IGraphBuilder)new FilterGraph();
                captureGraphBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
                theDevice = CreateFilter(FilterCategory.VideoInputDevice, deviceName);

                // Attach the filter graph to the capture graph
                int hr = captureGraphBuilder.SetFiltergraph(graphBuilder);
                DsError.ThrowExceptionForHR(hr);

                // Add the Video input device to the graph
                hr = graphBuilder.AddFilter(theDevice, "source filter");
                DsError.ThrowExceptionForHR(hr);

                // Render any preview pin of the device
                hr = captureGraphBuilder.RenderStream(PinCategory.Preview, MediaType.Video, theDevice, null, null);
                DsError.ThrowExceptionForHR(hr);

                IAMCrossbar crossbar = null;
                object o;

                hr = captureGraphBuilder.FindInterface(null, null, theDevice, typeof(IAMCrossbar).GUID, out o);
                if (hr >= 0)
                {
                    crossbar = (IAMCrossbar)o;
                    o = null;

                    if (crossbar != null)
                    {
                        callback(crossbar);
                        return;
                    }
                }

                callback(null);
            }
            finally
            {
                Marshal.ReleaseComObject(theDevice);
                Marshal.ReleaseComObject(graphBuilder);
                Marshal.ReleaseComObject(captureGraphBuilder);
            }
        }