diff --git a/Vocaluxe/Base/CVideo.cs b/Vocaluxe/Base/CVideo.cs index 496e76b1..718222b4 100644 --- a/Vocaluxe/Base/CVideo.cs +++ b/Vocaluxe/Base/CVideo.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; using System.Text; using Vocaluxe.Lib.Draw; @@ -95,4 +97,100 @@ namespace Vocaluxe.Base #endregion VideoDecoder } + + class VideoPlayer + { + private STexture _VideoTexture; + private int _VideoStream; + private Stopwatch _VideoTimer; + private bool _Finished; + private bool _Loaded; + + public bool IsFinished + { + get { return _Finished || !_Loaded; } + } + + public bool Loop + { + set { CVideo.VdSetLoop(_VideoStream, value); } + } + + public VideoPlayer() + { + _VideoTimer = new Stopwatch(); + _VideoTexture = new STexture(-1); + _Finished = false; + _Loaded = false; + } + + public void Load(string VideoName) + { + _VideoStream = CVideo.VdLoad(CTheme.GetVideoFilePath(VideoName)); + _Loaded = true; + } + + public void Start() + { + _VideoTimer.Reset(); + _Finished = false; + //CVideo.VdSkip(_VideoStream, 0f, 0f); + _VideoTimer.Start(); + } + + public void Pause() + { + _VideoTimer.Stop(); + } + + public void Resume() + { + _VideoTimer.Start(); + } + + public void Draw() + { + if (!_Finished) + { + + float VideoTime = _VideoTimer.ElapsedMilliseconds / 1000f; + _Finished = CVideo.VdFinished(_VideoStream); + + STexture tex = new STexture(-1); + tex.height = 0f; + CVideo.VdGetFrame(_VideoStream, ref tex, VideoTime, ref VideoTime); + + if (tex.height > 0) + { + CDraw.RemoveTexture(ref _VideoTexture); + _VideoTexture = tex; + } + } + RectangleF bounds = new RectangleF(0f, 0f, CSettings.iRenderW, CSettings.iRenderH); + RectangleF rect = new RectangleF(0f, 0f, _VideoTexture.width, _VideoTexture.height); + CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); + + CDraw.DrawTexture(_VideoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.zFar / 4)); + } + + public void PreLoad() + { + float VideoTime = 0f; + while (_VideoTexture.index == -1 && VideoTime < 1f) + { + float dummy = 0f; + CVideo.VdGetFrame(_VideoStream, ref _VideoTexture, 0, ref dummy); + VideoTime += 0.05f; + } + } + + public void Close() + { + CVideo.VdClose(_VideoStream); + CDraw.RemoveTexture(ref _VideoTexture); + _Loaded = false; + _Finished = false; + _VideoTimer.Reset(); + } + } } diff --git a/Vocaluxe/Screens/CScreenLoad.cs b/Vocaluxe/Screens/CScreenLoad.cs index 010c5578..d20c7490 100644 --- a/Vocaluxe/Screens/CScreenLoad.cs +++ b/Vocaluxe/Screens/CScreenLoad.cs @@ -260,100 +260,4 @@ namespace Vocaluxe.Screens _IntroOutPlayed = true; } } - - class VideoPlayer - { - private STexture _VideoTexture; - private int _VideoStream; - private Stopwatch _VideoTimer; - private bool _Finished; - private bool _Loaded; - - public bool IsFinished - { - get { return _Finished || !_Loaded; } - } - - public bool Loop - { - set { CVideo.VdSetLoop(_VideoStream, value); } - } - - public VideoPlayer() - { - _VideoTimer = new Stopwatch(); - _VideoTexture = new STexture(-1); - _Finished = false; - _Loaded = false; - } - - public void Load(string VideoName) - { - _VideoStream = CVideo.VdLoad(CTheme.GetVideoFilePath(VideoName)); - _Loaded = true; - } - - public void Start() - { - _VideoTimer.Reset(); - _Finished = false; - //CVideo.VdSkip(_VideoStream, 0f, 0f); - _VideoTimer.Start(); - } - - public void Pause() - { - _VideoTimer.Stop(); - } - - public void Resume() - { - _VideoTimer.Start(); - } - - public void Draw() - { - if (!_Finished) - { - - float VideoTime = _VideoTimer.ElapsedMilliseconds / 1000f; - _Finished = CVideo.VdFinished(_VideoStream); - - STexture tex = new STexture(-1); - tex.height = 0f; - CVideo.VdGetFrame(_VideoStream, ref tex, VideoTime, ref VideoTime); - - if (tex.height > 0) - { - CDraw.RemoveTexture(ref _VideoTexture); - _VideoTexture = tex; - } - } - RectangleF bounds = new RectangleF(0f, 0f, CSettings.iRenderW, CSettings.iRenderH); - RectangleF rect = new RectangleF(0f, 0f, _VideoTexture.width, _VideoTexture.height); - CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); - - CDraw.DrawTexture(_VideoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.zFar / 4)); - } - - public void PreLoad() - { - float VideoTime = 0f; - while (_VideoTexture.index == -1 && VideoTime < 1f) - { - float dummy = 0f; - CVideo.VdGetFrame(_VideoStream, ref _VideoTexture, 0, ref dummy); - VideoTime += 0.05f; - } - } - - public void Close() - { - CVideo.VdClose(_VideoStream); - CDraw.RemoveTexture(ref _VideoTexture); - _Loaded = false; - _Finished = false; - _VideoTimer.Reset(); - } - } }