diff --git a/video/TweetDuck.Video/FormPlayer.Designer.cs b/video/TweetDuck.Video/FormPlayer.Designer.cs index 9aac4c14..c280fa21 100644 --- a/video/TweetDuck.Video/FormPlayer.Designer.cs +++ b/video/TweetDuck.Video/FormPlayer.Designer.cs @@ -36,7 +36,7 @@ private void InitializeComponent() { // // timerSync // - this.timerSync.Interval = 10; + this.timerSync.Interval = 15; this.timerSync.Tick += new System.EventHandler(this.timerSync_Tick); // // trackBarVolume diff --git a/video/TweetDuck.Video/FormPlayer.cs b/video/TweetDuck.Video/FormPlayer.cs index 8bbedee6..9eba92ea 100644 --- a/video/TweetDuck.Video/FormPlayer.cs +++ b/video/TweetDuck.Video/FormPlayer.cs @@ -68,7 +68,9 @@ private void timerSync_Tick(object sender, EventArgs e){ if (NativeMethods.GetWindowRect(ownerHandle, out NativeMethods.RECT rect)){ int width = rect.Right-rect.Left+1; int height = rect.Bottom-rect.Top+1; + IWMPMedia media = Player.currentMedia; + IWMPControls controls = Player.controls; bool isCursorInside = ClientRectangle.Contains(PointToClient(Cursor.Position)); @@ -78,9 +80,9 @@ private void timerSync_Tick(object sender, EventArgs e){ tablePanel.Visible = isCursorInside || isDragging; if (tablePanel.Visible){ - labelTime.Text = $"{Player.controls.currentPositionString} / {Player.currentMedia.durationString}"; + labelTime.Text = $"{controls.currentPositionString} / {media.durationString}"; - int value = (int)Math.Round(progressSeek.Maximum*Player.controls.currentPosition/Player.currentMedia.duration); + int value = (int)Math.Round(progressSeek.Maximum*controls.currentPosition/media.duration); if (value >= progressSeek.Maximum){ progressSeek.Value = progressSeek.Maximum; @@ -93,10 +95,10 @@ private void timerSync_Tick(object sender, EventArgs e){ } } - if (Player.controls.currentPosition > Player.currentMedia.duration){ // pausing near the end of the video causes WMP to play beyond the end of the video wtf - Player.controls.stop(); - Player.controls.currentPosition = 0; - Player.controls.play(); + if (controls.currentPosition > media.duration){ // pausing near the end of the video causes WMP to play beyond the end of the video wtf + controls.stop(); + controls.currentPosition = 0; + controls.play(); } if (isCursorInside && !wasCursorInside){ @@ -109,6 +111,9 @@ private void timerSync_Tick(object sender, EventArgs e){ NativeMethods.SetForegroundWindow(ownerHandle); } } + + Marshal.ReleaseComObject(media); + Marshal.ReleaseComObject(controls); } else{ Environment.Exit(Program.CODE_OWNER_GONE); @@ -122,12 +127,21 @@ private void timerData_Tick(object sender, EventArgs e){ private void progressSeek_MouseDown(object sender, MouseEventArgs e){ if (e.Button == MouseButtons.Left){ - Player.controls.currentPosition = Player.currentMedia.duration*progressSeek.PointToClient(Cursor.Position).X/progressSeek.Width; + IWMPMedia media = Player.currentMedia; + IWMPControls controls = Player.controls; + + controls.currentPosition = media.duration*progressSeek.PointToClient(Cursor.Position).X/progressSeek.Width; + + Marshal.ReleaseComObject(media); + Marshal.ReleaseComObject(controls); } } private void trackBarVolume_ValueChanged(object sender, EventArgs e){ - Player.settings.volume = trackBarVolume.Value; + IWMPSettings settings = Player.settings; + settings.volume = trackBarVolume.Value; + + Marshal.ReleaseComObject(settings); if (timerSync.Enabled){ timerData.Stop(); @@ -146,14 +160,17 @@ private void trackBarVolume_MouseUp(object sender, MouseEventArgs e){ // Controls & messages private void TogglePause(){ + IWMPControls controls = Player.controls; + if (isPaused){ - Player.controls.play(); + controls.play(); } else{ - Player.controls.pause(); + controls.pause(); } isPaused = !isPaused; + Marshal.ReleaseComObject(controls); } internal class MessageFilter : IMessageFilter{