/// <summary> do cleanup and release DirectShow. </summary>
        private void CloseInterfaces()
        {
            int hr;

            try
            {
                if (mediaCtrl != null)
                {
                    int         counter = 0;
                    FilterState state;
                    hr = mediaCtrl.Stop();
                    hr = mediaCtrl.GetState(10, out state);
                    while (state != FilterState.Stopped || GUIGraphicsContext.InVmr9Render)
                    {
                        System.Threading.Thread.Sleep(100);
                        hr = mediaCtrl.GetState(10, out state);
                        counter++;
                        if (counter >= 30)
                        {
                            if (state != FilterState.Stopped)
                            {
                                Log.Debug("AudioPlayerVMR: graph still running");
                            }
                            if (GUIGraphicsContext.InVmr9Render)
                            {
                                Log.Debug("AudioPlayerVMR: in renderer");
                            }
                            break;
                        }
                    }
                    mediaCtrl = null;
                }

                m_state = PlayState.Init;

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

                mediaSeek  = null;
                mediaPos   = null;
                basicAudio = null;

                if (graphBuilder != null)
                {
                    if (_rotEntry != null)
                    {
                        _rotEntry.SafeDispose();
                        _rotEntry = null;
                    }
                    DirectShowUtil.ReleaseComObject(graphBuilder);
                    graphBuilder = null;
                }

                m_state = PlayState.Init;
            }
            catch (Exception) {}
        }
Beispiel #2
0
 private void Cleanup()
 {
     Log.Info("TSReader2MP4: cleanup");
     if (_rotEntry != null)
     {
         _rotEntry.SafeDispose();
     }
     _rotEntry = null;
     if (mediaControl != null)
     {
         mediaControl.Stop();
         mediaControl = null;
     }
     fileWriterFilter = null;
     mediaSeeking     = null;
     mediaEvt         = null;
     mediaPos         = null;
     mediaControl     = null;
     if (h264Encoder != null)
     {
         DirectShowUtil.ReleaseComObject(h264Encoder);
     }
     h264Encoder = null;
     if (aacEncoder != null)
     {
         DirectShowUtil.ReleaseComObject(aacEncoder);
     }
     aacEncoder = null;
     if (mp4Muxer != null)
     {
         DirectShowUtil.ReleaseComObject(mp4Muxer);
     }
     mp4Muxer = null;
     if (AudioCodec != null)
     {
         DirectShowUtil.ReleaseComObject(AudioCodec);
     }
     AudioCodec = null;
     if (VideoCodec != null)
     {
         DirectShowUtil.ReleaseComObject(VideoCodec);
     }
     VideoCodec = null;
     if (tsreaderSource != null)
     {
         DirectShowUtil.ReleaseComObject(tsreaderSource);
     }
     tsreaderSource = null;
     DirectShowUtil.RemoveFilters(graphBuilder);
     if (graphBuilder != null)
     {
         DirectShowUtil.ReleaseComObject(graphBuilder);
     }
     graphBuilder = null;
     GC.Collect();
     GC.Collect();
     GC.Collect();
     GC.WaitForPendingFinalizers();
 }
        private void Cleanup()
        {
            Log.Info("DVR2MPG: cleanup");
            if (_rotEntry != null)
            {
                _rotEntry.SafeDispose();
            }
            _rotEntry = null;

            if (mediaControl != null)
            {
                mediaControl.Stop();
                mediaControl = null;
            }
            mediaSeeking = null;
            mediaEvt     = null;
            mediaControl = null;

            if (powerDvdMuxer != null)
            {
                DirectShowUtil.ReleaseComObject(powerDvdMuxer);
            }
            powerDvdMuxer = null;

            if (fileWriterFilter != null)
            {
                DirectShowUtil.ReleaseComObject(fileWriterFilter);
            }
            fileWriterFilter = null;

            if (bufferSource != null)
            {
                DirectShowUtil.ReleaseComObject(bufferSource);
            }
            bufferSource = null;

            DirectShowUtil.RemoveFilters(graphBuilder);

            if (graphBuilder != null)
            {
                DirectShowUtil.ReleaseComObject(graphBuilder);
            }
            graphBuilder = null;
        }
Beispiel #4
0
 private void Cleanup()
 {
     Log.Info("DVRMS2WMV: cleanup");
     if (mediaControl != null)
     {
         mediaControl.Stop();
         mediaControl = null;
     }
     mediaSeeking = null;
     mediaEvt     = null;
     mediaPos     = null;
     mediaControl = null;
     if (Mpeg2AudioCodec != null)
     {
         DirectShowUtil.ReleaseComObject(Mpeg2AudioCodec);
     }
     Mpeg2AudioCodec = null;
     if (Mpeg2VideoCodec != null)
     {
         DirectShowUtil.ReleaseComObject(Mpeg2VideoCodec);
     }
     Mpeg2VideoCodec = null;
     if (bufferSource != null)
     {
         DirectShowUtil.ReleaseComObject(bufferSource);
     }
     bufferSource = null;
     DirectShowUtil.RemoveFilters(graphBuilder);
     if (_rotEntry != null)
     {
         _rotEntry.SafeDispose();
     }
     _rotEntry = null;
     if (graphBuilder != null)
     {
         DirectShowUtil.ReleaseComObject(graphBuilder);
     }
     graphBuilder = null;
     GC.Collect();
     GC.Collect();
     GC.Collect();
     GC.WaitForPendingFinalizers();
 }
Beispiel #5
0
        private void Cleanup()
        {
            if (graphBuilder == null)
            {
                return;
            }
            int hr;

            Log.Info("RTSPPlayer:cleanup DShow graph");
            try
            {
                if (VMR9Util.g_vmr9 != null)
                {
                    VMR9Util.g_vmr9.Vmr9MediaCtrl(_mediaCtrl);
                    VMR9Util.g_vmr9.Enable(false);
                }

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

                videoWin = graphBuilder as IVideoWindow;
                if (videoWin != null && GUIGraphicsContext.VideoRenderer != GUIGraphicsContext.VideoRendererType.madVR)
                {
                    videoWin.put_Owner(IntPtr.Zero);
                    videoWin.put_Visible(OABool.False);
                }

                _mediaCtrl    = null;
                mediaEvt      = null;
                _mediaSeeking = null;
                mediaPos      = null;
                basicAudio    = null;
                basicVideo    = null;
                videoWin      = null;
                SubEngine.GetInstance().FreeSubtitles();

                if (graphBuilder != null)
                {
                    DirectShowUtil.RemoveFilters(graphBuilder);
                    if (_rotEntry != null)
                    {
                        _rotEntry.SafeDispose();
                        _rotEntry = null;
                    }
                    DirectShowUtil.FinalReleaseComObject(graphBuilder);
                    graphBuilder = null;
                }

                if (VMR9Util.g_vmr9 != null)
                {
                    VMR9Util.g_vmr9.SafeDispose();
                    VMR9Util.g_vmr9 = null;
                }

                GUIGraphicsContext.form.Invalidate(true);
                _state = PlayState.Init;

                if (_mpegDemux != null)
                {
                    Log.Info("cleanup mpegdemux");
                    DirectShowUtil.FinalReleaseComObject(_mpegDemux);
                    _mpegDemux = null;
                }
                if (_rtspSource != null)
                {
                    Log.Info("cleanup _rtspSource");
                    DirectShowUtil.FinalReleaseComObject(_rtspSource);
                    _rtspSource = null;
                }
                if (_subtitleFilter != null)
                {
                    DirectShowUtil.FinalReleaseComObject(_subtitleFilter);
                    _subtitleFilter = null;
                    if (this.dvbSubRenderer != null)
                    {
                        this.dvbSubRenderer.SetPlayer(null);
                    }
                    this.dvbSubRenderer = null;
                }

                if (vobSub != null)
                {
                    Log.Info("cleanup vobSub");
                    DirectShowUtil.FinalReleaseComObject(vobSub);
                    vobSub = null;
                }
            }
            catch (Exception ex)
            {
                if (VMR9Util.g_vmr9 != null)
                {
                    VMR9Util.g_vmr9.RestoreGuiForMadVr();
                    VMR9Util.g_vmr9.SafeDispose();
                }
                Log.Error("RTSPPlayer: Exception while cleanuping DShow graph - {0} {1}", ex.Message, ex.StackTrace);
            }

            //switch back to directx windowed mode
            Log.Info("RTSPPlayer: Disabling DX9 exclusive mode");
            GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SWITCH_FULL_WINDOWED, 0, 0, 0, 0, 0, null);

            GUIWindowManager.SendMessage(msg);
        }
Beispiel #6
0
        private void Cleanup()
        {
            if (graphBuilder == null)
            {
                return;
            }
            int hr;

            Log.Info("RTSPPlayer:cleanup DShow graph");
            try
            {
                if (_mediaCtrl != null)
                {
                    int         counter = 0;
                    FilterState state;
                    hr = _mediaCtrl.Stop();
                    hr = _mediaCtrl.GetState(10, out state);
                    while (state != FilterState.Stopped || GUIGraphicsContext.InVmr9Render)
                    {
                        Thread.Sleep(100);
                        hr = _mediaCtrl.GetState(10, out state);
                        counter++;
                        if (counter >= 30)
                        {
                            if (state != FilterState.Stopped)
                            {
                                Log.Error("RTSPPlayer: graph still running");
                            }
                            if (GUIGraphicsContext.InVmr9Render)
                            {
                                Log.Error("RTSPPlayer: in renderer");
                            }
                            break;
                        }
                    }
                    _mediaCtrl = null;
                }

                if (Vmr9 != null)
                {
                    Vmr9.Enable(false);
                }

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

                videoWin = graphBuilder as IVideoWindow;
                if (videoWin != null)
                {
                    hr       = videoWin.put_Visible(OABool.False);
                    hr       = videoWin.put_Owner(IntPtr.Zero);
                    videoWin = null;
                }

                _mediaSeeking = null;
                mediaPos      = null;
                basicAudio    = null;
                basicVideo    = null;
                videoWin      = null;
                SubEngine.GetInstance().FreeSubtitles();

                if (graphBuilder != null)
                {
                    DirectShowUtil.RemoveFilters(graphBuilder);
                    if (_rotEntry != null)
                    {
                        _rotEntry.SafeDispose();
                        _rotEntry = null;
                    }
                    DirectShowUtil.ReleaseComObject(graphBuilder);
                    graphBuilder = null;
                }

                if (Vmr9 != null)
                {
                    Vmr9.SafeDispose();
                    Vmr9 = null;
                }

                GUIGraphicsContext.form.Invalidate(true);
                _state = PlayState.Init;

                if (_mpegDemux != null)
                {
                    Log.Info("cleanup mpegdemux");
                    while ((hr = DirectShowUtil.ReleaseComObject(_mpegDemux)) > 0)
                    {
                        ;
                    }
                    _mpegDemux = null;
                }
                if (_rtspSource != null)
                {
                    Log.Info("cleanup _rtspSource");
                    while ((hr = DirectShowUtil.ReleaseComObject(_rtspSource)) > 0)
                    {
                        ;
                    }
                    _rtspSource = null;
                }
                if (_subtitleFilter != null)
                {
                    while ((hr = DirectShowUtil.ReleaseComObject(_subtitleFilter)) > 0)
                    {
                        ;
                    }
                    _subtitleFilter = null;
                    if (this.dvbSubRenderer != null)
                    {
                        this.dvbSubRenderer.SetPlayer(null);
                    }
                    this.dvbSubRenderer = null;
                }


                if (vobSub != null)
                {
                    Log.Info("cleanup vobSub");
                    while ((hr = DirectShowUtil.ReleaseComObject(vobSub)) > 0)
                    {
                        ;
                    }
                    vobSub = null;
                }
            }
            catch (Exception ex)
            {
                Log.Error("RTSPPlayer: Exception while cleanuping DShow graph - {0} {1}", ex.Message, ex.StackTrace);
            }

            //switch back to directx windowed mode
            Log.Info("RTSPPlayer: Disabling DX9 exclusive mode");
            GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SWITCH_FULL_WINDOWED, 0, 0, 0, 0, 0, null);

            GUIWindowManager.SendMessage(msg);
        }