From 5a97bd3f33bf5c9f47709dcff2a3ab37978e3f6c Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Mon, 11 Mar 2024 18:10:34 -0700 Subject: [PATCH] blocking implementation of VideoPlayer --- src/Video/VideoPlayer.cs | 53 +++++----------------------------------- 1 file changed, 6 insertions(+), 47 deletions(-) diff --git a/src/Video/VideoPlayer.cs b/src/Video/VideoPlayer.cs index 39dc44c..858a7e7 100644 --- a/src/Video/VideoPlayer.cs +++ b/src/Video/VideoPlayer.cs @@ -1,6 +1,5 @@ using System; using System.Diagnostics; -using System.Threading.Tasks; using MoonWorks.Graphics; namespace MoonWorks.Video @@ -18,10 +17,6 @@ namespace MoonWorks.Video private VideoAV1 Video = null; private VideoAV1Stream CurrentStream = null; - private Task ReadNextFrameTask; - private Task ResetTask; - private Task ResetSecondaryStreamTask; - private Texture yTexture = null; private Texture uTexture = null; private Texture vTexture = null; @@ -164,10 +159,6 @@ namespace MoonWorks.Video /// public void Unload() { - ReadNextFrameTask?.Wait(); - ResetTask?.Wait(); - ResetSecondaryStreamTask?.Wait(); - timer.Stop(); timer.Reset(); @@ -179,9 +170,6 @@ namespace MoonWorks.Video Video.StreamA.Unload(); Video.StreamB.Unload(); - ReadNextFrameTask = null; - ResetTask = null; - ResetSecondaryStreamTask = null; Video = null; } @@ -208,8 +196,7 @@ namespace MoonWorks.Video } currentFrame = thisFrame; - ReadNextFrameTask = Task.Run(CurrentStream.ReadNextFrame); - ReadNextFrameTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted); + CurrentStream.ReadNextFrame(); } if (CurrentStream.Ended) @@ -217,8 +204,7 @@ namespace MoonWorks.Video timer.Stop(); timer.Reset(); - ResetSecondaryStreamTask = Task.Run(CurrentStream.Reset); - ResetSecondaryStreamTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted); + CurrentStream.Reset(); if (Loop) { @@ -238,9 +224,6 @@ namespace MoonWorks.Video { lock (CurrentStream) { - ResetTask?.Wait(); - ResetTask = null; - var commandBuffer = Device.AcquireCommandBuffer(); var ySpan = new Span((void*) CurrentStream.yDataHandle, (int) CurrentStream.yDataLength); @@ -338,19 +321,8 @@ namespace MoonWorks.Video private void InitializeDav1dStream() { - ReadNextFrameTask?.Wait(); - ReadNextFrameTask = null; - - ResetTask?.Wait(); - ResetTask = null; - - ResetSecondaryStreamTask?.Wait(); - ResetSecondaryStreamTask = null; - - ResetTask = Task.Run(Video.StreamA.Load); - ResetTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted); - ResetSecondaryStreamTask = Task.Run(Video.StreamB.Load); - ResetSecondaryStreamTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted); + Video.StreamA.Load(); + Video.StreamB.Load(); CurrentStream = Video.StreamA; currentFrame = -1; @@ -358,26 +330,13 @@ namespace MoonWorks.Video private void ResetDav1dStream() { - ReadNextFrameTask?.Wait(); - ReadNextFrameTask = null; - - ResetTask = Task.Run(Video.StreamA.Reset); - ResetTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted); - ResetSecondaryStreamTask = Task.Run(Video.StreamB.Reset); - ResetSecondaryStreamTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted); + Video.StreamA.Reset(); + Video.StreamB.Reset(); CurrentStream = Video.StreamA; currentFrame = -1; } - private static void HandleTaskException(Task task) - { - if (task.Exception.InnerException is not TaskCanceledException) - { - throw task.Exception; - } - } - protected override void Dispose(bool disposing) { if (!IsDisposed)