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