Files
MicrosoftIris/UIX.RenderApi/Microsoft/Iris/Render/Graphics/VideoPool.cs
T
2022-03-03 08:40:19 -06:00

72 lines
2.6 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Microsoft.Iris.Render.Graphics.VideoPool
// Assembly: UIX.RenderApi, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: D47658B8-A8EA-43D6-8837-ECE823BFFFC1
// Assembly location: C:\Program Files\Zune\UIX.RenderApi.dll
using Microsoft.Iris.Render.Internal;
using Microsoft.Iris.Render.Protocol;
using Microsoft.Iris.Render.Protocols.Splash.Rendering;
namespace Microsoft.Iris.Render.Graphics
{
internal sealed class VideoPool : SurfacePool, IVideoPoolCallback
{
private RemoteVideoPool m_remoteVideoPool;
private IVideoPoolNotification m_imgOwner;
private float m_flContentOverscan;
private Size m_sizeTargetPxl;
internal VideoPool(GraphicsDevice device, IVideoPoolNotification imgOwner)
: base(device, SurfaceFormat.External, RENDERHANDLE.NULL)
=> this.m_imgOwner = imgOwner;
protected override void CreateRemoteSurfacePool(RENDERHANDLE rhHandle, bool fPrimaryOwner)
{
if (fPrimaryOwner)
{
this.Device.CreateVideoPool(this, rhHandle);
this.m_remoteVideoPool = RemoteVideoPool.CreateFromHandle(this.Session.RenderingPort, rhHandle);
}
else
this.m_remoteVideoPool = RemoteVideoPool.CreateFromExternalHandle(this.Session.RenderingPort, rhHandle, this);
this.m_remotePool = m_remoteVideoPool;
}
internal RemoteVideoPool RemoteVideoStub => this.m_remoteVideoPool;
internal float ContentOverscan
{
get => this.m_flContentOverscan;
set
{
if (Math2.WithinEpsilon(this.m_flContentOverscan, value))
return;
this.m_flContentOverscan = value;
this.m_remoteVideoPool.SendSetContentOverscan(value);
}
}
internal void NotifyVideoModeChanged(Size sizeTargetPxl)
{
if (!(this.m_sizeTargetPxl != sizeTargetPxl))
return;
this.m_sizeTargetPxl = sizeTargetPxl;
this.m_remoteVideoPool.SendNotifyVideoSizeChanged(sizeTargetPxl);
}
void IVideoPoolCallback.OnInputChanged(
RENDERHANDLE target,
Size sizeTargetPxl,
Size sizeAspectRatio,
uint nFrameRateNumerator,
uint nFrameRateDenominator,
SurfaceFormat nFormat)
{
this.m_imgOwner.NotifySourceChanged(sizeTargetPxl, sizeAspectRatio);
}
void IVideoPoolCallback.OnInvalidate(RENDERHANDLE target) => this.m_imgOwner.InvalidateClients();
}
}