using Intel.RealSense;
using UnityEngine;

[ProcessingBlockDataAttribute(typeof(DisparityTransform))]
public class RsDisparityTransform : RsProcessingBlock
{
    public enum DisparityMode
    {
        DisparityToDepth = 0,
        DepthToDisparity = 1,
    }

    DisparityTransform _pb;

    [Tooltip("Stereoscopic Transformation Mode")]
    public DisparityMode Mode = DisparityMode.DepthToDisparity;

    private DisparityMode currMode;
    private readonly object _lock = new object();

    void OnDisable()
    {
        lock (_lock)
        {
            if (_pb != null)
            {
                _pb.Dispose();
                _pb = null;
            }
        }
    }

    public void Init()
    {
        lock (_lock)
        {
            _pb = new DisparityTransform(Mode != 0);
            currMode = Mode;
        }
    }

    public override Frame Process(Frame frame, FrameSource frameSource)
    {
        lock (_lock)
        {
            if (currMode != Mode) {
                if(_pb != null) {
                    _pb.Dispose();
                    _pb = null;
                }
            }

            if (_pb == null)
                Init();

            return _pb.Process(frame);
        }
    }
}