private void OnPacketSmoothingTimerCallback(object state) { RiderStateEventArgs riderState = null; lock (this) { if (m_latestPlayerStateEventArgs != null) { riderState = new RiderStateEventArgs(m_latestPlayerStateEventArgs); m_latestPlayerStateEventArgs = null; } } if (riderState != null) { if (m_debugMode) { Logger.LogInformation($"TRACING-INCOMING: PlayerId: {riderState.Id}, Power: {riderState.Power}, HeartRate: {riderState.Heartrate}, Distance: {riderState.Distance}, Time: {riderState.Time}, Course: {riderState.Course}, RoadId: {riderState.RoadId}, IsForward: {riderState.IsForward}, RoadTime: {riderState.RoadTime}"); } else { Logger.LogInformation($"TRACING-OUTGOING: Power: {riderState.Power}, HeartRate: {riderState.Heartrate}, Distance: {riderState.Distance}, Time: {riderState.Time}, Course: {riderState.Course}, RoadId: {riderState.RoadId}, IsForward: {riderState.IsForward}, RoadTime: {riderState.RoadTime}"); } m_eventsProcessed++; OnRiderStateEvent(riderState); } }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { if (e.OldState != PlayerState.Closed) { return; } GuiThread.DoAsync(delegate { if (Media.AudioTrack == null) { return; } // This has to be done via GuiThread.DoAsync because when this method is called // Player.Filters has not been populated // Using GuiThread.DoAsync essentially queues this delegate until the media file // is actually opened and all Player fields have been populated if (Player.Filters.Any(f => f.ClsId == s_SanearSoundClsId)) { m_Sanear = true; } else if (Player.Filters.Any(f => f.ClsId == s_DirectSoundClsId || f.ClsId == s_WaveOutClsId)) { m_DirectSoundWaveOut = true; } else { Player.OsdText.Show("Warning: Audio renderer is incompatible with Reclock. Reclock disabled!"); } }); }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { if (e.OldState == PlayerState.Closed) { var audioDecoder = Player.Filters.Audio.FirstOrDefault(f => f.ClsId == s_ClsIdLavAudioDecoder); if (audioDecoder == null) { return; } ComThread.Do(() => { var settings = (ILAVAudioSettings)audioDecoder.Base; m_LavAudioSettings = settings; }); m_AddDelayMenu.Enabled = true; m_MinusDelayMenu.Enabled = true; m_ResetDelayMenu.Enabled = true; } else if (e.NewState == PlayerState.Closed) { m_LavAudioSettings = null; m_AddDelayMenu.Enabled = false; m_MinusDelayMenu.Enabled = false; m_ResetDelayMenu.Enabled = false; } }
private void m_PlayerControl_PlayerStateChanged(object sender, PlayerStateEventArgs e) { switch (e.NewState) { case PlayerState.Playing: m_LocationTimer.Start(); PushToAllListeners(GetAllChapters()); PushToAllListeners(GetAllSubtitleTracks()); PushToAllListeners(GetAllAudioTracks()); PushToAllListeners(GetAllVideoTracks()); break; case PlayerState.Stopped: case PlayerState.Closed: m_LocationTimer.Stop(); break; case PlayerState.Paused: m_LocationTimer.Start(); break; } PushToAllListeners(e.NewState + "|" + Media.FilePath); if (e.OldState == PlayerState.Closed) { GetPlaylistActiveIndex(); } }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { foreach (var item in m_MenuItems) { item.Enabled = e.NewState != PlayerState.Closed; } }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { if (CurrentItem == null) { return; } Text = PlayerControl.PlayerState + " - " + CurrentItem.FilePath; }
private void PlayerOnStateChanged(object sender, PlayerStateEventArgs playerStateEventArgs) { if (playerStateEventArgs.OldState == PlayerState.Closed && m_SubtitleFile != null) { LoadSubtitleFile(m_SubtitleFile); m_SubtitleFile = null; } }
public RiderStateEventArgs(PlayerStateEventArgs e) { this.Id = e.PlayerState.Id; this.Power = e.PlayerState.Power; this.Heartrate = e.PlayerState.Heartrate; this.Distance = e.PlayerState.Distance; this.Time = e.PlayerState.Time; this.WorldTime = e.PlayerState.WorldTime; }
/// <summary> /// Internal event handler to filter player events /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PlayerEventHandler(object sender, PlayerStateEventArgs e) { try { if (m_debugMode) { if (m_trackedPlayerId == 0) { if (m_targetHR > 0 || m_targetPower > 0) // these will both be zero if randomly choosing a player { if ((m_targetHR == 0 || (e.PlayerState.Heartrate >= m_targetHR - 2 && e.PlayerState.Heartrate <= m_targetHR + 2)) && (m_targetPower == 0 || e.PlayerState.Power >= m_targetPower - 10 && e.PlayerState.Power <= m_targetPower + 10)) { m_trackedPlayerId = e.PlayerState.Id; Logger.LogInformation($"Monitoring player: {m_trackedPlayerId}"); } } else // randomly choose, not recommended { m_trackedPlayerId = e.PlayerState.Id; //m_trackedPlayerId = 98597; } } if (m_trackedPlayerId != e.PlayerState.Id) { return; // not our guy } } else { //Logger.LogInformation($"TRACING-OUTGOING: {e.PlayerState}"); } // Capture the latest PlayerState.Time value. This corresponds to the elapsed time the player sees on screen. // We can use this to know when the Zwift ride actually starts so that the ZAM clocks start simutaneously. // // Packets come in randomly but usually more than once per second. Here we always capture the latest packet, // but it's only distributed once every second when the timer fires. This is standard collection process. lock (this) { // Lock is used to avoid contention between threads m_playerStateTime = new TimeSpan(0, 0, e.PlayerState.Time); m_latestPlayerStateEventArgs = e; } // For some applications we might want to see every packet, so provide a high-resolution event. OnHighResRiderStateEvent(new RiderStateEventArgs(e)); } catch (Exception ex) { Logger.LogError($"Exception occurred: {ex}"); } }
private void OnPlayerStateChanged(object sender, PlayerStateEventArgs args) { var enabled = (args.NewState == PlayerState.Playing || args.NewState == PlayerState.Paused) && Renderer.InputFormat.IsYuv(); m_Enabled = enabled; m_LevelsMenu.Enabled = enabled; m_MatrixMenu.Enabled = enabled; m_ToggleLevelsMenu.Enabled = enabled; m_ToggleMatrixMenu.Enabled = enabled; if (args.OldState == PlayerState.Closed) { // Save states so we can restore the temporary settings when media is closed m_OriginalOutputLevels = RendererSettings.OutputLevels; m_OutputLevels = m_OriginalOutputLevels; m_OriginalImproveChroma = RendererSettings.ImproveChromaReconstruction; m_ImproveChroma = m_OriginalImproveChroma; } if (args.NewState == PlayerState.Closed) { // Restore on media close var refresh = false; if (RendererSettings.OutputLevels != m_OriginalOutputLevels) { RendererSettings.OutputLevels = m_OriginalOutputLevels; refresh = true; } if (RendererSettings.ImproveChromaReconstruction != m_OriginalImproveChroma) { RendererSettings.ImproveChromaReconstruction = m_OriginalImproveChroma; refresh = true; } if (refresh) { Player.Config.Refresh(); } } if (args.NewState != PlayerState.Closed && args.OldState != PlayerState.Closed) { return; } UpdateControls(); }
void m_PlayerControl_PlayerStateChanged(object sender, PlayerStateEventArgs e) { foreach (var writer in writers) { try { writer.Value.WriteLine(e.NewState.ToString() + "|" + PlayerControl.MediaFilePath); writer.Value.Flush(); } catch { } } }
private void OnPlayerStateChanged(object sender, PlayerStateEventArgs e) { SetActiveFile(); if (e.OldState == PlayerState.Closed) { m_Form.LoadNextInBackground(); } else if (e.NewState == PlayerState.Closed) { // If we're not playing the next file anytime soon, clean up the preloaded media m_Timer.Start(); } }
public RiderStateEventArgs(PlayerStateEventArgs e) { this.Id = e.PlayerState.Id; this.Power = e.PlayerState.Power; this.Heartrate = e.PlayerState.Heartrate; this.Distance = e.PlayerState.Distance; this.Time = e.PlayerState.Time; this.WorldTime = e.PlayerState.WorldTime; this.RoadTime = e.PlayerState.RoadTime; //this.RoadPosition = e.PlayerState.RoadPosition; this.WatchingRiderId = e.PlayerState.WatchingRiderId; // credit for decoding these goes to zoffline/zwift-offline/standalone.py this.RoadId = (e.PlayerState.F20 & 0xFF00) >> 8; this.IsForward = (e.PlayerState.F19 & 0x04) != 0; this.Course = (e.PlayerState.F19 & 0xFF0000) >> 16; }
private void PlayerCharacter_OnPlayerStateChanged(object sender, PlayerStateEventArgs e) { switch (e.value) { case PlayerCharacter.PlayerStates.Idle: returnToTavernButton.enabled = true; break; case PlayerCharacter.PlayerStates.Dead: gameOverPanel.SetActive(true); break; default: returnToTavernButton.enabled = false; break; } }
private void OnPlayerStateChanged(object sender, PlayerStateEventArgs args) { var enabled = (args.NewState == PlayerState.Playing || args.NewState == PlayerState.Paused) && !(Renderer.InputFormat == FrameBufferInputFormat.Rgb24 || Renderer.InputFormat == FrameBufferInputFormat.Rgb32 || Renderer.InputFormat == FrameBufferInputFormat.Rgb48); m_Enabled = enabled; m_LevelsMenu.Enabled = enabled; m_MatrixMenu.Enabled = enabled; m_ToggleLevelsMenu.Enabled = enabled; m_ToggleMatrixMenu.Enabled = enabled; if (args.NewState != PlayerState.Closed && args.OldState != PlayerState.Closed) { return; } UpdateControls(); }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { switch (e.NewState) { case PlayerState.Closed: Taskbar.SetProgressState(TaskbarProgressBarState.NoProgress); m_UpdateTimer.Stop(); s_PlayPauseButton.Icon = s_PlayIcon; s_PlayPauseButton.Tooltip = TEXT_PLAY; Taskbar.SetOverlayIcon(m_MpdnFormHandle, null, ""); break; case PlayerState.Stopped: Taskbar.SetProgressState(TaskbarProgressBarState.NoProgress); m_UpdateTimer.Start(); s_PlayPauseButton.Icon = s_PlayIcon; s_PlayPauseButton.Tooltip = TEXT_PLAY; Taskbar.SetOverlayIcon(m_MpdnFormHandle, null, ""); break; case PlayerState.Playing: Taskbar.SetProgressState(TaskbarProgressBarState.Normal); m_UpdateTimer.Start(); s_PlayPauseButton.Icon = s_PauseIcon; s_PlayPauseButton.Tooltip = TEXT_PAUSE; Taskbar.SetOverlayIcon(m_MpdnFormHandle, s_PlayOverlayIcon, "Playing"); break; case PlayerState.Paused: Taskbar.SetProgressState(TaskbarProgressBarState.Paused); m_UpdateTimer.Start(); s_PlayPauseButton.Icon = s_PlayIcon; s_PlayPauseButton.Tooltip = TEXT_PLAY; Taskbar.SetOverlayIcon(m_MpdnFormHandle, s_PauseOverlayIcon, "Paused"); break; default: throw new ArgumentOutOfRangeException(); } }
private void OnPlayerStateChanged(object sender, PlayerStateEventArgs args) { var enabled = (args.NewState == PlayerState.Playing || args.NewState == PlayerState.Paused) && Renderer.InputFormat.IsYuv(); m_Enabled = enabled; m_ApplyLetterBoxingMenu.Enabled = enabled; m_Zoom75LetterBoxingMenu.Enabled = enabled; m_Zoom50LetterBoxingMenu.Enabled = enabled; m_Zoom25LetterBoxingMenu.Enabled = enabled; m_ZoomNoLetterBoxingMenu.Enabled = enabled; m_FillMenu.Enabled = enabled; m_ToggleLetterBoxingMenu.Enabled = enabled; if (args.NewState != PlayerState.Closed && args.OldState != PlayerState.Closed) { return; } UpdateControls(); }
void m_PlayerControl_PlayerStateChanged(object sender, PlayerStateEventArgs e) { switch (e.NewState) { case PlayerState.Playing: _locationTimer.Start(); PushToAllListeners(GetAllChapters()); PushToAllListeners(GetAllSubtitleTracks()); PushToAllListeners(GetAllAudioTracks()); break; case PlayerState.Stopped: _locationTimer.Stop(); break; case PlayerState.Paused: _locationTimer.Stop(); break; } PushToAllListeners(e.NewState + "|" + PlayerControl.MediaFilePath); }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { if (e.OldState == PlayerState.Closed) { starTiming = SubtitleManager.GetTiming(); if (starTiming == null) { return; } SetDefaultCurrentTiming(); m_AddDelayMenu.Enabled = true; m_MinusDelayMenu.Enabled = true; m_ResetDelayMenu.Enabled = true; } else if (e.NewState == PlayerState.Closed) { m_AddDelayMenu.Enabled = false; m_MinusDelayMenu.Enabled = false; m_ResetDelayMenu.Enabled = false; } }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { m_MenuItem.Enabled = e.NewState != PlayerState.Closed; }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { if (e.NewState == PlayerState.Closed) { RestoreSettings(); return; } if (e.OldState != PlayerState.Closed) { return; } if (!Activated()) { return; } m_RestoreFrequency = 0; var screen = Screen.FromControl(PlayerControl.VideoPanel); var frequencies = GetFrequencies(screen); if (!frequencies.Any()) { return; } var timePerFrame = PlayerControl.VideoInfo.AvgTimePerFrame; if (Math.Abs(timePerFrame) < 1) { return; } var fps = Math.Round(1000000 / timePerFrame, 3); if (Math.Abs(fps) < 1) { return; } // Find the highest frequency that matches fps var frequenciesDescending = frequencies.OrderByDescending(f => f).ToArray(); var frequency = frequenciesDescending.FirstOrDefault(f => MatchFrequencies(f, fps)); if (frequency == 0) { // Exact match (23 for 23.976) not found // Find the closest one that matches fps (e.g. 24 for 23.976) frequency = frequenciesDescending.FirstOrDefault(f => MatchRoundedFrequencies(f, fps)); } if (frequency == 0) { // Still couldn't find a match if (!Settings.HighestRate) { return; } // Use the highest rate available frequency = frequenciesDescending.First(); } ChangeRefreshRate(screen, frequency); }
private void OnPlayerStateChanged(object sender, PlayerStateEventArgs args) { var enabled = (args.NewState == PlayerState.Playing || args.NewState == PlayerState.Paused) && Renderer.InputFormat.IsYuv(); m_Enabled = enabled; m_ApplyLetterBoxingMenu.Enabled = enabled; m_Zoom75LetterBoxingMenu.Enabled = enabled; m_Zoom50LetterBoxingMenu.Enabled = enabled; m_Zoom25LetterBoxingMenu.Enabled = enabled; m_ZoomNoLetterBoxingMenu.Enabled = enabled; m_FillMenu.Enabled = enabled; m_ToggleLetterBoxingMenu.Enabled = enabled; if (args.NewState != PlayerState.Closed && args.OldState != PlayerState.Closed) return; UpdateControls(); }
/// <summary> /// Internal event handler to filter player events /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PlayerEventHandler(object sender, PlayerStateEventArgs e) { try { if (m_debugMode) { if (m_trackedPlayerId == 0) { if (m_targetHR > 0 || m_targetPower > 0) // these will both be zero if randomly choosing a player { if ((m_targetHR == 0 || (e.PlayerState.Heartrate >= m_targetHR - 2 && e.PlayerState.Heartrate <= m_targetHR + 2)) && (m_targetPower == 0 || e.PlayerState.Power >= m_targetPower - 10 && e.PlayerState.Power <= m_targetPower + 10)) { m_trackedPlayerId = e.PlayerState.Id; Logger.LogInformation($"Monitoring player: {m_trackedPlayerId}"); } } else // randomly choose, not recommended { m_trackedPlayerId = e.PlayerState.Id; } } if (m_trackedPlayerId != e.PlayerState.Id) { return; // not our guy } } else { //Logger.LogInformation($"TRACING-OUTGOING: {e.PlayerState}"); } // Capture the latest PlayerState.Time value. This corresponds to the elapsed time the player sees on screen. // We can use this to know when the Zwift ride actually starts so that the ZAM clocks start simutaneously. // // Packets come in randomly but usually more than once per second. Here we always capture the latest packet, // but it's only distributed once every second when the timer fires. lock (this) { // Lock is used to avoid contention between threads m_playerStateTime = new TimeSpan(0, 0, e.PlayerState.Time); m_latestPlayerStateEventArgs = e; } //// only receive updates approx once/sec //if ((DateTime.Now - m_lastPlayerStateUpdate).TotalMilliseconds < 900) //{ // return; //} //m_lastPlayerStateUpdate = DateTime.Now; //// Do work here //OnPlayerStateEvent(e); } catch (Exception ex) { Logger.LogError($"Exception occurred: {ex}"); } }
private void OnPlayerStateChanged(object sender, PlayerStateEventArgs args) { var enabled = (args.NewState == PlayerState.Playing || args.NewState == PlayerState.Paused) && !(Renderer.InputFormat == FrameBufferInputFormat.Rgb24 || Renderer.InputFormat == FrameBufferInputFormat.Rgb32 || Renderer.InputFormat == FrameBufferInputFormat.Rgb48); m_Enabled = enabled; m_LevelsMenu.Enabled = enabled; m_MatrixMenu.Enabled = enabled; m_ToggleLevelsMenu.Enabled = enabled; m_ToggleMatrixMenu.Enabled = enabled; if (args.NewState != PlayerState.Closed && args.OldState != PlayerState.Closed) return; UpdateControls(); }
private void OnPlayerStateChanged(object sender, PlayerStateEventArgs args) { var enabled = (args.NewState == PlayerState.Playing || args.NewState == PlayerState.Paused) && Renderer.InputFormat.IsYuv(); m_Enabled = enabled; m_LevelsMenu.Enabled = enabled; m_MatrixMenu.Enabled = enabled; m_ToggleLevelsMenu.Enabled = enabled; m_ToggleMatrixMenu.Enabled = enabled; m_ToggleImproveChromaMenu.Enabled = enabled; if (args.OldState == PlayerState.Closed) { // Save states so we can restore the temporary settings when media is closed m_OriginalOutputLevels = RendererSettings.OutputLevels; m_OutputLevels = m_OriginalOutputLevels; m_OriginalImproveChroma = RendererSettings.ImproveChromaReconstruction; m_ImproveChroma = m_OriginalImproveChroma; } if (args.NewState == PlayerState.Closed) { // Restore on media close var refresh = false; if (RendererSettings.OutputLevels != m_OriginalOutputLevels) { RendererSettings.OutputLevels = m_OriginalOutputLevels; refresh = true; } if (RendererSettings.ImproveChromaReconstruction != m_OriginalImproveChroma) { RendererSettings.ImproveChromaReconstruction = m_OriginalImproveChroma; refresh = true; } if (refresh) { Player.Config.Refresh(); } } if (args.NewState != PlayerState.Closed && args.OldState != PlayerState.Closed) return; UpdateControls(); }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { if (e.OldState == PlayerState.Closed) { var audioDecoder = Player.Filters.Audio.FirstOrDefault(f => f.ClsId == s_ClsIdLavAudioDecoder); if (audioDecoder == null) return; ComThread.Do(() => { var settings = (ILAVAudioSettings)audioDecoder.Base; m_LavAudioSettings = settings; }); m_AddDelayMenu.Enabled = true; m_MinusDelayMenu.Enabled = true; m_ResetDelayMenu.Enabled = true; } else if (e.NewState == PlayerState.Closed) { m_LavAudioSettings = null; m_AddDelayMenu.Enabled = false; m_MinusDelayMenu.Enabled = false; m_ResetDelayMenu.Enabled = false; } }
private void PlayerStateChanged(object sender, PlayerStateEventArgs e) { if (e.OldState == PlayerState.Closed) { starTiming = SubtitleManager.GetTiming(); if (starTiming == null) return; SetDefaultCurrentTiming(); m_AddDelayMenu.Enabled = true; m_MinusDelayMenu.Enabled = true; m_ResetDelayMenu.Enabled = true; } else if (e.NewState == PlayerState.Closed) { m_AddDelayMenu.Enabled = false; m_MinusDelayMenu.Enabled = false; m_ResetDelayMenu.Enabled = false; } }