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(); } } }
private void OnApplicationExit(object sender, EventArgs e) { _presenter.Dispose(); }