video playback speed control
parent
3966a0c4ea
commit
ad0c86e8f6
|
@ -17,9 +17,9 @@ namespace MoonWorks.Video
|
||||||
{
|
{
|
||||||
private IntPtr Handle;
|
private IntPtr Handle;
|
||||||
|
|
||||||
public bool Loop { get; set; }
|
public bool Loop { get; private set; }
|
||||||
public bool Mute { get; set; }
|
public float Volume { get; private set; }
|
||||||
public float Volume { get; set; }
|
public float PlaybackSpeed { get; set; }
|
||||||
public double FramesPerSecond => fps;
|
public double FramesPerSecond => fps;
|
||||||
private VideoState State = VideoState.Stopped;
|
private VideoState State = VideoState.Stopped;
|
||||||
|
|
||||||
|
@ -41,6 +41,8 @@ namespace MoonWorks.Video
|
||||||
private Sampler LinearSampler;
|
private Sampler LinearSampler;
|
||||||
|
|
||||||
private Stopwatch timer;
|
private Stopwatch timer;
|
||||||
|
private double lastTimestamp;
|
||||||
|
private double timeElapsed;
|
||||||
|
|
||||||
private bool disposed;
|
private bool disposed;
|
||||||
|
|
||||||
|
@ -173,6 +175,8 @@ namespace MoonWorks.Video
|
||||||
timer.Reset();
|
timer.Reset();
|
||||||
|
|
||||||
Theorafile.tf_reset(Handle);
|
Theorafile.tf_reset(Handle);
|
||||||
|
lastTimestamp = 0;
|
||||||
|
timeElapsed = 0;
|
||||||
|
|
||||||
State = VideoState.Stopped;
|
State = VideoState.Stopped;
|
||||||
}
|
}
|
||||||
|
@ -189,7 +193,10 @@ namespace MoonWorks.Video
|
||||||
return RenderTexture;
|
return RenderTexture;
|
||||||
}
|
}
|
||||||
|
|
||||||
int thisFrame = (int) (timer.Elapsed.TotalMilliseconds / (1000.0 / FramesPerSecond));
|
timeElapsed += (timer.Elapsed.TotalMilliseconds - lastTimestamp) * PlaybackSpeed;
|
||||||
|
lastTimestamp = timer.Elapsed.TotalMilliseconds;
|
||||||
|
|
||||||
|
int thisFrame = ((int) (timeElapsed / (1000.0 / FramesPerSecond)));
|
||||||
if (thisFrame > currentFrame)
|
if (thisFrame > currentFrame)
|
||||||
{
|
{
|
||||||
if (Theorafile.tf_readvideo(
|
if (Theorafile.tf_readvideo(
|
||||||
|
|
Loading…
Reference in New Issue