Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }