/// <summary> /// Luoz: build the capture graph /// </summary> /// <returns></returns> bool SetupGraph() { int hr; IBaseFilter mux = null; IFileSinkFilter sink = null; try { hr = capGraph.SetFiltergraph(graphBuilder); if (hr < 0) { Marshal.ThrowExceptionForHR(hr); } hr = graphBuilder.AddFilter(capFilter, "Ds.NET Video Capture Device"); if (hr < 0) { Marshal.ThrowExceptionForHR(hr); } DsUtils.ShowCapPinDialog(capGraph, capFilter, this.Handle); Guid sub = MediaSubType.Avi; hr = capGraph.SetOutputFileName(ref sub, fileName, out mux, out sink); if (hr < 0) { Marshal.ThrowExceptionForHR(hr); } Guid cat = PinCategory.Capture; Guid med = MediaType.Video; hr = capGraph.RenderStream(ref cat, ref med, capFilter, null, mux); // stream to file if (hr < 0) { Marshal.ThrowExceptionForHR(hr); } cat = PinCategory.Preview; med = MediaType.Video; hr = capGraph.RenderStream(ref cat, ref med, capFilter, null, null); // preview window if (hr < 0) { Marshal.ThrowExceptionForHR(hr); } return(true); } catch (Exception ee) { MessageBox.Show(this, "Could not setup graph\r\n" + ee.Message, "DirectShow.NET", MessageBoxButtons.OK, MessageBoxIcon.Stop); return(false); } finally { if (mux != null) { Marshal.ReleaseComObject(mux); } mux = null; if (sink != null) { Marshal.ReleaseComObject(sink); } sink = null; } }