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); } }