private void OnCopyData(object sender, EventArgs e) { var message = (Message)sender; var cds = (NativeMethods.CopyDataStruct)Marshal.PtrToStructure(message.LParam, typeof(NativeMethods.CopyDataStruct)); var command = cds.dwData.ToUInt32(); var param = Marshal.PtrToStringAuto(cds.lpData); var multiParam = param.Split('|'); switch (cds.dwData.ToUInt32()) { case MpcHcCommand.Connect: _positionTimer.Stop(); _mpcHandle = (IntPtr)Convert.ToInt64(Marshal.PtrToStringAuto(cds.lpData)); SendMpcMessage(MpcHcCommand.OpenFile, _videoFileName); _positionTimer.Start(); break; case MpcHcCommand.PlayMode: _playMode = param; if (param == ModePlay && _loaded == 0) { _loaded = 1; if (!HijackMpcHc()) { Application.DoEvents(); HijackMpcHc(); } } break; case MpcHcCommand.NowPlaying: if (_loaded == 1) { _loaded = 2; _durationInSeconds = double.Parse(multiParam[4], CultureInfo.InvariantCulture); Pause(); Resize(_initialWidth, _initialHeight); if (OnVideoLoaded != null) { OnVideoLoaded.Invoke(this, new EventArgs()); } SendMpcMessage(MpcHcCommand.SetSubtitleTrack, "-1"); } break; case MpcHcCommand.NotifyEndOfStream: if (OnVideoEnded != null) { OnVideoEnded.Invoke(this, new EventArgs()); } break; case MpcHcCommand.CurrentPosition: _positionInSeconds = double.Parse(param, CultureInfo.InvariantCulture); break; } }
private void VideoEndTimerTick(object sender, EventArgs e) { if (_isPaused == false && _quartzFilgraphManager != null && CurrentPosition >= Duration) { _isPaused = true; if (OnVideoEnded != null && _quartzFilgraphManager != null) { OnVideoEnded.Invoke(_quartzFilgraphManager, new EventArgs()); } } }
private void VideoEndTimerTick(object sender, EventArgs e) { const int Ended = 6; int state = _libvlc_media_player_get_state(_mediaPlayer); if (state == Ended) { // hack to make sure VLC is in ready state Stop(); Play(); Pause(); OnVideoEnded.Invoke(_mediaPlayer, new EventArgs()); } }
private void VideoEndTimerTick(object sender, EventArgs e) { lock (DisposeLock) { if (_mediaPlayer == IntPtr.Zero) { return; } const int ended = 6; int state = _libvlc_media_player_get_state(_mediaPlayer); if (state != ended) { return; } // hack to make sure VLC is in ready state Stop(); Play(); Pause(); OnVideoEnded?.Invoke(_mediaPlayer, new EventArgs()); } }
private void OnCopyData(object sender, EventArgs e) { var message = (Message)sender; var cds = (NativeMethods.CopyDataStruct)Marshal.PtrToStructure(message.LParam, typeof(NativeMethods.CopyDataStruct)); var command = cds.dwData.ToUInt32(); var param = Marshal.PtrToStringAuto(cds.lpData); var multiParam = new string[0]; if (param != null) { multiParam = param.Split('|'); } switch (command) { case MpcHcCommand.Connect: _positionTimer.Stop(); _mpcHandle = (IntPtr)Convert.ToInt64(Marshal.PtrToStringAuto(cds.lpData)); SendMpcMessage(MpcHcCommand.OpenFile, _videoFileName); _positionTimer.Start(); break; case MpcHcCommand.PlayMode: _playMode = param; if (param == ModePlay && _loaded == 0) { _loaded = 1; if (!HijackMpcHc()) { Application.DoEvents(); HijackMpcHc(); } } Application.DoEvents(); HideMpcPlayerWindow(); break; case MpcHcCommand.NowPlaying: if (_loaded == 1) { _loaded = 2; _durationInSeconds = 5000; double d; if (multiParam.Length >= 5 && double.TryParse(multiParam[4].Replace(",", ".").Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d)) { _durationInSeconds = d; } else if (multiParam.Length >= 1 && double.TryParse(multiParam[multiParam.Length - 1].Replace(",", ".").Trim(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d)) { _durationInSeconds = d; } Pause(); Resize(_initialWidth, _initialHeight); if (OnVideoLoaded != null) { OnVideoLoaded.Invoke(this, new EventArgs()); } SendMpcMessage(MpcHcCommand.SetSubtitleTrack, "-1"); // be sure to hide MPC _hideMpcTimerCount = 20; _hideMpcTimer.Interval = 100; _hideMpcTimer.Tick += (o, args) => { _hideMpcTimer.Stop(); if (_hideMpcTimerCount > 0) { Application.DoEvents(); HideMpcPlayerWindow(); _hideMpcTimerCount--; _hideMpcTimer.Start(); } }; _hideMpcTimer.Start(); } break; case MpcHcCommand.NotifyEndOfStream: if (OnVideoEnded != null) { OnVideoEnded.Invoke(this, new EventArgs()); } break; case MpcHcCommand.CurrentPosition: if (!string.IsNullOrWhiteSpace(param)) { double d; if (double.TryParse(param.Replace(",", "."), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d)) { _positionInSeconds = d; } } break; } }
private void MPlayerOutputDataReceived(object sender, DataReceivedEventArgs e) { if (e.Data == null) { return; } System.Diagnostics.Debug.WriteLine("MPlayer: " + e.Data); if (e.Data.StartsWith("Playing ")) { _loaded = true; return; } if (e.Data.StartsWith("Exiting...")) { _ended = true; if (_loaded) { _mplayer.StandardInput.WriteLine("loadfile " + _videoFileName); if (OnVideoEnded != null) { OnVideoEnded.Invoke(this, null); } } return; } int indexOfEqual = e.Data.IndexOf('='); if (indexOfEqual > 0 && indexOfEqual + 1 < e.Data.Length && e.Data.StartsWith("ANS_")) { string code = e.Data.Substring(0, indexOfEqual); string value = e.Data.Substring(indexOfEqual + 1); switch (code) { // Examples: // ANS_time_pos=8.299958, ANS_width=624, ANS_height=352, ANS_fps=23.976025, ANS_video_format=1145656920, ANS_video_format=1145656920, ANS_video_codec=ffodivx, // ANS_length=1351.600213, ANS_volume=100.000000 case "ANS_time_pos": _timePosition = Convert.ToDouble(value.Replace(",", "."), CultureInfo.InvariantCulture); break; case "ANS_width": Width = Convert.ToInt32(value); break; case "ANS_height": Height = Convert.ToInt32(value); break; case "ANS_fps": double d; if (double.TryParse(value, out d)) { FramesPerSecond = (float)Convert.ToDouble(value.Replace(",", "."), CultureInfo.InvariantCulture); } else { FramesPerSecond = 25.0f; } break; case "ANS_video_format": VideoFormat = value; break; case "ANS_video_codec": VideoCodec = value; break; case "ANS_length": _lengthInSeconds = TimeSpan.FromSeconds(Convert.ToDouble(value.Replace(",", "."), CultureInfo.InvariantCulture)); break; case "ANS_volume": _volume = (float)Convert.ToDouble(value.Replace(",", "."), CultureInfo.InvariantCulture); break; case "ANS_pause": if (value == "yes" || value == "1") { _pauseCounts++; } else { _pauseCounts--; } if (_pauseCounts > 3) { _paused = true; } else if (_pauseCounts < -3) { _paused = false; _pausePosition = null; } else if (Math.Abs(_pauseCounts) > 10) { _pauseCounts = 0; } break; } _waitForChange = false; } }