Esempio n. 1
0
        public View()
        {
            InitializeComponent();
            presenter = new PlayerPresenter(this, new PlayerModel(this.Handle));

            #region Event Bindings
            Load += (s, e) => {
                Reset();
                presenter.BindModel();
            };
            FormClosed += (s, e) => presenter.Dispose();
            openToolStripMenuItem.Click       += (s, e) => OpenFileClicked.Invoke(s, e);
            clearCacheToolStripMenuItem.Click += (s, e) => ClearCacheClicked.Invoke(s, e);
            playPauseToolStripMenuItem.Click  += (s, e) => PlayPauseInvoked.Invoke(s, e);
            playPauseButton.Click             += (s, e) => PlayPauseInvoked.Invoke(s, e);
            stopButton.Click             += (s, e) => StopInvoked.Invoke(s, e);
            stopToolStripMenuItem.Click  += (s, e) => StopInvoked.Invoke(s, e);
            aboutToolStripMenuItem.Click += (s, e) => AboutClicked.Invoke(s, e);
            exitToolStripMenuItem.Click  += (s, e) => Close();

            timeline.MouseMove += (s, e) =>
            {
                if (TimelinePushed)
                {
                    PlaybackPosition = Math.Min(timeline.Width - slider.Width, Math.Max(e.X, 0)) /
                                       Convert.ToDouble(timeline.Width - slider.Width);
                }
            };
            timeline.MouseDown += (s, e) =>
            {
                TimelinePushed   = true;
                PlaybackPosition = Math.Min(timeline.Width - slider.Width, Math.Max(e.X, 0)) /
                                   Convert.ToDouble(timeline.Width - slider.Width);
            };
            timeline.MouseUp             += (s, e) => TimelinePushed = false;
            timeline.MouseCaptureChanged += (s, e) => TimelinePushed = false;
            #endregion
        }
        private void WorkerThread()
        {
            try
            {
                var filterGraph = (IGraphBuilder) new FilterGraph();

                var sourceFilter = GetSourceFilter();
                if (_isDone)
                {
                    return;
                }

                var decoderFilter     = GetDecoderFilter(_decoderType);
                var rendererFilter    = GetRendererFilter(_videoRendererType);
                var soundOutputFilter = GetSoundOutputFilter();

                filterGraph.AddFilter(sourceFilter, "Source");
                filterGraph.AddFilter(decoderFilter, "Video decoder");
                filterGraph.AddFilter(rendererFilter, "Renderer");
                filterGraph.AddFilter(soundOutputFilter, "Sound output");

                var captureGraphBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
                captureGraphBuilder.SetFiltergraph(filterGraph);
                captureGraphBuilder.RenderStream(null, MediaType.Video, sourceFilter, decoderFilter, rendererFilter);
                captureGraphBuilder.RenderStream(null, MediaType.Audio, sourceFilter, null, soundOutputFilter);

                var mediaControl = (IMediaControl)filterGraph;
                var mediaEvent   = (IMediaEvent)filterGraph;

                // Get media event handler
                IntPtr ptr;
                mediaEvent.GetEventHandle(out ptr);

                var hMediaEvent = new ManualResetEvent(false);
                hMediaEvent.SafeWaitHandle = new SafeWaitHandle(ptr, false);

                EventCode eventCode;
                IntPtr    lParam1, lParam2;

                while (true)
                {
                    WaitHandle[] waitHandles = { hMediaEvent, _manualRequest };
                    int          res         = EventWaitHandle.WaitAny(waitHandles, Timeout.Infinite);

                    if (res == 0)
                    {
                        // Media event
                        mediaEvent.GetEvent(out eventCode, out lParam1, out lParam2, 0);
                        mediaEvent.FreeEventParams(eventCode, lParam1, lParam2);
                    }
                    else /* if (res == 1) */
                    {
                        ESessionCommand cmd = _queue.Take();
                        Debug.WriteLine("Request: {0}", cmd);

                        if (cmd == ESessionCommand.Play)
                        {
                            mediaControl.Run();
                        }
                        else if (cmd == ESessionCommand.Stop)
                        {
                            mediaControl.StopWhenReady();
                        }
                        else if (cmd == ESessionCommand.Terminate)
                        {
                            mediaControl.StopWhenReady();
                            break;
                        }
                        else
                        {
                            Debug.WriteLine("Request {0} not supported", cmd);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                App.Current.Dispatcher.Invoke(() =>
                {
                    MessageBox.Show(ex.ToString());
                });
            }
            finally
            {
                if (_customPresenter != null)
                {
                    _customPresenter.Dispose();
                }
            }
        }
Esempio n. 3
0
 private void OnApplicationExit(object sender, EventArgs e)
 {
     _presenter.Dispose();
 }