Esempio n. 1
0
        protected override void BuildGraph(string path)
        {
            // Build partial graph
            IPin videoOutput = null, audioOutput = null;

            {
                VideoRendererDefault videoRenderer = new VideoRendererDefault();
                DSoundRender         audioRenderer = new DSoundRender();
                try
                {
                    GraphBuilder.AddFilter(videoRenderer as IBaseFilter, "Default Video Renderer");
                    GraphBuilder.AddFilter(audioRenderer as IBaseFilter, "Default Audio Renderer");

                    GraphBuilder.RenderFile(path, null);

                    // Get Connected Pins
                    {
                        IPin videoInput = Util.FindInputPin(videoRenderer as IBaseFilter);
                        videoInput.ConnectedTo(out videoOutput);
                        Util.FreePin(videoInput);

                        IPin audioInput = Util.FindInputPin(audioRenderer as IBaseFilter);
                        audioInput.ConnectedTo(out audioOutput);
                        Util.FreePin(audioInput);
                    }

                    GraphBuilder.RemoveFilter(videoRenderer as IBaseFilter);
                    GraphBuilder.RemoveFilter(audioRenderer as IBaseFilter);
                }
                finally
                {
                    Marshal.ReleaseComObject(videoRenderer);
                    Marshal.ReleaseComObject(audioRenderer);
                }
            }

            // build video grabber
            if (videoOutput != null)
            {
                this.VideoGrabber = BuildGrabber("Video", videoOutput,
                                                 MEDIATYPE_Video, MEDIASUBTYPE_RGB32, FORMAT_VideoInfo, OnVideoFrame) as ISampleGrabber;
                this.VideoInfo = GetMediaFormat <VideoInfoHeader>(VideoGrabber);
                Marshal.ReleaseComObject(videoOutput);
            }

            // build audio grabber
            if (audioOutput != null)
            {
                this.AudioGrabber = BuildGrabber("Audio", audioOutput,
                                                 MEDIATYPE_Audio, MEDIASUBTYPE_PCM, FORMAT_WaveFormatEx, OnAudioFrame) as ISampleGrabber;
                this.AudioInfo = GetMediaFormat <WaveFormatEx>(AudioGrabber);
                Marshal.ReleaseComObject(audioOutput);
            }
        }
Esempio n. 2
0
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog lopenFileDialog = new OpenFileDialog();

            lopenFileDialog.AddExtension = true;

            var lresult = lopenFileDialog.ShowDialog();

            if (lresult != true)
            {
                return;
            }

            IBaseFilter lDSoundRender = new DSoundRender() as IBaseFilter;

            m_pGraph.AddFilter(lDSoundRender, "Audio Renderer");


            int k = 0;

            IPin[] lAudioRendererPins = new IPin[1];

            IEnumPins ppEnum;

            k = lDSoundRender.EnumPins(out ppEnum);

            k = ppEnum.Next(1, lAudioRendererPins, IntPtr.Zero);

            var lCaptureManagerEVRMultiSinkFactory = await CaptureManagerVideoRendererMultiSinkFactory.getInstance().getICaptureManagerEVRMultiSinkFactoryAsync();

            uint lMaxVideoRenderStreamCount = await lCaptureManagerEVRMultiSinkFactory.getMaxVideoRenderStreamCountAsync();

            if (lMaxVideoRenderStreamCount == 0)
            {
                return;
            }

            List <object> lOutputNodesList = await lCaptureManagerEVRMultiSinkFactory.createOutputNodesAsync(
                IntPtr.Zero,
                mEVRDisplay.Surface.texture,
                1);

            if (lOutputNodesList.Count == 0)
            {
                return;
            }

            IBaseFilter lVideoMixingRenderer9 = (IBaseFilter)lOutputNodesList[0];

            var h = m_pGraph.AddFilter(lVideoMixingRenderer9, "lVideoMixingRenderer9");


            IPin[] lVideoRendererPin = new IPin[1];


            k = lVideoMixingRenderer9.EnumPins(out ppEnum);

            k = ppEnum.Next(1, lVideoRendererPin, IntPtr.Zero);


            IBaseFilter m_SourceFilter = null;

            m_pGraph.AddSourceFilter(lopenFileDialog.FileName, null, out m_SourceFilter);

            IEnumPins lEnumPins = null;

            m_SourceFilter.EnumPins(out lEnumPins);

            IPin[] lPins = new IPin[1];

            while (lEnumPins.Next(1, lPins, IntPtr.Zero) == 0)
            {
                IEnumMediaTypes lIEnumMediaTypes;

                lPins[0].EnumMediaTypes(out lIEnumMediaTypes);

                AMMediaType[] ppMediaTypes = new AMMediaType[1];

                while (lIEnumMediaTypes.Next(1, ppMediaTypes, IntPtr.Zero) == 0)
                {
                    var gh = ppMediaTypes[0].subType;

                    if (ppMediaTypes[0].majorType == DirectShowLib.MediaType.Video)
                    {
                        k = m_pGraph.Connect(lPins[0], lVideoRendererPin[0]);
                    }
                }

                foreach (var item in lPins)
                {
                    k = m_pGraph.Render(item);
                }
            }

            IMediaControl lIMediaControl = m_pGraph as IMediaControl;

            k = lIMediaControl.Run();
        }
Esempio n. 3
0
        protected override void BuildGraph(string path)
        {
            // Build partial graph
            IPin videoOutput = null, audioOutput = null;
            {
                VideoRendererDefault videoRenderer = new VideoRendererDefault();
                DSoundRender audioRenderer = new DSoundRender();
                try
                {
                    GraphBuilder.AddFilter(videoRenderer as IBaseFilter, "Default Video Renderer");
                    GraphBuilder.AddFilter(audioRenderer as IBaseFilter, "Default Audio Renderer");

                    GraphBuilder.RenderFile(path, null);

                    // Get Connected Pins
                    {
                        IPin videoInput = Util.FindInputPin(videoRenderer as IBaseFilter);
                        videoInput.ConnectedTo(out videoOutput);
                        Util.FreePin(videoInput);

                        IPin audioInput = Util.FindInputPin(audioRenderer as IBaseFilter);
                        audioInput.ConnectedTo(out audioOutput);
                        Util.FreePin(audioInput);
                    }

                    GraphBuilder.RemoveFilter(videoRenderer as IBaseFilter);
                    GraphBuilder.RemoveFilter(audioRenderer as IBaseFilter);
                }
                finally
                {
                    Marshal.ReleaseComObject(videoRenderer);
                    Marshal.ReleaseComObject(audioRenderer);
                }
            }

            // build video grabber
            if (videoOutput != null)
            {
                this.VideoGrabber = BuildGrabber("Video", videoOutput,
                    MEDIATYPE_Video, MEDIASUBTYPE_RGB32, FORMAT_VideoInfo, OnVideoFrame) as ISampleGrabber;
                this.VideoInfo = GetMediaFormat<VideoInfoHeader>(VideoGrabber);
                Marshal.ReleaseComObject(videoOutput);
            }

            // build audio grabber
            if (audioOutput != null)
            {
                this.AudioGrabber = BuildGrabber("Audio", audioOutput,
                    MEDIATYPE_Audio, MEDIASUBTYPE_PCM, FORMAT_WaveFormatEx, OnAudioFrame) as ISampleGrabber;
                this.AudioInfo = GetMediaFormat<WaveFormatEx>(AudioGrabber);
                Marshal.ReleaseComObject(audioOutput);
            }
        }