VideoPlayer fixes
parent
22bcd2e471
commit
b29341eca3
|
@ -22,7 +22,6 @@ namespace MoonWorks.Video
|
||||||
private Task ResetStreamATask;
|
private Task ResetStreamATask;
|
||||||
private Task ResetStreamBTask;
|
private Task ResetStreamBTask;
|
||||||
|
|
||||||
private GraphicsDevice GraphicsDevice;
|
|
||||||
private Texture yTexture = null;
|
private Texture yTexture = null;
|
||||||
private Texture uTexture = null;
|
private Texture uTexture = null;
|
||||||
private Texture vTexture = null;
|
private Texture vTexture = null;
|
||||||
|
@ -38,8 +37,6 @@ namespace MoonWorks.Video
|
||||||
|
|
||||||
public VideoPlayer(GraphicsDevice device) : base(device)
|
public VideoPlayer(GraphicsDevice device) : base(device)
|
||||||
{
|
{
|
||||||
GraphicsDevice = device;
|
|
||||||
|
|
||||||
LinearSampler = new Sampler(device, SamplerCreateInfo.LinearClamp);
|
LinearSampler = new Sampler(device, SamplerCreateInfo.LinearClamp);
|
||||||
|
|
||||||
timer = new Stopwatch();
|
timer = new Stopwatch();
|
||||||
|
@ -55,63 +52,48 @@ namespace MoonWorks.Video
|
||||||
{
|
{
|
||||||
Stop();
|
Stop();
|
||||||
|
|
||||||
var needNewTransferBuffer = TransferBuffer == null;
|
|
||||||
|
|
||||||
if (RenderTexture == null)
|
if (RenderTexture == null)
|
||||||
{
|
{
|
||||||
RenderTexture = CreateRenderTexture(GraphicsDevice, video.Width, video.Height);
|
RenderTexture = CreateRenderTexture(Device, video.Width, video.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (yTexture == null)
|
if (yTexture == null)
|
||||||
{
|
{
|
||||||
yTexture = CreateSubTexture(GraphicsDevice, video.Width, video.Height);
|
yTexture = CreateSubTexture(Device, video.Width, video.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uTexture == null)
|
if (uTexture == null)
|
||||||
{
|
{
|
||||||
uTexture = CreateSubTexture(GraphicsDevice, video.UVWidth, video.UVHeight);
|
uTexture = CreateSubTexture(Device, video.UVWidth, video.UVHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vTexture == null)
|
if (vTexture == null)
|
||||||
{
|
{
|
||||||
vTexture = CreateSubTexture(GraphicsDevice, video.UVWidth, video.UVHeight);
|
vTexture = CreateSubTexture(Device, video.UVWidth, video.UVHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (video.Width != RenderTexture.Width || video.Height != RenderTexture.Height)
|
if (video.Width != RenderTexture.Width || video.Height != RenderTexture.Height)
|
||||||
{
|
{
|
||||||
RenderTexture.Dispose();
|
RenderTexture.Dispose();
|
||||||
RenderTexture = CreateRenderTexture(GraphicsDevice, video.Width, video.Height);
|
RenderTexture = CreateRenderTexture(Device, video.Width, video.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (video.Width != yTexture.Width || video.Height != yTexture.Height)
|
if (video.Width != yTexture.Width || video.Height != yTexture.Height)
|
||||||
{
|
{
|
||||||
yTexture.Dispose();
|
yTexture.Dispose();
|
||||||
yTexture = CreateSubTexture(GraphicsDevice, video.Width, video.Height);
|
yTexture = CreateSubTexture(Device, video.Width, video.Height);
|
||||||
needNewTransferBuffer = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (video.UVWidth != uTexture.Width || video.UVHeight != uTexture.Height)
|
if (video.UVWidth != uTexture.Width || video.UVHeight != uTexture.Height)
|
||||||
{
|
{
|
||||||
uTexture.Dispose();
|
uTexture.Dispose();
|
||||||
uTexture = CreateSubTexture(GraphicsDevice, video.UVWidth, video.UVHeight);
|
uTexture = CreateSubTexture(Device, video.UVWidth, video.UVHeight);
|
||||||
needNewTransferBuffer = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (video.UVWidth != vTexture.Width || video.UVHeight != vTexture.Height)
|
if (video.UVWidth != vTexture.Width || video.UVHeight != vTexture.Height)
|
||||||
{
|
{
|
||||||
vTexture.Dispose();
|
vTexture.Dispose();
|
||||||
vTexture = CreateSubTexture(GraphicsDevice, video.UVWidth, video.UVHeight);
|
vTexture = CreateSubTexture(Device, video.UVWidth, video.UVHeight);
|
||||||
needNewTransferBuffer = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (needNewTransferBuffer)
|
|
||||||
{
|
|
||||||
if (TransferBuffer != null)
|
|
||||||
{
|
|
||||||
TransferBuffer.Dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
TransferBuffer = new TransferBuffer(Device, yTexture.Size + uTexture.Size + vTexture.Size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Video = video;
|
Video = video;
|
||||||
|
@ -250,16 +232,23 @@ namespace MoonWorks.Video
|
||||||
{
|
{
|
||||||
lock (CurrentStream)
|
lock (CurrentStream)
|
||||||
{
|
{
|
||||||
var commandBuffer = GraphicsDevice.AcquireCommandBuffer();
|
var commandBuffer = Device.AcquireCommandBuffer();
|
||||||
|
|
||||||
var ySpan = new Span<byte>((void*) CurrentStream.yDataHandle, (int) CurrentStream.yDataLength);
|
var ySpan = new Span<byte>((void*) CurrentStream.yDataHandle, (int) CurrentStream.yDataLength);
|
||||||
var uSpan = new Span<byte>((void*) CurrentStream.uDataHandle, (int) CurrentStream.uvDataLength);
|
var uSpan = new Span<byte>((void*) CurrentStream.uDataHandle, (int) CurrentStream.uvDataLength);
|
||||||
var vSpan = new Span<byte>((void*) CurrentStream.vDataHandle, (int) CurrentStream.uvDataLength);
|
var vSpan = new Span<byte>((void*) CurrentStream.vDataHandle, (int) CurrentStream.uvDataLength);
|
||||||
|
|
||||||
TransferBuffer.SetData(ySpan, SetDataOptions.Discard);
|
if (TransferBuffer == null || TransferBuffer.Size < ySpan.Length + uSpan.Length + vSpan.Length)
|
||||||
|
{
|
||||||
|
TransferBuffer?.Dispose();
|
||||||
|
TransferBuffer = new TransferBuffer(Device, (uint) (ySpan.Length + uSpan.Length + vSpan.Length));
|
||||||
|
}
|
||||||
|
TransferBuffer.SetData(ySpan, 0, SetDataOptions.Discard);
|
||||||
TransferBuffer.SetData(uSpan, (uint) ySpan.Length, SetDataOptions.Overwrite);
|
TransferBuffer.SetData(uSpan, (uint) ySpan.Length, SetDataOptions.Overwrite);
|
||||||
TransferBuffer.SetData(vSpan, (uint) (ySpan.Length + uSpan.Length), SetDataOptions.Overwrite);
|
TransferBuffer.SetData(vSpan, (uint) (ySpan.Length + uSpan.Length), SetDataOptions.Overwrite);
|
||||||
|
|
||||||
|
commandBuffer.BeginCopyPass();
|
||||||
|
|
||||||
commandBuffer.UploadToTexture(
|
commandBuffer.UploadToTexture(
|
||||||
TransferBuffer,
|
TransferBuffer,
|
||||||
yTexture,
|
yTexture,
|
||||||
|
@ -292,11 +281,13 @@ namespace MoonWorks.Video
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
commandBuffer.EndCopyPass();
|
||||||
|
|
||||||
commandBuffer.BeginRenderPass(
|
commandBuffer.BeginRenderPass(
|
||||||
new ColorAttachmentInfo(RenderTexture, Color.Black)
|
new ColorAttachmentInfo(RenderTexture, Color.Black)
|
||||||
);
|
);
|
||||||
|
|
||||||
commandBuffer.BindGraphicsPipeline(GraphicsDevice.VideoPipeline);
|
commandBuffer.BindGraphicsPipeline(Device.VideoPipeline);
|
||||||
commandBuffer.BindFragmentSamplers(
|
commandBuffer.BindFragmentSamplers(
|
||||||
new TextureSamplerBinding(yTexture, LinearSampler),
|
new TextureSamplerBinding(yTexture, LinearSampler),
|
||||||
new TextureSamplerBinding(uTexture, LinearSampler),
|
new TextureSamplerBinding(uTexture, LinearSampler),
|
||||||
|
@ -307,7 +298,7 @@ namespace MoonWorks.Video
|
||||||
|
|
||||||
commandBuffer.EndRenderPass();
|
commandBuffer.EndRenderPass();
|
||||||
|
|
||||||
GraphicsDevice.Submit(commandBuffer);
|
Device.Submit(commandBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue