/// <summary> /// Load a video to setup DirectShow. This also initally creates an instance of the DirectX3D Device /// </summary> public static void StartGraph() { int hr = 0; //CloseGraph(); string path = @"opensebj.wmv"; try { graph = (DirectShowLib.IGraphBuilder) new DirectShowLib.FilterGraph(); filter = (DirectShowLib.IBaseFilter) new DirectShowLib.VideoMixingRenderer9(); DirectShowLib.IVMRFilterConfig9 filterConfig = (DirectShowLib.IVMRFilterConfig9)filter; hr = filterConfig.SetRenderingMode(VMR9Mode.Renderless); DsError.ThrowExceptionForHR(hr); hr = filterConfig.SetNumberOfStreams(2); DsError.ThrowExceptionForHR(hr); SetAllocatorPresenter(); hr = graph.AddFilter(filter, "Video Mixing Renderer 9"); DsError.ThrowExceptionForHR(hr); hr = graph.RenderFile(path, null); DsError.ThrowExceptionForHR(hr); mediaControl = (DirectShowLib.IMediaControl)graph; } catch { } }
public static void startSecond() { initDSArrays(); filter1 = (DirectShowLib.IBaseFilter) new DirectShowLib.VideoMixingRenderer9(); DirectShowLib.IVMRFilterConfig9 filterConfig = (DirectShowLib.IVMRFilterConfig9)filter1; filterConfig.SetRenderingMode(VMR9Mode.Renderless); filterConfig.SetNumberOfStreams(2); DirectShowLib.IVMRSurfaceAllocatorNotify9 vmrSurfAllocNotify = (DirectShowLib.IVMRSurfaceAllocatorNotify9)filter1; try { int hr = vmrSurfAllocNotify.AdviseSurfaceAllocator(userId1, allocator); DsError.ThrowExceptionForHR(hr); hr = allocator.AdviseNotify(vmrSurfAllocNotify); DsError.ThrowExceptionForHR(hr); } catch { } graph1 = (DirectShowLib.IGraphBuilder) new DirectShowLib.FilterGraph(); graph1.AddFilter(filter1, "Video Mixing Renderer 9"); graph1.RenderFile(@"C:\Download\workmates.wmv", null); mediaControl1 = (DirectShowLib.IMediaControl)graph1; mediaControl1.Run(); }
private void CloseInterface() { //그래프와 콘트롤 해제 if (pMediaControl != null) { pMediaControl.StopWhenReady(); } if (pVideoWindow != null) { pVideoWindow.put_Visible(OABool.False); pVideoWindow.put_Owner(IntPtr.Zero); } Marshal.ReleaseComObject(pSampleGrabber); pSampleGrabber = null; Marshal.ReleaseComObject(pSampleGrabberFilter); pSampleGrabberFilter = null; Marshal.ReleaseComObject(pGraphBuilder); pGraphBuilder = null; Marshal.ReleaseComObject(pMediaControl); pMediaControl = null; Marshal.ReleaseComObject(pVideoWindow); pVideoWindow = null; Marshal.ReleaseComObject(pMediaPosition); pMediaPosition = null; //this.Close(); //close this program }
public virtual void Dispose() { m_MediaControl = null; m_MediaPosition = null; Marshal.ReleaseComObject(m_GraphBuilder); m_GraphBuilder = null; //GC.Collect(); }
public static Boolean TryMediaOpen(MediaTypes mediaType, String path) { Boolean ret = false; switch (mediaType) { case MediaTypes.Audio: { DirectShowLib.IGraphBuilder gb = (DirectShowLib.IGraphBuilder) new DirectShowLib.FilterGraph(); //Int32 hr = gb.RenderFile(path, null); if (gb.RenderFile(path, null) == 0) { ret = true; } Marshal.ReleaseComObject(gb); gb = null; break; } case MediaTypes.Video: { DirectShowLib.IGraphBuilder gb = (DirectShowLib.IGraphBuilder) new DirectShowLib.FilterGraph(); Int32 hr = gb.RenderFile(path, null); if (hr == 0) { DirectShowLib.IVideoWindow videoWindow = (DirectShowLib.IVideoWindow)gb; OABool lVisible; if (videoWindow.get_Visible(out lVisible) == 0) { ret = true; } videoWindow = null; } Marshal.ReleaseComObject(gb); gb = null; break; } case MediaTypes.Karaoke: { ret = true; try { Sequence sequence = new Sequence(path); sequence.Dispose(); } catch (Exception) { ret = false; } break; } default: break; } return(ret); }
public AudioVideoBase(String path, Boolean isDemo) : base(isDemo, path) { m_GraphBuilder = (DirectShowLib.IGraphBuilder) new FilterGraph(); m_hr = m_GraphBuilder.RenderFile(path, null); DsError.ThrowExceptionForHR(m_hr); m_MediaControl = (DirectShowLib.IMediaControl)m_GraphBuilder; m_MediaPosition = (DirectShowLib.IMediaPosition)m_GraphBuilder; m_BasicAudio = (DirectShowLib.IBasicAudio)m_GraphBuilder; }
private void Videotest1() { pGraphBuilder = (DirectShowLib.IGraphBuilder) new FilterGraph(); pMediaControl = (DirectShowLib.IMediaControl)pGraphBuilder; //controler pMediaEvent = (DirectShowLib.IMediaEvent)pGraphBuilder; //envent pMediaControl.RenderFile(@"C:\Users\trevor\Desktop\Videos\cctv2.wmv"); pVideoWindow = (DirectShowLib.IVideoWindow)pGraphBuilder; // renderFile을 실행 한 후 연결해줘야한다. 출력처를 알기위해서. //pVideoWindow.put_Caption("test"); // setTitle //pVideoWindow.put_FullScreenMode(OABool.True); //Video full Screen pVideoWindow.put_Owner(tabPage2.Handle); // tabPage2에 그리기. pVideoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipSiblings); Rectangle rect = tabPage2.ClientRectangle; pVideoWindow.SetWindowPosition(0, 0, rect.Right, rect.Bottom); pMediaControl.Run(); // Video play pMediaEvent.WaitForCompletion(-1, out eventCode); //블로킹을 실시하는 메소드 switch (eventCode) { case 0: textBox1.Text = "TimeOut"; break; case EventCode.UserAbort: //ex) alt+f4 textBox1.Text = "User Abort"; break; case EventCode.Complete: textBox1.Text = "complete"; break; case EventCode.ErrorAbort: textBox1.Text = "Error Abort"; break; } //pVideoWindow.put_FullScreenMode(OABool.False); // !full Screen //free Marshal.ReleaseComObject(pGraphBuilder); pGraphBuilder = null; Marshal.ReleaseComObject(pMediaControl); pMediaControl = null; Marshal.ReleaseComObject(pMediaEvent); pMediaEvent = null; }
private void InitializeGraph() { m_graph = (DirectShowLib.IGraphBuilder) new FilterGraphNoThread(); // QueryInterface for DirectShow interfaces _mediaControl = (DirectShowLib.IMediaControl)m_graph; _mediaEventEx = (DirectShowLib.IMediaEventEx)m_graph; _mediaSeeking = (DirectShowLib.IMediaSeeking)m_graph; _mediaPosition = (DirectShowLib.IMediaPosition)m_graph; // Query for video interfaces, which may not be relevant for audio files _videoWindow = m_graph as DirectShowLib.IVideoWindow; _basicVideo = m_graph as DirectShowLib.IBasicVideo; // Query for audio interfaces, which may not be relevant for video-only files _basicAudio = m_graph as DirectShowLib.IBasicAudio; // Set up event notification. var hr = _mediaEventEx.SetNotifyWindow(VideoWindowHandle, WM_GRAPHNOTIFY, IntPtr.Zero); DsError.ThrowExceptionForHR(hr); }
// // Starts playback for the selected stream at the specified time // int OpenStream(string videopath, double videotime) { double td; // store stream duration; int hr = 0; // animate bt logo // logo_webbrowser.Refresh(); // cover overlay options with video or not // if overlay is active ////////if (OverlayButton.Checked) // Overlay button config - Melek ////////{ //////// VideoPanel.Width = VideoPlayerPanel.Width - OverlayPanel.Width; //////// OverlayBar.Location = new System.Drawing.Point(-1, -1); ; //////// OverlayBar.Text = ">"; ////////} ////////else ////////// if overlay is not active ////////{ //////// VideoPanel.Width = VideoPlayerPanel.Width - OverlayBar.Width; //////// OverlayBar.Location = new System.Drawing.Point(OverlayPanel.Width - OverlayBar.Width - 1, -1); ; //////// OverlayBar.Text = "<"; ////////} filename = videopath; try//Melek { if (filename == string.Empty) return -1; // this.graphBuilder = (IGraphBuilder)new FilterGraph(); this.graphBuilder = (IFilterGraph2)new FilterGraph(); // We manually add the VMR (video mixer/renderer) filter so that we can set it into "mixing" mode. // That is needed so that the VMR will deinterlace before playing back VideoMixingRenderer vmr = new VideoMixingRenderer(); //Tom's deinterlace changes graphBuilder.AddFilter((IBaseFilter)vmr, "vmr");//Tom's deinterlace changes IVMRFilterConfig vmrConfig = vmr as IVMRFilterConfig;//Tom's deinterlace changes int nRet = vmrConfig.SetNumberOfStreams(1);//Tom's deinterlace changes // BuildVideoGraph(videopath); //No more overlay - Melek hr = this.graphBuilder.RenderFile(filename, null);//MELek - instead of calling BuildVideoGraph function call RenderFile function directly DsError.ThrowExceptionForHR(hr);//Melek // 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) //{ // Setup the video window hr = this.videoWindow.put_Owner(this.VideoPanel.Handle); DsError.ThrowExceptionForHR(hr); hr = this.videoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipSiblings | WindowStyle.ClipChildren); DsError.ThrowExceptionForHR(hr); hr = InitVideoWindow(1, 1); DsError.ThrowExceptionForHR(hr); GetFrameStepInterface(); //} //else //{ // Initialize the default player size // hr = InitPlayerWindow(); // DsError.ThrowExceptionForHR(hr); //EnablePlaybackMenu(true, MediaType.Audio); //} // Complete window initialization //CheckSizeMenu(menuFileSizeNormal); //this.isFullScreen = false; this.currentPlaybackRate = 1.0; #if DEBUG rot = new DsROTEntry(this.graphBuilder); #endif // check the mute button MuteStatus(); // Run the graph to play the media file this.mediaPosition.put_CurrentPosition(videotime); hr = this.mediaControl.Run(); DsError.ThrowExceptionForHR(hr); this.currentState = PlayState.Running; UpdateMainTitle(); try { #if !DEMO this.mediaPosition.get_Duration(out td); #else td=vs.getDurationInSeconds(); #endif this.VideoProgressionBar.Minimum = 0; this.VideoProgressionBar.Maximum = (int)(td * 100); isTimer = true; // disable if raw 264 files are open (.264 or .h264) as they dont allow seeking if (videopath.EndsWith("264")) this.mediaSeeking = null; return 0; } catch (Exception ex) { //Global.log("Problem opening " + vs.path.Name + ".ts\n" + ex); Global.log("Problem opening " + vs.StreamFileName + "\n" + ex); //Melek - path.name => streamfilename EnablePlayback(false); //MElek return -1; } } catch (Exception ex) //Melek { // MessageBox.Show(ex.Message); EnablePlayback(false); return -1; } }
private void ClosePlayback() { int hr = 0; try { if (this.mediaEventEx != null) { hr = this.mediaEventEx.SetNotifyWindow(IntPtr.Zero, 0, IntPtr.Zero); DsError.ThrowExceptionForHR(hr); } #if DEBUG if (rot != null) { rot.Dispose(); rot = null; } #endif // Release and zero DirectShow interfaces if (this.mediaEventEx != null) this.mediaEventEx = null; if (this.mediaSeeking != null) this.mediaSeeking = null; if (this.mediaPosition != null) this.mediaPosition = null; if (this.mediaControl != null) this.mediaControl = null; if (this.basicAudio != null) this.basicAudio = null; if (this.basicVideo != null) this.basicVideo = null; if (this.videoWindow != null) this.videoWindow = null; if (this.frameStep != null) this.frameStep = null; if (this.graphBuilder != null) Marshal.ReleaseComObject(this.graphBuilder); this.graphBuilder = null; //GC.Collect(); } catch { } }
private void CloseInterfaces() { _hiddenWindow.SizeChanged -= _hiddenWindow_SizeChanged; int hr; if (_defaultAudioRenderer != null) { m_graph.RemoveFilter(_defaultAudioRenderer as DirectShowLib.IBaseFilter); Marshal.ReleaseComObject(_defaultAudioRenderer); _defaultAudioRenderer = null; } if (_reclockAudioRenderer != null) { m_graph.RemoveFilter(_reclockAudioRenderer as DirectShowLib.IBaseFilter); Marshal.ReleaseComObject(_reclockAudioRenderer); _reclockAudioRenderer = null; } if (_lavaudio != null) { m_graph.RemoveFilter(_lavaudio as DirectShowLib.IBaseFilter); Marshal.ReleaseComObject(_lavaudio); _lavaudio = null; } if (_xyVsFilter != null) { m_graph.RemoveFilter(_xyVsFilter as DirectShowLib.IBaseFilter); Marshal.ReleaseComObject(_xyVsFilter); _xyVsFilter = null; } if (_xySubFilter != null) { m_graph.RemoveFilter(_xySubFilter as DirectShowLib.IBaseFilter); Marshal.ReleaseComObject(_xySubFilter); _xySubFilter = null; } if (_lavvideo != null) { m_graph.RemoveFilter(_lavvideo as DirectShowLib.IBaseFilter); Marshal.ReleaseComObject(_lavvideo); _lavvideo = null; } if (_madvr != null) { m_graph.RemoveFilter(_madvr as DirectShowLib.IBaseFilter); Marshal.ReleaseComObject(_madvr); _madvr = null; } if (_videoWindow != null) { // Relinquish ownership (IMPORTANT!) after hiding video window hr = _videoWindow.put_Visible(OABool.False); hr = _videoWindow.put_Owner(IntPtr.Zero); } if (_mediaEventEx != null) { hr = _mediaEventEx.SetNotifyWindow(IntPtr.Zero, 0, IntPtr.Zero); Marshal.ReleaseComObject(_mediaEventEx); _mediaEventEx = null; } if (_dvdNav != null) { Marshal.ReleaseComObject(_dvdNav); _dvdNav = null; } if (_mDvdInfo != null) { Marshal.ReleaseComObject(_mDvdInfo); _mDvdInfo = null; } if (_mDvdControl != null) { Marshal.ReleaseComObject(_mDvdControl); _mDvdControl = null; } if (_mPDisplay != null) { Marshal.ReleaseComObject(_mPDisplay); _mPDisplay = null; } if (_filterGraph != null) { Marshal.ReleaseComObject(_filterGraph); _filterGraph = null; } if (_mPEvr != null) { Marshal.ReleaseComObject(_mPEvr); _mPEvr = null; } if (_mediaEventEx != null) { Marshal.ReleaseComObject(_mediaEventEx); _mediaEventEx = null; } if (_mediaSeeking != null) { Marshal.ReleaseComObject(_mediaSeeking); _mediaSeeking = null; } if (_mediaPosition != null) { Marshal.ReleaseComObject(_mediaPosition); _mediaPosition = null; } if (_mediaControl != null) { Marshal.ReleaseComObject(_mediaControl); _mediaControl = null; } if (_basicAudio != null) { Marshal.ReleaseComObject(_basicAudio); _basicAudio = null; } if (_basicVideo != null) { Marshal.ReleaseComObject(_basicVideo); _basicVideo = null; } if (_sourceFilter != null) { Marshal.ReleaseComObject(_sourceFilter); _sourceFilter = null; } if (m_graph != null) { Marshal.ReleaseComObject(m_graph); m_graph = null; } if (_videoWindow != null) { Marshal.ReleaseComObject(_videoWindow); _videoWindow = null; } _mSeekCaps = 0; _streams = null; GC.Collect(); }
private void SetupGraph(Control hWin, string filename) { pGraphBuilder = (DirectShowLib.IGraphBuilder) new FilterGraph(); pMediaControl = (DirectShowLib.IMediaControl)pGraphBuilder; pVideoWindow = (DirectShowLib.IVideoWindow)pGraphBuilder; pVideoFrameStep = (DirectShowLib.IVideoFrameStep)pGraphBuilder; // video frame... pMediaPosition = (DirectShowLib.IMediaPosition)pGraphBuilder; //DirectShowLib.IBaseFilter pBaseFilter = (DirectShowLib.IBaseFilter)pGraphBuilder; //pMediaSeeking = (DirectShowLib.IMediaSeeking)pGraphBuilder; //pMediaSeeking.SetPositions(5000, AMSeekingSeekingFlags.AbsolutePositioning, 6000, AMSeekingSeekingFlags.AbsolutePositioning); //test DirectShowLib.ICaptureGraphBuilder2 pCaptureGraphBuilder2; DirectShowLib.IBaseFilter pRenderer; DirectShowLib.IVMRFilterConfig9 pIVMRFilterConfig9; DirectShowLib.IVMRWindowlessControl9 pVMRWC9; pCaptureGraphBuilder2 = (DirectShowLib.ICaptureGraphBuilder2) new CaptureGraphBuilder2(); pCaptureGraphBuilder2.SetFiltergraph(pGraphBuilder); // CaptureGraph를 GraphBuilder에 붙인다. //pGraphBuilder.AddFilter(pMediaControl "SDZ 375 Source"); // GraphBuilder에 영상장치필터를 추가한다. pRenderer = (DirectShowLib.IBaseFilter) new DirectShowLib.VideoMixingRenderer9(); // 믹서 필터를 생성 한다. pIVMRFilterConfig9 = (DirectShowLib.IVMRFilterConfig9)pRenderer; // 믹서 필터의 속성을 설정한다. pIVMRFilterConfig9.SetRenderingMode(VMR9Mode.Windowless); pIVMRFilterConfig9.SetNumberOfStreams(2); pVMRWC9 = (DirectShowLib.IVMRWindowlessControl9)pRenderer; // 오버레이 평면의 속성을 설정한다. pVMRWC9.SetVideoClippingWindow(hWin.Handle); pVMRWC9.SetBorderColor(0); pVMRWC9.SetVideoPosition(null, hWin.ClientRectangle); pGraphBuilder.AddFilter(pRenderer, "Video Mixing Renderer"); // GraphBuilder에 믹스 필터를 추가한다. pCaptureGraphBuilder2.RenderStream(null, MediaType.Video, pGraphBuilder, null, pRenderer); // 영상표시를 위한 필터를 설정한다. ///test //sampleGrabber AMMediaType am_media_type = new AMMediaType(); pSampleGrabber = (DirectShowLib.ISampleGrabber) new SampleGrabber(); pSampleGrabberFilter = (DirectShowLib.IBaseFilter)pSampleGrabber; am_media_type.majorType = MediaType.Video; am_media_type.subType = MediaSubType.RGB24; am_media_type.formatType = FormatType.VideoInfo; pSampleGrabber.SetMediaType(am_media_type); //Graph에 sampleGrabber filter를 추가 pGraphBuilder.AddFilter(pSampleGrabberFilter, "Sample Grabber"); pMediaControl.RenderFile(filename); pVideoWindow.put_Owner(hWin.Handle); pVideoWindow.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipSiblings); Rectangle rect = hWin.ClientRectangle; pVideoWindow.SetWindowPosition(0, 0, rect.Right, rect.Bottom); //sampleGrabber2 pSampleGrabber.GetConnectedMediaType(am_media_type); DirectShowLib.VideoInfoHeader pVideoInfoHeader = (DirectShowLib.VideoInfoHeader)Marshal.PtrToStructure(am_media_type.formatPtr, typeof(VideoInfoHeader)); String str = string.Format("size = {0} x {1}", pVideoInfoHeader.BmiHeader.Width, pVideoInfoHeader.BmiHeader.Height); Video_Width = pVideoInfoHeader.BmiHeader.Width; Video_Height = pVideoInfoHeader.BmiHeader.Height; str += string.Format("sample size = {0}", am_media_type.sampleSize); textBox1.Text = str; DsUtils.FreeAMMediaType(am_media_type); //SetBufferSamples를 실행하지 않으면 버퍼로부터 데이터를 얻을 수 없다. //불필요하게 부하를 주고싶지 않은경우 false, 데이터를 얻고싶으면 true pSampleGrabber.SetBufferSamples(true); //play time pMediaPosition = (DirectShowLib.IMediaPosition)pGraphBuilder; double Length; pMediaPosition.get_Duration(out Length); String str2 = string.Format("play time: {0}", Length); textBox1.Text = str2; pMediaPosition.put_CurrentPosition(5.0); //set current Position //2017.05.08 DirectShowLib.IVMRWindowlessControl9 windowlessCtrl = (DirectShowLib.IVMRWindowlessControl9)pRenderer; windowlessCtrl.SetVideoClippingWindow(hWin.Handle); IntPtr lpDib; windowlessCtrl.GetCurrentImage(out lpDib); BitmapInfoHeader head; head = (BitmapInfoHeader)Marshal.PtrToStructure(lpDib, typeof(BitmapInfoHeader)); int width = head.Width; int height = head.Height; int stride = width * (head.BitCount / 8); PixelFormat pixelFormat = PixelFormat.Format24bppRgb; switch (head.BitCount) { case 24: pixelFormat = PixelFormat.Format24bppRgb; break; case 32: pixelFormat = PixelFormat.Format32bppRgb; break; case 48: pixelFormat = PixelFormat.Format48bppRgb; break; default: throw new Exception("Unknown BitCount"); } Bitmap Cap = new Bitmap(width, height, stride, pixelFormat, lpDib); Cap.RotateFlip(RotateFlipType.RotateNoneFlipY); pictureBox1.Image = Cap; }
private void CloseInterfaces() { int hr; if (m_adecOut != null) { CleanUpInterface(m_adecOut); m_adecOut = null; } if (_defaultAudioRenderer != null) { m_graph.RemoveFilter(_defaultAudioRenderer as DirectShowLib.IBaseFilter); CleanUpInterface(_defaultAudioRenderer); _defaultAudioRenderer = null; } if (_reclockAudioRenderer != null) { m_graph.RemoveFilter(_reclockAudioRenderer as DirectShowLib.IBaseFilter); CleanUpInterface(_reclockAudioRenderer); _reclockAudioRenderer = null; } if (_wasapiAR != null) { m_graph.RemoveFilter(_wasapiAR as DirectShowLib.IBaseFilter); CleanUpInterface(_wasapiAR); _wasapiAR = null; } if (_lavaudio != null) { m_graph.RemoveFilter(_lavaudio as DirectShowLib.IBaseFilter); CleanUpInterface(_lavaudio); _lavaudio = null; } if (_xyVsFilter != null) { m_graph.RemoveFilter(_xyVsFilter as DirectShowLib.IBaseFilter); CleanUpInterface(_xyVsFilter); _xyVsFilter = null; } if (_xySubFilter != null) { m_graph.RemoveFilter(_xySubFilter as DirectShowLib.IBaseFilter); CleanUpInterface(_xySubFilter); _xySubFilter = null; } if (_lavvideo != null) { m_graph.RemoveFilter(_lavvideo as DirectShowLib.IBaseFilter); CleanUpInterface(_lavvideo); _lavvideo = null; } if (_madvr != null) { m_graph.RemoveFilter(_madvr as DirectShowLib.IBaseFilter); CleanUpInterface(_madvr); _madvr = null; } if (_videoWindow != null) { // Relinquish ownership (IMPORTANT!) after hiding video window hr = _videoWindow.put_Visible(OABool.False); hr = _videoWindow.put_Owner(IntPtr.Zero); } if (_mediaEventEx != null) { hr = _mediaEventEx.SetNotifyWindow(IntPtr.Zero, 0, IntPtr.Zero); //Marshal.ReleaseComObject(_mediaEventEx); //_mediaEventEx = null; } //if (_dvdNav != null) //{ // Marshal.ReleaseComObject(_dvdNav); // _dvdNav = null; //} /* //this will double release the source filter if (dvdInfo != null) { Marshal.ReleaseComObject(dvdInfo); dvdInfo = null; } if (_mDvdControl != null) { Marshal.ReleaseComObject(_mDvdControl); } */ _mDvdControl = null; CleanUpInterface(_mPDisplay); _mPDisplay = null; CleanUpInterface(_sourceFilter); _sourceFilter = null; CleanUpInterface(_mPEvr); _mPEvr = null; CleanUpInterface(m_filterGraph); m_filterGraph = null; m_filterGraph = null; _mediaEventEx = null; _mediaSeeking = null; _mediaPosition = null; _mediaControl = null; _basicAudio = null; _basicVideo = null; m_graph = null; _videoWindow = null; _filterGraph = null; if (m_dsRot != null) m_dsRot.Dispose(); m_dsRot = null; _mSeekCaps = 0; _streams = null; GC.Collect(); }
private void InitializeGraph() { m_graph = (DirectShowLib.IGraphBuilder)new FilterGraphNoThread(); // QueryInterface for DirectShow interfaces _mediaControl = (DirectShowLib.IMediaControl)m_graph; _mediaEventEx = (DirectShowLib.IMediaEventEx)m_graph; _mediaSeeking = (DirectShowLib.IMediaSeeking)m_graph; _mediaPosition = (DirectShowLib.IMediaPosition)m_graph; // Query for video interfaces, which may not be relevant for audio files _videoWindow = m_graph as DirectShowLib.IVideoWindow; _basicVideo = m_graph as DirectShowLib.IBasicVideo; // Query for audio interfaces, which may not be relevant for video-only files _basicAudio = m_graph as DirectShowLib.IBasicAudio; // Set up event notification. var hr = _mediaEventEx.SetNotifyWindow(VideoWindowHandle, WM_GRAPHNOTIFY, IntPtr.Zero); DsError.ThrowExceptionForHR(hr); }
private void InitializeGraph(bool isDvd) { int hr = 0; _isDvd = isDvd; m_filterGraph = new FilterGraphNoThread(); m_graph = (m_filterGraph as DirectShowLib.IGraphBuilder); // QueryInterface for DirectShow interfaces _mediaControl = (DirectShowLib.IMediaControl)m_graph; _mediaEventEx = (DirectShowLib.IMediaEventEx)m_graph; _mediaSeeking = (DirectShowLib.IMediaSeeking)m_graph; _mediaPosition = (DirectShowLib.IMediaPosition)m_graph; // Query for video interfaces, which may not be relevant for audio files _videoWindow = m_graph as DirectShowLib.IVideoWindow; _basicVideo = m_graph as DirectShowLib.IBasicVideo; // Query for audio interfaces, which may not be relevant for video-only files _basicAudio = m_graph as DirectShowLib.IBasicAudio; // Set up event notification. if (isDvd) hr = _mediaEventEx.SetNotifyWindow(VideoWindowHandle, DirectShowPlayerConfiguration.WM_DVD_EVENT, IntPtr.Zero); else hr = _mediaEventEx.SetNotifyWindow(VideoWindowHandle, DirectShowPlayerConfiguration.WM_GRAPH_NOTIFY, IntPtr.Zero); DsError.ThrowExceptionForHR(hr); if (_config.PublishGraph) m_dsRot = new DsROTEntry(m_graph as IFilterGraph); }
private void InitializeGraph(bool isDvd) { int hr = 0; _isDvd = isDvd; if (isDvd) { _dvdGraphBuilder = new DvdGraphBuilder() as IDvdGraphBuilder; hr = _dvdGraphBuilder.GetFiltergraph(out _graph); DsError.ThrowExceptionForHR(hr); _filterGraph = _graph as IFilterGraph2; } else { _filterGraphNT = new FilterGraphNoThread(); _graph = (_filterGraphNT as DirectShowLib.IGraphBuilder); } // QueryInterface for DirectShow interfaces _mediaControl = (DirectShowLib.IMediaControl)_graph; _mediaEventEx = (DirectShowLib.IMediaEventEx)_graph; _mediaSeeking = (DirectShowLib.IMediaSeeking)_graph; _mediaPosition = (DirectShowLib.IMediaPosition)_graph; // Query for video interfaces, which may not be relevant for audio files _videoWindow = _graph as DirectShowLib.IVideoWindow; _basicVideo = _graph as DirectShowLib.IBasicVideo; // Query for audio interfaces, which may not be relevant for video-only files _basicAudio = _graph as DirectShowLib.IBasicAudio; // Set up event notification. if (isDvd) hr = _mediaEventEx.SetNotifyWindow(VideoWindowHandle, WM_DVD_EVENT, IntPtr.Zero); else hr = _mediaEventEx.SetNotifyWindow(VideoWindowHandle, WM_GRAPHNOTIFY, IntPtr.Zero); DsError.ThrowExceptionForHR(hr); if (_mbtConfig.Configuration.InternalPlayerConfiguration.PublishGraph) m_dsRot = new DsROTEntry(_graph as IFilterGraph); }