potential fix for render before decode finish
parent
ee8331a96b
commit
1b40b5e7d3
|
@ -19,8 +19,8 @@ namespace MoonWorks.Video
|
|||
private VideoAV1Stream CurrentStream = null;
|
||||
|
||||
private Task ReadNextFrameTask;
|
||||
private Task ResetStreamATask;
|
||||
private Task ResetStreamBTask;
|
||||
private Task ResetTask;
|
||||
private Task ResetSecondaryStreamTask;
|
||||
|
||||
private Texture yTexture = null;
|
||||
private Texture uTexture = null;
|
||||
|
@ -165,8 +165,8 @@ namespace MoonWorks.Video
|
|||
public void Unload()
|
||||
{
|
||||
Stop();
|
||||
ResetStreamATask?.Wait();
|
||||
ResetStreamBTask?.Wait();
|
||||
ResetTask?.Wait();
|
||||
ResetSecondaryStreamTask?.Wait();
|
||||
Video = null;
|
||||
}
|
||||
|
||||
|
@ -202,17 +202,8 @@ namespace MoonWorks.Video
|
|||
timer.Stop();
|
||||
timer.Reset();
|
||||
|
||||
var task = Task.Run(CurrentStream.Reset);
|
||||
task.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted);
|
||||
|
||||
if (CurrentStream == Video.StreamA)
|
||||
{
|
||||
ResetStreamATask = task;
|
||||
}
|
||||
else
|
||||
{
|
||||
ResetStreamBTask = task;
|
||||
}
|
||||
ResetTask = Task.Run(CurrentStream.Reset);
|
||||
ResetTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted);
|
||||
|
||||
if (Loop)
|
||||
{
|
||||
|
@ -232,6 +223,8 @@ namespace MoonWorks.Video
|
|||
{
|
||||
lock (CurrentStream)
|
||||
{
|
||||
ResetTask?.Wait();
|
||||
|
||||
var commandBuffer = Device.AcquireCommandBuffer();
|
||||
|
||||
var ySpan = new Span<byte>((void*) CurrentStream.yDataHandle, (int) CurrentStream.yDataLength);
|
||||
|
@ -331,10 +324,10 @@ namespace MoonWorks.Video
|
|||
{
|
||||
ReadNextFrameTask?.Wait();
|
||||
|
||||
ResetStreamATask = Task.Run(Video.StreamA.Reset);
|
||||
ResetStreamATask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted);
|
||||
ResetStreamBTask = Task.Run(Video.StreamB.Reset);
|
||||
ResetStreamBTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted);
|
||||
ResetTask = Task.Run(Video.StreamA.Reset);
|
||||
ResetTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted);
|
||||
ResetSecondaryStreamTask = Task.Run(Video.StreamB.Reset);
|
||||
ResetSecondaryStreamTask.ContinueWith(HandleTaskException, TaskContinuationOptions.OnlyOnFaulted);
|
||||
|
||||
CurrentStream = Video.StreamA;
|
||||
currentFrame = -1;
|
||||
|
|
Loading…
Reference in New Issue