using System;
using System.Runtime.InteropServices;
namespace UnityEngine.XR.ARSubsystems
{
///
/// Describes a set of conversion parameters for use with 's conversion methods.
///
[StructLayout(LayoutKind.Sequential)]
public struct XRCameraImageConversionParams : IEquatable
{
RectInt m_InputRect;
Vector2Int m_OutputDimensions;
TextureFormat m_Format;
CameraImageTransformation m_Transformation;
///
/// The portion of the original image that will be used as input to the conversion.
///
///
/// The input rectangle must be completely contained inside the XRCameraImage
/// .
///
///
/// The portion of the original image that will be converted.
///
public RectInt inputRect
{
get { return m_InputRect; }
set { m_InputRect = value; }
}
///
/// The dimensions of the converted image. The output dimensions must be less than or equal to the
/// 's dimensions. If the output dimensions are less than the 's
/// dimensions, downsampling is performed using nearest neighbor.
///
///
/// The dimensions of the converted image.
///
public Vector2Int outputDimensions
{
get { return m_OutputDimensions; }
set { m_OutputDimensions = value; }
}
///
/// The TextureFormat to which to convert. See for a list of
/// supported formats.
///
///
/// The TextureFormat to which to convert.
///
public TextureFormat outputFormat
{
get { return m_Format; }
set { m_Format = value; }
}
///
/// The transformation to apply to the image during conversion.
///
///
/// The transformation to apply to the image during conversion.
///
public CameraImageTransformation transformation
{
get { return m_Transformation; }
set { m_Transformation = value; }
}
///
/// Constructs a using the 's full
/// resolution. That is, it sets to (0, 0, image.width, image.height) and
/// to (image.width, image.height).
///
/// The source .
/// The TextureFormat to convert to.
/// An optional to apply.
public XRCameraImageConversionParams(
XRCameraImage image,
TextureFormat format,
CameraImageTransformation transformation = CameraImageTransformation.None)
{
m_InputRect = new RectInt(0, 0, image.width, image.height);
m_OutputDimensions = new Vector2Int(image.width, image.height);
m_Format = format;
m_Transformation = transformation;
}
public override int GetHashCode()
{
unchecked
{
var hash = inputRect.GetHashCode();
hash = hash * 486187739 + outputDimensions.GetHashCode();
hash = hash * 486187739 + ((int)outputFormat).GetHashCode();
hash = hash * 486187739 + ((int)transformation).GetHashCode();
return hash;
}
}
public bool Equals(XRCameraImageConversionParams other)
{
return (inputRect.Equals(other.inputRect) && outputDimensions.Equals(other.outputDimensions)
&& outputFormat.Equals(other.outputFormat) && transformation.Equals(other.transformation));
}
public override bool Equals(object obj)
{
return (ReferenceEquals(this, obj)
|| ((obj is XRCameraImageConversionParams) && Equals((XRCameraImageConversionParams)obj)));
}
public static bool operator ==(XRCameraImageConversionParams lhs, XRCameraImageConversionParams rhs)
{
return lhs.Equals(rhs);
}
public static bool operator !=(XRCameraImageConversionParams lhs, XRCameraImageConversionParams rhs)
{
return !lhs.Equals(rhs);
}
public override string ToString()
{
return string.Format(
"inputRect: {0} outputDimensions: {1} format: {2} transformation: {3})",
inputRect,
outputDimensions,
outputFormat,
transformation);
}
}
}