Beispiel #1
0
        void InitDirectShow(IntPtr handle)
        {
            graphBuilder = (IGraphBuilder) new FilterGraph();
            mediaControl = (IMediaControl)(IVideoWindow)graphBuilder;
            videoWindow  = (IVideoWindow)(IMediaControl)graphBuilder;
            mediaEventEx = (IMediaEventEx)graphBuilder;

            captureGraphBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();

            outputRenderer = (IBaseFilter) new VideoMixingRenderer9();

            if (outputRenderer != null)
            {
                graphBuilder.AddFilter(outputRenderer, "Output");

                aspectRatioControl  = outputRenderer as IVMRAspectRatioControl;
                aspectRatioControl9 = outputRenderer as IVMRAspectRatioControl9;
            }

            var hr = mediaEventEx.SetNotifyWindow(handle, WM_GRAPHNOTIFY, IntPtr.Zero);

            DsError.ThrowExceptionForHR(hr);

            hr = captureGraphBuilder.SetFiltergraph(graphBuilder);
            DsError.ThrowExceptionForHR(hr);

            graphBuilderRotEntry = new DsROTEntry(graphBuilder);
        }
Beispiel #2
0
        void DeInitDirectShow()
        {
            if (mediaControl != null)
            {
                mediaControl.StopWhenReady();
            }

            if (mediaEventEx != null)
            {
                mediaEventEx.SetNotifyWindow(IntPtr.Zero, WM_GRAPHNOTIFY, IntPtr.Zero);
            }

            if (videoWindow != null)
            {
                videoWindow.put_Visible(OABool.False);
                videoWindow.put_Owner(IntPtr.Zero);
            }

            Marshal.ReleaseComObject(mediaControl);
            mediaControl = null;
            Marshal.ReleaseComObject(mediaEventEx);
            mediaControl = null;
            Marshal.ReleaseComObject(videoWindow);
            videoWindow = null;
            Marshal.ReleaseComObject(graphBuilder);
            graphBuilder = null;
            Marshal.ReleaseComObject(captureGraphBuilder);
            captureGraphBuilder = null;
            Marshal.ReleaseComObject(outputRenderer);
            outputRenderer = null;
            Marshal.ReleaseComObject(aspectRatioControl);
            aspectRatioControl = null;
            Marshal.ReleaseComObject(aspectRatioControl9);
            aspectRatioControl9 = null;
        }
        public void DoTests()
        {
            arControl = (IVMRAspectRatioControl9) new VideoMixingRenderer9();

            try
            {
                TestAspectRatioMode();
            }
            finally
            {
                Marshal.ReleaseComObject(arControl);
            }
        }
        protected override void Initialize(IGraphBuilder pGraphBuilder, IntPtr hMediaWindow)
        {
            if (_initialized)
            {
                base.Initialize(pGraphBuilder, hMediaWindow);
            }
            else
            {
                IVMRFilterConfig9 pVMRFilterConfig9 = (IVMRFilterConfig9)BaseFilter; // will be released when pBaseFilter is released
                pVMRFilterConfig9.SetNumberOfStreams(NUMBER_OF_STREAMS);

                IVMRAspectRatioControl9 pVMRAspectRatioControl9 = (IVMRAspectRatioControl9)BaseFilter;
                pVMRAspectRatioControl9.SetAspectRatioMode(VMR9AspectRatioMode.VMR9ARMode_None);

                _initialized = true;
            }
        }
Beispiel #5
0
        //The following is called for building the PREVIEW graph
        #region PREVIEW ONLY
        public void Init()
        {
            Debug.WriteLine("VIDEO FOR PREVIEW");
            pGraph = graph;
            int hr = 0;

            hr = pGraphBuilder.SetFiltergraph(pGraph);
            DsError.ThrowExceptionForHR(hr);

            pUSB = FindCaptureDevice();

            hr = pGraph.AddFilter(pUSB, "WebCamControl Video");
            DsError.ThrowExceptionForHR(hr);

            hr = pGraph.AddFilter(pSampleGrabber as IBaseFilter, "SampleGrabber");
            checkHR(hr, "Can't add SampleGrabber to graph");
            i_grabber = (ISampleGrabber)pSampleGrabber;
            i_grabber.SetBufferSamples(true);

            IVMRAspectRatioControl9 ratioControl9 = (IVMRAspectRatioControl9)renderFilter;

            hr = ratioControl9.SetAspectRatioMode(VMRAspectRatioMode.LetterBox);
            DsError.ThrowExceptionForHR(hr);

            hr = pGraph.AddFilter(renderFilter, "My Render Filter");
            DsError.ThrowExceptionForHR(hr);
            //SetFormat();

            hr = pGraphBuilder.RenderStream(PinCategory.Preview, MediaType.Video, pUSB, (IBaseFilter)pSampleGrabber, renderFilter);
            DsError.ThrowExceptionForHR(hr);
            Debug.WriteLine(DsError.GetErrorText(hr) + " is error in rendering");

            IEnumFilters enumFilters = null;

            IBaseFilter[] baseFilters = { null };
            IntPtr        fetched     = IntPtr.Zero;

            hr = pGraph.EnumFilters(out enumFilters);
            int r = 0;

            while (r == 0)
            {
                try
                {
                    r = enumFilters.Next(baseFilters.Length, baseFilters, fetched);
                    DsError.ThrowExceptionForHR(hr);
                    baseFilters[0].QueryFilterInfo(out FilterInfo filterInfo);
                    Debug.WriteLine(filterInfo.achName + " -filtername");
                }
                catch
                {
                    r = 1;
                    continue;
                }
            }

            SafeReleaseComObject(pUSB);
            SafeReleaseComObject(pAVIMux);
            SafeReleaseComObject(pGraph);
            SafeReleaseComObject(pGraphBuilder);
            SafeReleaseComObject(pSampleGrabber);
            //SafeReleaseComObject(sampleGrabber);
            SafeReleaseComObject(pSmartTee);
            SafeReleaseComObject(renderFilter);
            SafeReleaseComObject(nullRender);
            SafeReleaseComObject(mediaEventEx);
            SafeReleaseComObject(ratioControl9);
            SafeReleaseComObject(streamConfig);
            SafeReleaseComObject(mediaControl);
            //SafeReleaseComObject(format);
            //SafeReleaseComObject(i_grabber);
            SafeReleaseComObject(graph);

            SetupVideoWindow();
        }