public void Init(int size) { m_size = size; m_xy = new XY[size]; m_cross = new Cross[size]; int j = 0; for (int i = 0; i < size * 2; i += 2) { m_cross[j++] = new CrossMx(index, index + 1, m_baseFilter); index += 2; } }
void BuildGraph() { int hr; m_graphBuilder = (IGraphBuilder) new FilterGraph(); //Create the media control for controlling the graph mediaControl = (IMediaControl)m_graphBuilder; Guid gBouncingBall = new Guid("fd5010418ebe11ce818300aa00577da1"); Guid gShapeGuid = new Guid("E52BEAB445FB4D5ABC9E2381E61DCC47"); Type comtype; Type comtypeShapes; comtype = Type.GetTypeFromCLSID(gBouncingBall); comtypeShapes = Type.GetTypeFromCLSID(gShapeGuid); BouncingBallFilter = (IBaseFilter)Activator.CreateInstance(comtype); hr = m_graphBuilder.AddFilter(BouncingBallFilter, "Bouncing ball"); DsError.ThrowExceptionForHR(hr); ShapesFilter = (IBaseFilter)Activator.CreateInstance(comtypeShapes); hr = m_graphBuilder.AddFilter(ShapesFilter, "Shapes Filter"); DsError.ThrowExceptionForHR(hr); if (m_saveCrossToFile == true) { AddPinTeeFilter(); AddDumpFilter(); AddElecardAVCVideoEncoder(); DumpCom dump = new DumpCom(DumpFilter); if (dump.SetFileName("c:\\dump1.asf") != 0) { MessageBox.Show("Error set file"); } } int j = 0; for (int i = 0; i < m_cross.Length * 2; i += 2) { m_cross[j] = new CrossMx(i, i + 1, ShapesFilter); m_cross[j].Init(2000); j++; } if (m_saveCrossToFile) { IPin pinInfinteInput = DsFindPin.ByName(InfiniteTeeFilter, "Input"); IPin pinInfinteOutput1 = DsFindPin.ByName(InfiniteTeeFilter, "Output1"); IPin pinSourceOut = DsFindPin.ByName(BouncingBallFilter, "Out"); IPin pinAVCInput = DsFindPin.ByName(ElecardAVCFilter, "Input"); IPin pinAVCOutput = DsFindPin.ByName(ElecardAVCFilter, "Output"); IPin pinShapeIn = DsFindPin.ByName(ShapesFilter, "Input"); IPin pinShapeOut = DsFindPin.ByName(ShapesFilter, "Output"); IPin pinDumpIn = DsFindPin.ByName(DumpFilter, "Input"); hr = m_graphBuilder.Connect(pinSourceOut, pinShapeIn); DsError.ThrowExceptionForHR(hr); hr = m_graphBuilder.Connect(pinShapeOut, pinInfinteInput); DsError.ThrowExceptionForHR(hr); //hr = m_graphBuilder.Connect(pinInfinteOutput1, pinDumpIn); hr = m_graphBuilder.Connect(pinInfinteOutput1, pinAVCInput); DsError.ThrowExceptionForHR(hr); hr = m_graphBuilder.Connect(pinAVCOutput, pinDumpIn); DsError.ThrowExceptionForHR(hr); IPin pinInfinteOutput2 = DsFindPin.ByName(InfiniteTeeFilter, "Output2"); // let DirectShow connects the front and back hr = m_graphBuilder.Render((DirectShowLib.IPin)pinInfinteOutput2); DsError.ThrowExceptionForHR(hr); } else { IPin pinSourceOut = DsFindPin.ByName(BouncingBallFilter, "Out"); IPin pinShapeIn = DsFindPin.ByName(ShapesFilter, "Input"); hr = m_graphBuilder.Connect(pinSourceOut, pinShapeIn); DsError.ThrowExceptionForHR(hr); IPin pinShapeOut = DsFindPin.ByName(ShapesFilter, "Output"); // let DirectShow connects the front and back hr = m_graphBuilder.Render((DirectShowLib.IPin)pinShapeOut); DsError.ThrowExceptionForHR(hr); } }