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
This commit is contained in:
niksedk 2012-02-07 05:59:13 +00:00
parent 6f56324534
commit 89f6faa8a1
2 changed files with 8 additions and 13 deletions

View File

@ -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();
}

View File

@ -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