From 89f6faa8a1f701271e11e71136cde78d5997ea9a Mon Sep 17 00:00:00 2001 From: niksedk Date: Tue, 7 Feb 2012 05:59:13 +0000 Subject: [PATCH] Faked precise seeking when vlc is paused - very useful for time line! git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@967 99eadd0c-20b8-1223-b5c4-2a2b2df33de2 --- src/Forms/Main.cs | 12 ------------ src/Logic/VideoPlayers/LibVlcDynamic.cs | 9 ++++++++- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/Forms/Main.cs b/src/Forms/Main.cs index 8b227535d..9c4eb3627 100644 --- a/src/Forms/Main.cs +++ b/src/Forms/Main.cs @@ -744,18 +744,6 @@ namespace Nikse.SubtitleEdit.Forms if (SubtitleListview1.SelectedItems.Count > 0) index = SubtitleListview1.SelectedItems[0].Index; SetWaveFormPosition(audioVisualizer.StartPositionSeconds, seconds, index); - - //if (mediaPlayer.VideoPlayer != null && mediaPlayer.VideoPlayer is Nikse.SubtitleEdit.Logic.VideoPlayers.LibVlc11xDynamic) //TODO: Fix this hack! - //{ - // double newPosition = seconds - 0.015; - // for (int i = 0; i < 200; i++) - // { - // if (mediaPlayer.CurrentPosition > seconds) - // mediaPlayer.CurrentPosition = newPosition; - // System.Threading.Thread.Sleep(1); - // Application.DoEvents(); - // } - //} timerWaveForm.Start(); } diff --git a/src/Logic/VideoPlayers/LibVlcDynamic.cs b/src/Logic/VideoPlayers/LibVlcDynamic.cs index 5f97d6ab7..fba349b46 100644 --- a/src/Logic/VideoPlayers/LibVlcDynamic.cs +++ b/src/Logic/VideoPlayers/LibVlcDynamic.cs @@ -17,6 +17,7 @@ namespace Nikse.SubtitleEdit.Logic.VideoPlayers private IntPtr _mediaPlayer; private System.Windows.Forms.Control _ownerControl; private System.Windows.Forms.Form _parentForm; + private double? _pausePosition = null; // Hack to hold precise seeking when paused [DllImport("user32")] private static extern short GetKeyState(int vKey); @@ -255,11 +256,15 @@ namespace Nikse.SubtitleEdit.Logic.VideoPlayers { get { + if (_pausePosition != null) + return _pausePosition.Value; return _libvlc_media_player_get_time(_mediaPlayer) / 1000.0; } set { - _libvlc_media_player_set_time(_mediaPlayer, (long)(value * 1000.0)); + if (IsPaused && value <= Duration) + _pausePosition = value; + _libvlc_media_player_set_time(_mediaPlayer, (long)(value * 1000.0 + 0.5)); } } @@ -279,6 +284,7 @@ namespace Nikse.SubtitleEdit.Logic.VideoPlayers public override void Play() { _libvlc_media_player_play(_mediaPlayer); + _pausePosition = null; } public override void Pause() @@ -290,6 +296,7 @@ namespace Nikse.SubtitleEdit.Logic.VideoPlayers public override void Stop() { _libvlc_media_player_stop(_mediaPlayer); + _pausePosition = null; } public override bool IsPaused