using Intel.RealSense;

[ProcessingBlockDataAttribute(typeof(Align))]
public class RsAlign : RsProcessingBlock
{
    public Stream _alignTo = Stream.Depth;

    public bool AlignOtherToDepth { set { _alignTo = Stream.Depth; } }
    public bool AlignDepthToColor { set { _alignTo = Stream.Color; } }
    public bool AlignDepthToInfrared { set { _alignTo = Stream.Infrared; } }

    private Stream _currAlignTo;
    private Align _pb;

    public void Init()
    {
        if(_pb != null) {
            _pb.Dispose();
        }
        _pb = new Align(_alignTo);
        _currAlignTo = _alignTo;

    }

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

    public void AlignTo(Stream s)
    {
        _alignTo = s;
        Init();
    }

    public override Frame Process(Frame frame, FrameSource frameSource)
    {
        if (_pb == null || _alignTo != _currAlignTo)
            Init();

        return _pb.Process(frame);
    }
}