コード例 #1
0
ファイル: MainForm.cs プロジェクト: d3x0r/xperdex
        private void ConfigureVMR9InWindowlessMode()
        {
            int hr = 0;

            IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9)vmr9;

            // Not really needed for VMR9 but don't forget calling it with VMR7
            hr = filterConfig.SetNumberOfStreams(1);
            DsError.ThrowExceptionForHR(hr);

            // Change VMR9 mode to Windowless
            hr = filterConfig.SetRenderingMode(VMR9Mode.Windowless);
            DsError.ThrowExceptionForHR(hr);

            windowlessCtrl = (IVMRWindowlessControl9)vmr9;

            // Set "Parent" window
            hr = windowlessCtrl.SetVideoClippingWindow(this.Handle);
            DsError.ThrowExceptionForHR(hr);

            // Set Aspect-Ratio
            hr = windowlessCtrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
            DsError.ThrowExceptionForHR(hr);

            // Add delegates for Windowless operations
            AddHandlers();

            // Call the resize handler to configure the output size
            MainForm_ResizeMove(null, null);
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: d3x0r/xperdex
        private void CloseInterfaces()
        {
            if (mediaControl != null)
            {
                mediaControl.Stop();
            }

            if (rot != null)
            {
                rot.Dispose();
                rot = null;
            }

            RemoveHandlers();

            if (compositor != null)
            {
                compositor.Dispose();
                compositor = null;
            }

            if (vmr9 != null)
            {
                Marshal.ReleaseComObject(vmr9);
                vmr9           = null;
                windowlessCtrl = null;
            }

            if (graphBuilder != null)
            {
                Marshal.ReleaseComObject(graphBuilder);
                graphBuilder = null;
                mediaControl = null;
            }
        }
コード例 #3
0
ファイル: MainForm.cs プロジェクト: d3x0r/xperdex
        private void CloseInterfaces()
        {
            if (mediaControl != null)
            {
                mediaControl.Stop();
            }

            if (handlersAdded)
            {
                RemoveHandlers();
            }

            if (vmr9 != null)
            {
                Marshal.ReleaseComObject(vmr9);
                vmr9           = null;
                windowlessCtrl = null;
                mixerBitmap    = null;
            }

            if (graphBuilder != null)
            {
                Marshal.ReleaseComObject(graphBuilder);
                graphBuilder = null;
                mediaControl = null;
            }

            menuMixer.Enabled = false;
        }
コード例 #4
0
ファイル: Snapshot.cs プロジェクト: ewin66/media
        /// <summary>
        /// Creates a Snapshot from a windowless control
        /// </summary>
        /// <param name="control">control that is being drawn to by the VMR9</param>
        public Snapshot(IVMRWindowlessControl9 control)
        {
            int hr;

            hr = control.GetCurrentImage(out _dib);
            DsError.ThrowExceptionForHR(hr);
        }
コード例 #5
0
        private void ConfigureVMR9InWindowlessMode()
        {
            int hr = 0;
            IVMRFilterConfig9 filterConfig = this.videoRenderer as IVMRFilterConfig9;

            // Configure VMR-9 in Windowsless mode
            hr = filterConfig.SetRenderingMode(VMR9Mode.Windowless);
            DsError.ThrowExceptionForHR(hr);

            // With 1 input stream
            hr = filterConfig.SetNumberOfStreams(1);
            DsError.ThrowExceptionForHR(hr);

            IVMRWindowlessControl9 windowlessControl = this.videoRenderer as IVMRWindowlessControl9;

            // The main form is hosting the VMR-9
            hr = windowlessControl.SetVideoClippingWindow(this.hostingControl.Handle);
            DsError.ThrowExceptionForHR(hr);

            // Keep the aspect-ratio OK
            hr = windowlessControl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
            DsError.ThrowExceptionForHR(hr);

            // Init the VMR-9 with default size values
            ResizeMoveHandler(null, null);

            // Add Windows Messages handlers
            AddHandlers();
        }
コード例 #6
0
        protected override void CloseInterfaces()
        {
            _pVMRFilterConfig9      = null;
            _pVMRWindowlessControl9 = null; // they will be released when pBaseFilter is released

            base.CloseInterfaces();         // release bBaseFilter
        }
コード例 #7
0
        private void CloseInterfaces()
        {
            while (!m_WaitUntilDoneIsDone)
            {
                Thread.Sleep(1);
            }

            if (!m_WaitUntilDoneIsDone)
            {
                MessageBox.Show("wait not done");
            }

            try
            {
                if (mediaControl != null)
                {
                    mediaControl.Stop();
                    Marshal.ReleaseComObject(mediaControl);
                    mediaControl = null;
                }

                if (mediaPosition != null)
                {
                    Marshal.ReleaseComObject(mediaPosition);
                    mediaPosition = null;
                }
                if (windowlessCtrl != null)
                {
                    Marshal.ReleaseComObject(windowlessCtrl);
                    windowlessCtrl = null;
                }

                if (handlersAdded)
                {
                    RemoveHandlers();
                }

                if (m_MediaEvent != null)
                {
                    Marshal.ReleaseComObject(m_MediaEvent);
                    m_MediaEvent = null;
                }

                if (vmr9 != null)
                {
                    Marshal.ReleaseComObject(vmr9);
                    vmr9           = null;
                    windowlessCtrl = null;
                }

                if (graphBuilder != null)
                {
                    Marshal.ReleaseComObject(graphBuilder);
                    graphBuilder = null;
                    mediaControl = null;
                }
            }
            catch { }
        }
コード例 #8
0
 public void SetRendererInterfaces(IVMRWindowlessControl VMRWindowlessControl,
                                   IVMRWindowlessControl9 VMRWindowlessControl9,
                                   IMFVideoDisplayControl MFVideoDisplayControl)
 {
     _VMRWindowlessControl  = VMRWindowlessControl;
     _VMRWindowlessControl9 = VMRWindowlessControl9;
     _MFVideoDisplayControl = MFVideoDisplayControl;
 }
コード例 #9
0
        public void VideoWindowSnapshot(IVMRFilterConfig9 renderer)
        {
            if (null == VmrRenderer)
            {
                return;
            }

            IVMRWindowlessControl9 ctrl = (IVMRWindowlessControl9)renderer;
            IntPtr imgptr = IntPtr.Zero;
            Bitmap bmp    = null;

            try
            {
                ctrl.GetCurrentImage(out imgptr);
                if (IntPtr.Zero != imgptr)
                {
                    BitmapInfoHeader header = new BitmapInfoHeader();
                    Marshal.PtrToStructure(imgptr, header);
                    //stride formula comes from MSDN
                    //https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapinfoheader
                    var stride = ((((header.Width * header.BitCount) + 31) & ~31) >> 3);

                    //暫時假定輸出圖像是純DIB沒有Color Mask等額外資訊
                    bmp = new Bitmap(header.Width, header.Height, stride,
                                     PixelFormat.Format32bppArgb, imgptr + header.Size);
                    //注意這邊撈出的CurrentImage,是上下顛倒狀態(沿著X軸鏡射)
                    //要把它再鏡射回來才能存檔
                    bmp.RotateFlip(RotateFlipType.RotateNoneFlipY);

                    SaveFileDialog dlg = new SaveFileDialog();
                    dlg.Filter           = "Bitmap File (*.bmp)|*.bmp";
                    dlg.InitialDirectory = BinPath;
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        bmp.Save(dlg.FileName, ImageFormat.Jpeg);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to save snapshot bmp file : " + ex.Message);
            }
            finally
            {
                if (bmp != null)
                {
                    bmp.Dispose();
                }
                if (IntPtr.Zero != imgptr)
                {
                    Marshal.FreeCoTaskMem(imgptr);
                }
            }
        }
コード例 #10
0
        public void DoTests()
        {
            int hr = 0;
            IVMRFilterConfig9 vmrConfig = null;

            try
            {
                // Just build the graph with unconnected source filter and VMR9
                BuildGraph(testFile, out this.graphBuilder, out this.sourceFilter, out this.vmr9Filter);

                // VMR9 need to be placed in Windowless mode before connecting it to the rest of the graph
                vmrConfig = this.vmr9Filter as IVMRFilterConfig9;
                hr        = vmrConfig.SetRenderingMode(VMR9Mode.Windowless);
                Marshal.ThrowExceptionForHR(hr);

                this.vmrWndConfig = this.vmr9Filter as IVMRWindowlessControl9;

                TestSetVideoClippingWindow();
                TestAspectRatioMode();
                TestBorderColor();
                TestGetMaxIdealVideoSize();
                TestGetMinIdealVideoSize();

                // Connect source filter with the VMR9
                ConnectGraph(ref this.graphBuilder, ref this.sourceFilter, ref this.vmr9Filter);

                // Run the graph to test other methods
                this.mediaControl = this.graphBuilder as IMediaControl;
                hr = this.mediaControl.Run();
                Marshal.ThrowExceptionForHR(hr);

                this.isPlaying = true;
                TestVideoPosition();

                Thread.Sleep(2000);
                TestGetCurrentImage();

                Thread.Sleep(2000);
                TestDisplayModeChanged();
                TestGetNativeVideoSize();
                TestRepaintVideo();
            }
            finally
            {
                if (this.mediaControl != null)
                {
                    this.mediaControl.Stop();
                }
                Marshal.ReleaseComObject(this.vmr9Filter);
                Marshal.ReleaseComObject(this.sourceFilter);
                Marshal.ReleaseComObject(this.graphBuilder);
            }
        }
コード例 #11
0
        /// <summary>
        /// Closes and releases all used interfaces.
        /// </summary>
        public void CloseInterfaces()
        {
            if (VMRenderer != null)
            {
                Marshal.ReleaseComObject(VMRenderer);
                VMRenderer             = null;
                WindowlessCtrl         = null;
                IMFVideoDisplayControl = null;
                MixerBitmap            = null;
            }
            if (Processer != null)
            {
                Marshal.ReleaseComObject(Processer);
                AudioRender = null;
            }
            if (AudioRender != null)
            {
                Marshal.ReleaseComObject(AudioRender);
                AudioRender = null;
            }
            if (FilterGraph != null)
            {
                Marshal.ReleaseComObject(FilterGraph);
                FilterGraph  = null;
                MediaControl = null;
            }

            if (SmartTee != null)
            {
                Marshal.ReleaseComObject(SmartTee);
                SmartTee = null;
            }

            if (SampleGrabber != null)
            {
                Marshal.ReleaseComObject(SampleGrabber);
                SampleGrabber       = null;
                SampleGrabberFilter = null;
            }

            if (CaptureFilter != null)
            {
                Marshal.ReleaseComObject(CaptureFilter);
                CaptureFilter = null;
            }

            if (Crossbar != null)
            {
                Marshal.ReleaseComObject(Crossbar);
                Crossbar = null;
            }
        }
コード例 #12
0
        private void SetupRenderWindow(IVMRFilterConfig9 renderer, Control target)
        {
            IVMRFilterConfig9 config = renderer;

            // Not really needed for VMR9 but don't forget calling it with VMR7
            config.SetNumberOfStreams(1);
            // Change VMR9 mode to Windowless
            config.SetRenderingMode(VMR9Mode.Windowless);
            IVMRWindowlessControl9 winless_ctrl = (IVMRWindowlessControl9)renderer;

            // Set "Parent" window
            winless_ctrl.SetVideoClippingWindow(target.Handle);
            // Set Aspect-Ratio
            winless_ctrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
            winless_ctrl.SetVideoPosition(null, DsRect.FromRectangle(target.ClientRectangle));
            winless_ctrl = null;
        }
コード例 #13
0
        protected override void Initialize(IGraphBuilder pGraphBuilder, IntPtr hMediaWindow)
        {
            // QUERY the VMR9 interfaces
            try
            {
                _pVMRFilterConfig9 = (IVMRFilterConfig9)BaseFilter;
                _pVMRFilterConfig9.SetRenderingMode(VMR9Mode.VMR9Mode_Windowless);
                _pVMRFilterConfig9.SetNumberOfStreams(NUMBER_OF_STREAMS);
                _pVMRWindowlessControl9 = (IVMRWindowlessControl9)BaseFilter;
                _pVMRWindowlessControl9.SetVideoClippingWindow(hMediaWindow);

                _pVMRWindowlessControl9.SetAspectRatioMode(VMR9AspectRatioMode.VMR9ARMode_None);
            }
            catch (Exception e)
            {
                throw new FilterGraphBuilderException(GraphBuilderError.ConfigureVMR9, e);
            }
        }
コード例 #14
0
        /// <summary>
        /// Adds VMR9 (renderer) filter to the filter graph.
        /// </summary>
        private void AddFilter_Renderer()
        {
            VMRenderer = (IBaseFilter) new VideoMixingRenderer9();

            IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9)VMRenderer;

            // Not really needed for vmr but don't forget calling it with VMR7
            int hr = filterConfig.SetNumberOfStreams(1);

            DsError.ThrowExceptionForHR(hr);

            // Change vmr mode to Windowless
            hr = filterConfig.SetRenderingMode(VMR9Mode.Windowless);
            DsError.ThrowExceptionForHR(hr);

            // video renderer
            WindowlessCtrl = (IVMRWindowlessControl9)VMRenderer;

            // set clipping window
            hr = WindowlessCtrl.SetVideoClippingWindow(_DisplayPanel.Handle);
            DsError.ThrowExceptionForHR(hr);

            // Set Aspect-Ratio
            hr = WindowlessCtrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
            DsError.ThrowExceptionForHR(hr);

            // Add delegates for Windowless operations
            _DisplayPanel.Paint  += new PaintEventHandler(HostingControl_Paint);                          // for WM_PAINT
            _DisplayPanel.Resize += new EventHandler(HostingControl_ResizeMove);                          // for WM_SIZE
            _DisplayPanel.Move   += new EventHandler(HostingControl_ResizeMove);                          // for WM_MOVE
            SystemEvents.DisplaySettingsChanged += new EventHandler(SystemEvents_DisplaySettingsChanged); // for WM_DISPLAYCHANGE
            _bHandlersAdded = true;

            // Call the resize handler to configure the output size
            HostingControl_ResizeMove(null, null);

            hr = FilterGraph.AddFilter(VMRenderer, "Video Mixing Renderer 9");
            DsError.ThrowExceptionForHR(hr);
        }
コード例 #15
0
        private void CloseInterfaces()
        {
            if (mediaControl != null)
            {
                mediaControl.Stop();
            }

            if (vmr9 != null)
            {
                Marshal.ReleaseComObject(vmr9);
                vmr9           = null;
                windowlessCtrl = null;
            }

            if (graphBuilder != null)
            {
                Marshal.ReleaseComObject(graphBuilder);
                graphBuilder  = null;
                mediaControl  = null;
                mediaSeeking  = null;
                mediaPosition = null;
            }
        }
コード例 #16
0
 public void CloseInterfaces()
 {
     if (this.VMRenderer != null)
     {
         Marshal.ReleaseComObject(this.VMRenderer);
         this.VMRenderer     = null;
         this.WindowlessCtrl = null;
         this.MixerBitmap    = null;
     }
     if (this.FilterGraph != null)
     {
         Marshal.ReleaseComObject(this.FilterGraph);
         this.FilterGraph  = null;
         this.MediaControl = null;
     }
     if (this.SmartTee != null)
     {
         Marshal.ReleaseComObject(this.SmartTee);
         this.SmartTee = null;
     }
     if (this.SampleGrabber != null)
     {
         Marshal.ReleaseComObject(this.SampleGrabber);
         this.SampleGrabber       = null;
         this.SampleGrabberFilter = null;
     }
     if (this.CaptureFilter != null)
     {
         Marshal.ReleaseComObject(this.CaptureFilter);
         this.CaptureFilter = null;
     }
     if (this.Crossbar != null)
     {
         Marshal.ReleaseComObject(this.Crossbar);
         this.Crossbar = null;
     }
 }
コード例 #17
0
ファイル: MainForm.cs プロジェクト: d3x0r/xperdex
        private void ConfigureVMR9InWindowlessMode()
        {
            int hr = 0;

            IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9)vmr9;

            // Must be called before calling SetImageCompositor
            hr = filterConfig.SetNumberOfStreams(1);
            DsError.ThrowExceptionForHR(hr);

            // Create an instance of the Compositor
            compositor = new Compositor();

            // Configure the filter with the Compositor
            hr = filterConfig.SetImageCompositor(compositor);
            DsError.ThrowExceptionForHR(hr);

            // Change VMR9 mode to Windowless
            hr = filterConfig.SetRenderingMode(VMR9Mode.Windowless);
            DsError.ThrowExceptionForHR(hr);

            windowlessCtrl = (IVMRWindowlessControl9)vmr9;

            // Set rendering window
            hr = windowlessCtrl.SetVideoClippingWindow(renderingPanel.Handle);
            DsError.ThrowExceptionForHR(hr);

            // Set Aspect-Ratio
            hr = windowlessCtrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
            DsError.ThrowExceptionForHR(hr);

            // Add delegates for Windowless operations
            AddHandlers();

            // Call the resize handler to configure the output size
            MainForm_ResizeMove(null, null);
        }
コード例 #18
0
ファイル: Grabber.cs プロジェクト: RoChess/mvcentral
        private void ConfigureVMR9InWindowlessMode()
        {
            int hr = 0;

            IVMRFilterConfig9 _filterConfig = (IVMRFilterConfig9)_vmr9Filter;

            // Not really needed for VMR9 but don't forget calling it with VMR7
            hr = _filterConfig.SetNumberOfStreams(1);
            DsError.ThrowExceptionForHR(hr);

            // Change VMR9 mode to Windowless
            hr = _filterConfig.SetRenderingMode(VMR9Mode.Windowless);
            DsError.ThrowExceptionForHR(hr);

            windowlessCtrl = (IVMRWindowlessControl9)_vmr9Filter;

            // Set "Parent" window
            hr = windowlessCtrl.SetVideoClippingWindow(this.panVideoWin.Handle);
            DsError.ThrowExceptionForHR(hr);

            // Set Aspect-Ratio
            hr = windowlessCtrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
            DsError.ThrowExceptionForHR(hr);
        }
コード例 #19
0
ファイル: AVPlayer.cs プロジェクト: DeSciL/Ogama
    private void LoadMovieInWindow(string filename)
    {
      int hr = 0;

      if (filename == string.Empty)
        return;

      this.graphBuilder = (IGraphBuilder)new FilterGraph();
      this.captureGraphBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
      this.vmr9 = new VideoMixingRenderer9();
      this.vmrConfig = this.vmr9 as IVMRFilterConfig9;

      // Attach the filter graph to the capture graph
      hr = this.captureGraphBuilder.SetFiltergraph(this.graphBuilder);
      DsError.ThrowExceptionForHR(hr);

      hr = this.graphBuilder.AddFilter(vmr9 as IBaseFilter, "VideoMixingRenderer9");
      DsError.ThrowExceptionForHR(hr);

      hr = this.vmrConfig.SetRenderingMode(VMR9Mode.Windowless);
      DsError.ThrowExceptionForHR(hr);
      this.windowLessControl = this.vmr9 as IVMRWindowlessControl9;
      this.windowLessControl.SetVideoClippingWindow(this.Handle);
      this.windowLessControl.SetVideoPosition(null, new DsRect(0, 0, this.ClientSize.Width, this.ClientSize.Height));

      IBaseFilter fileSourceFilter;
      hr = this.graphBuilder.AddSourceFilter(filename, "WebCamSource", out fileSourceFilter);
      DsError.ThrowExceptionForHR(hr);

      hr = this.captureGraphBuilder.RenderStream(null, null, fileSourceFilter, null, vmr9 as IBaseFilter);
      DsError.ThrowExceptionForHR(hr);

      //// Have the graph builder construct its the appropriate graph automatically
      //hr = this.graphBuilder.RenderFile(filename, null);
      //DsError.ThrowExceptionForHR(hr);

      // QueryInterface for DirectShow interfaces
      this.mediaControl = (IMediaControl)this.graphBuilder;
      //this.mediaEventEx = (IMediaEventEx)this.graphBuilder;
      this.mediaSeeking = (IMediaSeeking)this.graphBuilder;
      //this.mediaPosition = (IMediaPosition)this.graphBuilder;

      // Query for video interfaces, which may not be relevant for audio files
      ////this.videoWindow = this.graphBuilder as IVideoWindow;
      this.basicVideo = this.graphBuilder as IBasicVideo;

      // Query for audio interfaces, which may not be relevant for video-only files
      this.basicAudio = this.graphBuilder as IBasicAudio;

      // Is this an audio-only file (no video component)?
      CheckVisibility();

      //// Have the graph signal event via window callbacks for performance
      //hr = this.mediaEventEx.SetNotifyWindow(this.Handle, WMGraphNotify, IntPtr.Zero);
      //DsError.ThrowExceptionForHR(hr);

      if (!this.isAudioOnly)
      {
        this.windowLessControl = this.vmr9 as IVMRWindowlessControl9;
        this.windowLessControl.SetVideoClippingWindow(this.Handle);
        this.windowLessControl.SetVideoPosition(null, new DsRect(0, 0, this.ClientSize.Width, this.ClientSize.Height));

        //hr = InitVideoWindow();
        //DsError.ThrowExceptionForHR(hr);

        GetFrameStepInterface();
      }

      // Complete window initialization
      //this.isFullScreen = false;
      this.currentPlaybackRate = 1.0;
      //UpdateToolTip();

#if DEBUG
      rot = new DsROTEntry(this.graphBuilder);
#endif
    }
コード例 #20
0
        /// <summary>
        /// Closes and releases all used interfaces.
        /// </summary>
        public void CloseInterfaces()
        {
            if (VMRenderer != null)
            {
                Marshal.ReleaseComObject(VMRenderer);
                VMRenderer = null;
                WindowlessCtrl = null;
                MixerBitmap = null;
            }

            if (FilterGraph != null)
            {
                Marshal.ReleaseComObject(FilterGraph);
                FilterGraph = null;
                MediaControl = null;
            }

            if (SmartTee != null)
            {
                Marshal.ReleaseComObject(SmartTee);
                SmartTee = null;
            }

            if (SampleGrabber != null)
            {
                Marshal.ReleaseComObject(SampleGrabber);
                SampleGrabber = null;
                SampleGrabberFilter = null;
            }

            if (CaptureFilter != null)
            {
                Marshal.ReleaseComObject(CaptureFilter);
                CaptureFilter = null;
            }

            if (Crossbar != null)
            {
                Marshal.ReleaseComObject(Crossbar);
                Crossbar = null;
            }
        }
コード例 #21
0
 public void SetRendererInterfaces(IVMRWindowlessControl VMRWindowlessControl,
                                   IVMRWindowlessControl9 VMRWindowlessControl9,
                                   IMFVideoDisplayControl MFVideoDisplayControl)
 {
     _manager.SetRunning(true, VMRWindowlessControl, VMRWindowlessControl9, MFVideoDisplayControl);
 }
コード例 #22
0
ファイル: MainForm.cs プロジェクト: adambyram/pimaker
        private void CloseInterfaces()
        {
            if (mediaControl != null)
                mediaControl.Stop();

            if (handlersAdded)
                RemoveHandlers();

            if (vmr9 != null)
            {
                Marshal.ReleaseComObject(vmr9);
                vmr9 = null;
                windowlessCtrl = null;
                mixerBitmap = null;
            }

            if (graphBuilder != null)
            {
                Marshal.ReleaseComObject(graphBuilder);
                graphBuilder = null;
                mediaControl = null;
            }

            menuMixer.Enabled = false;
        }
コード例 #23
0
ファイル: MainForm.cs プロジェクト: adambyram/pimaker
        private void ConfigureVMR9InWindowlessMode()
        {
            int hr = 0;

            IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9) vmr9;

            // Not really needed for VMR9 but don't forget calling it with VMR7
            hr = filterConfig.SetNumberOfStreams(1);
            DsError.ThrowExceptionForHR(hr);

            // Change VMR9 mode to Windowless
            hr = filterConfig.SetRenderingMode(VMR9Mode.Windowless);
            DsError.ThrowExceptionForHR(hr);

            windowlessCtrl = (IVMRWindowlessControl9) vmr9;

            // Set "Parent" window
            hr = windowlessCtrl.SetVideoClippingWindow(this.Handle);
            DsError.ThrowExceptionForHR(hr);

            // Set Aspect-Ratio
            hr = windowlessCtrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
            DsError.ThrowExceptionForHR(hr);

            // Add delegates for Windowless operations
            AddHandlers();

            // Call the resize handler to configure the output size
            MainForm_ResizeMove(null, null);
        }
コード例 #24
0
ファイル: Grabber.cs プロジェクト: andrewjswan/mvcentral
        /// <summary> create the used COM components and get the interfaces. </summary>
        protected virtual bool GetDVDInterfaces(string path)
        {
            int hr;
            //Type	            comtype = null;
            object comobj = null;
            _freeNavigator = true;
            _dvdInfo = null;
            _dvdCtrl = null;
            bool useAC3Filter = false;
            string dvdNavigator = "";
            string aspectRatioMode = "";
            string displayMode = "";
            _videoPref = DvdPreferredDisplayMode.DisplayContentDefault;
            using (MediaPortal.Profile.Settings xmlreader = new MPSettings())
            {
                dvdNavigator = xmlreader.GetValueAsString("dvdplayer", "navigator", "DVD Navigator");
                aspectRatioMode = xmlreader.GetValueAsString("dvdplayer", "armode", "").ToLower();

                dvdNavigator = "dslibdvdnav";

                if (aspectRatioMode == "crop")
                {
                    arMode = AspectRatioMode.Crop;
                }
                if (aspectRatioMode == "letterbox")
                {
                    arMode = AspectRatioMode.LetterBox;
                }
                if (aspectRatioMode == "stretch")
                {
                    arMode = AspectRatioMode.Stretched;
                }
                //if ( aspectRatioMode == "stretch" ) arMode = AspectRatioMode.zoom14to9;
                if (aspectRatioMode == "follow stream")
                {
                    arMode = AspectRatioMode.StretchedAsPrimary;
                }
                useAC3Filter = xmlreader.GetValueAsBool("dvdplayer", "ac3", false);
                displayMode = xmlreader.GetValueAsString("dvdplayer", "displaymode", "").ToLower();
                if (displayMode == "default")
                {
                    _videoPref = DvdPreferredDisplayMode.DisplayContentDefault;
                }
                if (displayMode == "16:9")
                {
                    _videoPref = DvdPreferredDisplayMode.Display16x9;
                }
                if (displayMode == "4:3 pan scan")
                {
                    _videoPref = DvdPreferredDisplayMode.Display4x3PanScanPreferred;
                }
                if (displayMode == "4:3 letterbox")
                {
                    _videoPref = DvdPreferredDisplayMode.Display4x3LetterBoxPreferred;
                }
            }
            try
            {
                _dvdGraph = (IDvdGraphBuilder)new DvdGraphBuilder();

                hr = _dvdGraph.GetFiltergraph(out _graphBuilder);
                if (hr < 0)
                {
                    Marshal.ThrowExceptionForHR(hr);
                }
                _rotEntry = new DsROTEntry((IFilterGraph)_graphBuilder);

                _vmr9Filter = (IBaseFilter)new VideoMixingRenderer9();
                IVMRFilterConfig9 config = _vmr9Filter as IVMRFilterConfig9;
                hr = config.SetNumberOfStreams(1);
                hr = config.SetRenderingMode(VMR9Mode.Windowless);
                windowlessCtrl = (IVMRWindowlessControl9)_vmr9Filter;
                windowlessCtrl.SetVideoClippingWindow(this.panVideoWin.Handle);

                //                config.SetRenderingPrefs(VMR9RenderPrefs.

                _graphBuilder.AddFilter(_vmr9Filter, "Video Mixing Renderer 9");

             //               _vmr7 = new VMR7Util();
             //               _vmr7.AddVMR7(_graphBuilder);

                try
                {
                    _dvdbasefilter = DirectShowUtil.AddFilterToGraph(_graphBuilder, dvdNavigator);
                    if (_dvdbasefilter != null)
                    {
                        IDvdControl2 cntl = (IDvdControl2)_dvdbasefilter;
                        if (cntl != null)
                        {
                            _dvdInfo = (IDvdInfo2)cntl;
                            _dvdCtrl = (IDvdControl2)cntl;
                            if (path != null)
                            {
                                if (path.Length != 0)
                                {
                                    cntl.SetDVDDirectory(path);
                                }
                            }
                            _dvdCtrl.SetOption(DvdOptionFlag.HMSFTimeCodeEvents, true); // use new HMSF timecode format
                            _dvdCtrl.SetOption(DvdOptionFlag.ResetOnStop, false);

                            AddPreferedCodecs(_graphBuilder);
                            DirectShowUtil.RenderOutputPins(_graphBuilder, _dvdbasefilter);

            //                            _videoWin = _graphBuilder as IVideoWindow;
                            _freeNavigator = false;
                        }

                        //DirectShowUtil.ReleaseComObject( _dvdbasefilter); _dvdbasefilter = null;
                    }
                }
                catch (Exception ex)
                {
                    string strEx = ex.Message;
                }

                Guid riid;

                if (_dvdInfo == null)
                {
                    riid = typeof(IDvdInfo2).GUID;
                    hr = _dvdGraph.GetDvdInterface(riid, out comobj);
                    if (hr < 0)
                    {
                        Marshal.ThrowExceptionForHR(hr);
                    }
                    _dvdInfo = (IDvdInfo2)comobj;
                    comobj = null;
                }

                if (_dvdCtrl == null)
                {
                    riid = typeof(IDvdControl2).GUID;
                    hr = _dvdGraph.GetDvdInterface(riid, out comobj);
                    if (hr < 0)
                    {
                        Marshal.ThrowExceptionForHR(hr);
                    }
                    _dvdCtrl = (IDvdControl2)comobj;
                    comobj = null;
                }

                _mediaCtrl = (IMediaControl)_graphBuilder;
                _mediaEvt = (IMediaEventEx)_graphBuilder;
                _basicAudio = _graphBuilder as IBasicAudio;
                _mediaPos = (IMediaPosition)_graphBuilder;
                _mediaSeek = (IMediaSeeking)_graphBuilder;
                _mediaStep = (IVideoFrameStep)_graphBuilder;
                _basicVideo = _graphBuilder as IBasicVideo2;
                _videoWin = _graphBuilder as IVideoWindow;

                // disable Closed Captions!
                IBaseFilter baseFilter;
                _graphBuilder.FindFilterByName("Line 21 Decoder", out baseFilter);
                if (baseFilter == null)
                {
                    _graphBuilder.FindFilterByName("Line21 Decoder", out baseFilter);
                }
                if (baseFilter != null)
                {
                    _line21Decoder = (IAMLine21Decoder)baseFilter;
                    if (_line21Decoder != null)
                    {
                        AMLine21CCState state = AMLine21CCState.Off;
                        hr = _line21Decoder.SetServiceState(state);
                        if (hr == 0)
                        {
                            logger.Info("DVDPlayer:Closed Captions disabled");
                        }
                        else
                        {
                            logger.Info("DVDPlayer:failed 2 disable Closed Captions");
                        }
                    }
                }
                /*
                        // get video window
                        if (_videoWin==null)
                        {
                          riid = typeof( IVideoWindow ).GUID;
                          hr = _dvdGraph.GetDvdInterface( ref riid, out comobj );
                          if( hr < 0 )
                            Marshal.ThrowExceptionForHR( hr );
                          _videoWin = (IVideoWindow) comobj; comobj = null;
                        }
                  */
                // GetFrameStepInterface();

                DirectShowUtil.SetARMode(_graphBuilder, arMode);
                DirectShowUtil.EnableDeInterlace(_graphBuilder);
                //m_ovMgr = new OVTOOLLib.OvMgrClass();
                //m_ovMgr.SetGraph(_graphBuilder);

                return true;
            }
            catch (Exception)
            {

                //MessageBox.Show( this, "Could not get interfaces\r\n" + ee.Message, "DVDPlayer.NET", MessageBoxButtons.OK, MessageBoxIcon.Stop );
                CloseDVDInterfaces();
                return false;
            }
            finally
            {
                if (comobj != null)
                {
                    DirectShowUtil.ReleaseComObject(comobj);
                }
                comobj = null;
            }
        }
コード例 #25
0
ファイル: Grabber.cs プロジェクト: andrewjswan/mvcentral
        private void ConfigureVMR9InWindowlessMode()
        {
            int hr = 0;

            IVMRFilterConfig9 _filterConfig = (IVMRFilterConfig9)_vmr9Filter ;

            // Not really needed for VMR9 but don't forget calling it with VMR7
            hr = _filterConfig.SetNumberOfStreams(1);
            DsError.ThrowExceptionForHR(hr);

            // Change VMR9 mode to Windowless
            hr = _filterConfig.SetRenderingMode(VMR9Mode.Windowless);
            DsError.ThrowExceptionForHR(hr);

            windowlessCtrl = (IVMRWindowlessControl9)_vmr9Filter;

            // Set "Parent" window
            hr = windowlessCtrl.SetVideoClippingWindow(this.panVideoWin.Handle);
            DsError.ThrowExceptionForHR(hr);

            // Set Aspect-Ratio
            hr = windowlessCtrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
            DsError.ThrowExceptionForHR(hr);
        }
コード例 #26
0
        private void ConfigureVMR9InWindowlessMode()
        {
            int hr = 0;

              IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9)vmr9;

              // Must be called before calling SetImageCompositor
              hr = filterConfig.SetNumberOfStreams(1);
              DsError.ThrowExceptionForHR(hr);

              // Create an instance of the Compositor
              compositor = new Compositor();

              // Configure the filter with the Compositor
              hr = filterConfig.SetImageCompositor(compositor);
              DsError.ThrowExceptionForHR(hr);

              // Change VMR9 mode to Windowless
              hr = filterConfig.SetRenderingMode(VMR9Mode.Windowless);
              DsError.ThrowExceptionForHR(hr);

              windowlessCtrl = (IVMRWindowlessControl9)vmr9;

              // Set rendering window
              hr = windowlessCtrl.SetVideoClippingWindow(renderingPanel.Handle);
              DsError.ThrowExceptionForHR(hr);

              // Set Aspect-Ratio
              hr = windowlessCtrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
              DsError.ThrowExceptionForHR(hr);

              // Add delegates for Windowless operations
              AddHandlers();

              // Call the resize handler to configure the output size
              MainForm_ResizeMove(null, null);
        }
コード例 #27
0
        void initGraph(Rectangle rect, IntPtr hwnd)
        {
            log.writeLog("Init Graph");
            pGB           = (IGraphBuilder) new FilterGraph();
            pVmr          = (IBaseFilter) new VideoMixingRenderer9();
            compressVideo = CreateFilter(FilterCategory.VideoCompressorCategory, lstCompressor[3]);
            pGB.AddFilter(pVmr, "Video");
            pGB.AddFilter(captureVideo, "VideoCapture");
            //pGB.AddFilter(compressVideo, "Encoder");

            pConfig = (IVMRFilterConfig9)pVmr;
            pConfig.SetRenderingMode(VMR9Mode.Windowless);
            pWC = (IVMRWindowlessControl9)pVmr;

            pWC.SetVideoPosition(null, DsRect.FromRectangle(rect));
            pWC.SetVideoClippingWindow(hwnd);

            pMix = (IVMRMixerControl9)pVmr;
            pMs  = (IMediaSeeking)pGB;
            pMC  = (IMediaControl)pGB;

            ICaptureGraphBuilder2 cc = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();

            cc.SetFiltergraph(pGB);
            pGB.AddFilter(devices[0], "Camera-1");
            if (devices[1] != null)
            {
                pGB.AddFilter(devices[1], "Camera-2");
            }
            pGB.AddFilter(audioCapture, "Audio Capture");

            Rectangle win = rect;
            float     _w  = win.Width;
            float     _H  = win.Height;

            NormalizedRect _0rect = new NormalizedRect();

            _0rect.top    = win.Top;
            _0rect.left   = win.Left;
            _0rect.right  = (win.Left + win.Width / 2) / _w;
            _0rect.bottom = (win.Bottom / _H);

            NormalizedRect _1rect = new NormalizedRect();

            _1rect.top    = win.Top;
            _1rect.left   = (win.Left + win.Width / 2) / _w;;
            _1rect.right  = win.Right / _w;
            _1rect.bottom = win.Bottom / _H;

            pMix.SetOutputRect(0, _0rect);
            pMix.SetOutputRect(1, _1rect);

            int             hr   = 0;
            IFileSinkFilter sink = null;

            log.writeLog("SetOutputFileName create");
            hr = cc.SetOutputFileName(MediaSubType.Avi, "VideoCaptured.avi", out captureVideo, out sink);
            DsError.ThrowExceptionForHR(hr);
            log.writeLog("SetOutputFileName success");
            log.writeLog("Start create cam-1 to preview");
            hr = cc.RenderStream(PinCategory.Preview, MediaType.Video, devices[0], null, pVmr);
            DsError.ThrowExceptionForHR(hr);
            log.writeLog("Start cam-1 to preview success");
            if (devices[1] != null)
            {
                log.writeLog("Start create cam-2 to preview");
                hr = cc.RenderStream(PinCategory.Preview, MediaType.Video, devices[1], null, pVmr);
                DsError.ThrowExceptionForHR(hr);
                log.writeLog("Create cam-2 to preview success");
            }
            log.writeLog("Start capture video from cam-1");
            hr = cc.RenderStream(PinCategory.Capture, MediaType.Video, devices[0], null, captureVideo);
            DsError.ThrowExceptionForHR(hr);
            log.writeLog("success create capture from cam-1");
            log.writeLog("Start capture audio");
            hr = cc.RenderStream(PinCategory.Capture, MediaType.Audio, audioCapture, null, captureVideo);
            DsError.ThrowExceptionForHR(hr);
            log.writeLog("Success to capture audio");

            Marshal.ReleaseComObject(cc);
        }
コード例 #28
0
        /// <summary>
        /// Close and dispose all camera and DirectX stuff.
        /// </summary>
        public void Dispose()
        {
            _bGraphIsBuilt = false;

            // stop rendering
            if (MediaControl != null)
            {
                try
                {
                    MediaControl.StopWhenReady();
                    MediaControl.Stop();
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                }
            }

            if (_bHandlersAdded)
            {
                // remove handlers when they are no more needed
                _bHandlersAdded       = false;
                _DisplayPanel.Paint  -= new PaintEventHandler(HostingControl_Paint);
                _DisplayPanel.Resize -= new EventHandler(HostingControl_ResizeMove);
                _DisplayPanel.Move   -= new EventHandler(HostingControl_ResizeMove);
                SystemEvents.DisplaySettingsChanged -= new EventHandler(SystemEvents_DisplaySettingsChanged);
            }

            // Dispose Managed Direct3D objects
            if (_pSampleGrabberHelper != null)
            {
                _pSampleGrabberHelper.Dispose();
                _pSampleGrabberHelper = null;
            }

            if (VMRenderer != null)
            {
                Marshal.ReleaseComObject(VMRenderer);
                VMRenderer     = null;
                WindowlessCtrl = null;
            }

            if (FilterGraph != null)
            {
                Marshal.ReleaseComObject(FilterGraph);
                FilterGraph  = null;
                MediaControl = null;
            }

            if (SmartTee != null)
            {
                Marshal.ReleaseComObject(SmartTee);
                SmartTee = null;
            }

            if (SampleGrabber != null)
            {
                Marshal.ReleaseComObject(SampleGrabber);
                SampleGrabber       = null;
                SampleGrabberFilter = null;
            }

            if (CaptureFilter != null)
            {
                Marshal.ReleaseComObject(CaptureFilter);
                CaptureFilter = null;
            }
            return;
        }
コード例 #29
0
        private void CloseInterfaces()
        {
            if (mediaControl != null)
            mediaControl.Stop();

              if (rot != null)
              {
            rot.Dispose();
            rot = null;
              }

              RemoveHandlers();

              if (compositor != null)
              {
            compositor.Dispose();
            compositor = null;
              }

              if (vmr9 != null)
              {
            Marshal.ReleaseComObject(vmr9);
            vmr9 = null;
            windowlessCtrl = null;
              }

              if (graphBuilder != null)
              {
            Marshal.ReleaseComObject(graphBuilder);
            graphBuilder = null;
            mediaControl = null;
              }
        }
コード例 #30
0
ファイル: AVPlayer.cs プロジェクト: zhjh-stack/ogama
        private void LoadMovieInWindow(string filename)
        {
            int hr = 0;

            if (filename == string.Empty)
            {
                return;
            }

            this.graphBuilder        = (IGraphBuilder) new FilterGraph();
            this.captureGraphBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
            this.vmr9      = new VideoMixingRenderer9();
            this.vmrConfig = this.vmr9 as IVMRFilterConfig9;

            // Attach the filter graph to the capture graph
            hr = this.captureGraphBuilder.SetFiltergraph(this.graphBuilder);
            DsError.ThrowExceptionForHR(hr);

            hr = this.graphBuilder.AddFilter(vmr9 as IBaseFilter, "VideoMixingRenderer9");
            DsError.ThrowExceptionForHR(hr);

            hr = this.vmrConfig.SetRenderingMode(VMR9Mode.Windowless);
            DsError.ThrowExceptionForHR(hr);
            this.windowLessControl = this.vmr9 as IVMRWindowlessControl9;
            this.windowLessControl.SetVideoClippingWindow(this.Handle);
            this.windowLessControl.SetVideoPosition(null, new DsRect(0, 0, this.ClientSize.Width, this.ClientSize.Height));

            IBaseFilter fileSourceFilter;

            hr = this.graphBuilder.AddSourceFilter(filename, "WebCamSource", out fileSourceFilter);
            DsError.ThrowExceptionForHR(hr);

            hr = this.captureGraphBuilder.RenderStream(null, null, fileSourceFilter, null, vmr9 as IBaseFilter);
            DsError.ThrowExceptionForHR(hr);

            //// Have the graph builder construct its the appropriate graph automatically
            //hr = this.graphBuilder.RenderFile(filename, null);
            //DsError.ThrowExceptionForHR(hr);

            // QueryInterface for DirectShow interfaces
            this.mediaControl = (IMediaControl)this.graphBuilder;
            //this.mediaEventEx = (IMediaEventEx)this.graphBuilder;
            this.mediaSeeking = (IMediaSeeking)this.graphBuilder;
            //this.mediaPosition = (IMediaPosition)this.graphBuilder;

            // Query for video interfaces, which may not be relevant for audio files
            ////this.videoWindow = this.graphBuilder as IVideoWindow;
            this.basicVideo = this.graphBuilder as IBasicVideo;

            // Query for audio interfaces, which may not be relevant for video-only files
            this.basicAudio = this.graphBuilder as IBasicAudio;

            // Is this an audio-only file (no video component)?
            CheckVisibility();

            //// Have the graph signal event via window callbacks for performance
            //hr = this.mediaEventEx.SetNotifyWindow(this.Handle, WMGraphNotify, IntPtr.Zero);
            //DsError.ThrowExceptionForHR(hr);

            if (!this.isAudioOnly)
            {
                this.windowLessControl = this.vmr9 as IVMRWindowlessControl9;
                this.windowLessControl.SetVideoClippingWindow(this.Handle);
                this.windowLessControl.SetVideoPosition(null, new DsRect(0, 0, this.ClientSize.Width, this.ClientSize.Height));

                //hr = InitVideoWindow();
                //DsError.ThrowExceptionForHR(hr);

                GetFrameStepInterface();
            }

            // Complete window initialization
            //this.isFullScreen = false;
            this.currentPlaybackRate = 1.0;
            //UpdateToolTip();

#if DEBUG
            rot = new DsROTEntry(this.graphBuilder);
#endif
        }
コード例 #31
0
ファイル: DirectXInterfaces.cs プロジェクト: 0000duck/kangjia
        /// <summary>
        /// Closes and releases all used interfaces.
        /// </summary>
        public void CloseInterfaces()
        {
            try
            {
                if (VMRenderer != null)
                {
                    try
                    {
                        Marshal.ReleaseComObject(VMRenderer);
                    }
                    catch { }
                    VMRenderer     = null;
                    WindowlessCtrl = null;
                    MixerBitmap    = null;
                }

                if (FilterGraph != null)
                {
                    try
                    {
                        Marshal.ReleaseComObject(FilterGraph);
                    }
                    catch { }
                    FilterGraph  = null;
                    MediaControl = null;
                }

                if (SmartTee != null)
                {
                    try
                    {
                        Marshal.ReleaseComObject(SmartTee);
                    }
                    catch { }
                    SmartTee = null;
                }

                if (SampleGrabber != null)
                {
                    try
                    {
                        Marshal.ReleaseComObject(SampleGrabber);
                    }
                    catch { }
                    SampleGrabber       = null;
                    SampleGrabberFilter = null;
                }

                if (CaptureFilter != null)
                {
                    try
                    {
                        Marshal.ReleaseComObject(CaptureFilter);
                    }
                    catch { }
                    CaptureFilter = null;
                }

                if (Crossbar != null)
                {
                    try
                    {
                        Marshal.ReleaseComObject(Crossbar);
                    }
                    catch { }
                    Crossbar = null;
                }
            }
            catch { }
        }
コード例 #32
0
ファイル: framegrabber.cs プロジェクト: andrewjswan/mvcentral
        private void CloseInterfaces()
        {
            if (mediaControl != null)
                 mediaControl.Stop();

             if (vmr9 != null)
             {
                 Marshal.ReleaseComObject(vmr9);
                 vmr9 = null;
                 windowlessCtrl = null;
             }

             if (graphBuilder != null)
             {
                 Marshal.ReleaseComObject(graphBuilder);
                 graphBuilder = null;
                 mediaControl = null;
                 mediaSeeking = null;
                 mediaPosition = null;
             }
        }
コード例 #33
0
ファイル: Grabber.cs プロジェクト: RoChess/mvcentral
        /// <summary> create the used COM components and get the interfaces. </summary>
        protected virtual bool GetDVDInterfaces(string path)
        {
            int hr;
            //Type	            comtype = null;
            object comobj = null;

            _freeNavigator = true;
            _dvdInfo       = null;
            _dvdCtrl       = null;
            bool   useAC3Filter    = false;
            string dvdNavigator    = "";
            string aspectRatioMode = "";
            string displayMode     = "";

            _videoPref = DvdPreferredDisplayMode.DisplayContentDefault;
            using (MediaPortal.Profile.Settings xmlreader = new MPSettings())
            {
                dvdNavigator    = xmlreader.GetValueAsString("dvdplayer", "navigator", "DVD Navigator");
                aspectRatioMode = xmlreader.GetValueAsString("dvdplayer", "armode", "").ToLower();

                dvdNavigator = "dslibdvdnav";

                if (aspectRatioMode == "crop")
                {
                    arMode = AspectRatioMode.Crop;
                }
                if (aspectRatioMode == "letterbox")
                {
                    arMode = AspectRatioMode.LetterBox;
                }
                if (aspectRatioMode == "stretch")
                {
                    arMode = AspectRatioMode.Stretched;
                }
                //if ( aspectRatioMode == "stretch" ) arMode = AspectRatioMode.zoom14to9;
                if (aspectRatioMode == "follow stream")
                {
                    arMode = AspectRatioMode.StretchedAsPrimary;
                }
                useAC3Filter = xmlreader.GetValueAsBool("dvdplayer", "ac3", false);
                displayMode  = xmlreader.GetValueAsString("dvdplayer", "displaymode", "").ToLower();
                if (displayMode == "default")
                {
                    _videoPref = DvdPreferredDisplayMode.DisplayContentDefault;
                }
                if (displayMode == "16:9")
                {
                    _videoPref = DvdPreferredDisplayMode.Display16x9;
                }
                if (displayMode == "4:3 pan scan")
                {
                    _videoPref = DvdPreferredDisplayMode.Display4x3PanScanPreferred;
                }
                if (displayMode == "4:3 letterbox")
                {
                    _videoPref = DvdPreferredDisplayMode.Display4x3LetterBoxPreferred;
                }
            }
            try
            {
                _dvdGraph = (IDvdGraphBuilder) new DvdGraphBuilder();

                hr = _dvdGraph.GetFiltergraph(out _graphBuilder);
                if (hr < 0)
                {
                    Marshal.ThrowExceptionForHR(hr);
                }
                _rotEntry = new DsROTEntry((IFilterGraph)_graphBuilder);

                _vmr9Filter = (IBaseFilter) new VideoMixingRenderer9();
                IVMRFilterConfig9 config = _vmr9Filter as IVMRFilterConfig9;
                hr             = config.SetNumberOfStreams(1);
                hr             = config.SetRenderingMode(VMR9Mode.Windowless);
                windowlessCtrl = (IVMRWindowlessControl9)_vmr9Filter;
                windowlessCtrl.SetVideoClippingWindow(this.panVideoWin.Handle);


                //                config.SetRenderingPrefs(VMR9RenderPrefs.

                _graphBuilder.AddFilter(_vmr9Filter, "Video Mixing Renderer 9");

                //               _vmr7 = new VMR7Util();
                //               _vmr7.AddVMR7(_graphBuilder);

                try
                {
                    _dvdbasefilter = DirectShowUtil.AddFilterToGraph(_graphBuilder, dvdNavigator);
                    if (_dvdbasefilter != null)
                    {
                        IDvdControl2 cntl = (IDvdControl2)_dvdbasefilter;
                        if (cntl != null)
                        {
                            _dvdInfo = (IDvdInfo2)cntl;
                            _dvdCtrl = (IDvdControl2)cntl;
                            if (path != null)
                            {
                                if (path.Length != 0)
                                {
                                    cntl.SetDVDDirectory(path);
                                }
                            }
                            _dvdCtrl.SetOption(DvdOptionFlag.HMSFTimeCodeEvents, true); // use new HMSF timecode format
                            _dvdCtrl.SetOption(DvdOptionFlag.ResetOnStop, false);

                            AddPreferedCodecs(_graphBuilder);
                            DirectShowUtil.RenderOutputPins(_graphBuilder, _dvdbasefilter);


//                            _videoWin = _graphBuilder as IVideoWindow;
                            _freeNavigator = false;
                        }

                        //DirectShowUtil.ReleaseComObject( _dvdbasefilter); _dvdbasefilter = null;
                    }
                }
                catch (Exception ex)
                {
                    string strEx = ex.Message;
                }

                Guid riid;

                if (_dvdInfo == null)
                {
                    riid = typeof(IDvdInfo2).GUID;
                    hr   = _dvdGraph.GetDvdInterface(riid, out comobj);
                    if (hr < 0)
                    {
                        Marshal.ThrowExceptionForHR(hr);
                    }
                    _dvdInfo = (IDvdInfo2)comobj;
                    comobj   = null;
                }

                if (_dvdCtrl == null)
                {
                    riid = typeof(IDvdControl2).GUID;
                    hr   = _dvdGraph.GetDvdInterface(riid, out comobj);
                    if (hr < 0)
                    {
                        Marshal.ThrowExceptionForHR(hr);
                    }
                    _dvdCtrl = (IDvdControl2)comobj;
                    comobj   = null;
                }

                _mediaCtrl  = (IMediaControl)_graphBuilder;
                _mediaEvt   = (IMediaEventEx)_graphBuilder;
                _basicAudio = _graphBuilder as IBasicAudio;
                _mediaPos   = (IMediaPosition)_graphBuilder;
                _mediaSeek  = (IMediaSeeking)_graphBuilder;
                _mediaStep  = (IVideoFrameStep)_graphBuilder;
                _basicVideo = _graphBuilder as IBasicVideo2;
                _videoWin   = _graphBuilder as IVideoWindow;

                // disable Closed Captions!
                IBaseFilter baseFilter;
                _graphBuilder.FindFilterByName("Line 21 Decoder", out baseFilter);
                if (baseFilter == null)
                {
                    _graphBuilder.FindFilterByName("Line21 Decoder", out baseFilter);
                }
                if (baseFilter != null)
                {
                    _line21Decoder = (IAMLine21Decoder)baseFilter;
                    if (_line21Decoder != null)
                    {
                        AMLine21CCState state = AMLine21CCState.Off;
                        hr = _line21Decoder.SetServiceState(state);
                        if (hr == 0)
                        {
                            logger.Info("DVDPlayer:Closed Captions disabled");
                        }
                        else
                        {
                            logger.Info("DVDPlayer:failed 2 disable Closed Captions");
                        }
                    }
                }

                /*
                 *      // get video window
                 *      if (_videoWin==null)
                 *      {
                 *        riid = typeof( IVideoWindow ).GUID;
                 *        hr = _dvdGraph.GetDvdInterface( ref riid, out comobj );
                 *        if( hr < 0 )
                 *          Marshal.ThrowExceptionForHR( hr );
                 *        _videoWin = (IVideoWindow) comobj; comobj = null;
                 *      }
                 */
                // GetFrameStepInterface();

                DirectShowUtil.SetARMode(_graphBuilder, arMode);
                DirectShowUtil.EnableDeInterlace(_graphBuilder);
                //m_ovMgr = new OVTOOLLib.OvMgrClass();
                //m_ovMgr.SetGraph(_graphBuilder);

                return(true);
            }
            catch (Exception)
            {
                //MessageBox.Show( this, "Could not get interfaces\r\n" + ee.Message, "DVDPlayer.NET", MessageBoxButtons.OK, MessageBoxIcon.Stop );
                CloseDVDInterfaces();
                return(false);
            }
            finally
            {
                if (comobj != null)
                {
                    DirectShowUtil.ReleaseComObject(comobj);
                }
                comobj = null;
            }
        }
コード例 #34
0
ファイル: DSFileDecoder.cs プロジェクト: anndream/anpr-1
        private void CloseInterfaces()
        {
            while (!m_WaitUntilDoneIsDone)
                Thread.Sleep(1);

            if (!m_WaitUntilDoneIsDone)
            {
                MessageBox.Show("wait not done");

            }

            try
            {
                if (mediaControl != null)
                {
                    mediaControl.Stop();
                    Marshal.ReleaseComObject(mediaControl);
                    mediaControl = null;
                }

                if (mediaPosition != null)
                {
                    Marshal.ReleaseComObject(mediaPosition);
                    mediaPosition = null;
                }
                if (windowlessCtrl != null)
                {
                    Marshal.ReleaseComObject(windowlessCtrl);
                    windowlessCtrl = null;
                }

                if (handlersAdded)
                    RemoveHandlers();

                if (m_MediaEvent != null)
                {
                    Marshal.ReleaseComObject(m_MediaEvent);
                    m_MediaEvent = null;
                }

                if (vmr9 != null)
                {
                    Marshal.ReleaseComObject(vmr9);
                    vmr9 = null;
                    windowlessCtrl = null;
                }

                if (graphBuilder != null)
                {
                    Marshal.ReleaseComObject(graphBuilder);
                    graphBuilder = null;
                    mediaControl = null;
                }
            }
            catch { }
        }