/******************************************************************************
 * Copyright (C) Ultraleap, Inc. 2011-2024.                                   *
 *                                                                            *
 * Use subject to the terms of the Apache License 2.0 available at            *
 * http://www.apache.org/licenses/LICENSE-2.0, or another agreement           *
 * between Ultraleap and you, your company or other organization.             *
 ******************************************************************************/

namespace LeapInternal
{
    using Leap;
    using System;

    public class ImageData
    {
        private LEAP_IMAGE_PROPERTIES _properties;
        private object _object;

        public Image.CameraType camera { get; protected set; }
        public eLeapImageType type { get { return _properties.type; } }
        public eLeapImageFormat format { get { return _properties.format; } }
        public UInt32 bpp { get { return _properties.bpp; } }
        public UInt32 width { get { return _properties.width; } }
        public UInt32 height { get { return _properties.height; } }
        public float RayScaleX { get { return _properties.x_scale; } }
        public float RayScaleY { get { return _properties.y_scale; } }
        public float RayOffsetX { get { return _properties.x_offset; } }
        public float RayOffsetY { get { return _properties.y_offset; } }
        public byte[] AsByteArray { get { return _object as byte[]; } }
        public float[] AsFloatArray { get { return _object as float[]; } }
        public UInt32 byteOffset { get; protected set; }

        public int DistortionSize { get { return LeapC.DistortionSize; } }
        public UInt64 DistortionMatrixKey { get; protected set; }
        public DistortionData DistortionData { get; protected set; }

        public ImageData(Image.CameraType camera, LEAP_IMAGE image, DistortionData distortionData)
        {
            this.camera = camera;
            this._properties = image.properties;
            this.DistortionMatrixKey = image.matrix_version;
            this.DistortionData = distortionData;
            this._object = MemoryManager.GetPinnedObject(image.data);
            this.byteOffset = image.offset;
        }
    }
}