// GENERATED CONTENT - DO NOT EDIT
// Content of this file was automatically extracted from the
// "Media Capture Depth Stream Extensions" spec.
// See: https://w3c.github.io/mediacapture-depth/

partial dictionary MediaTrackSupportedConstraints {
    // Apply to both depth stream track and color stream track:
    boolean videoKind = true;
    boolean focalLengthX = false;
    boolean focalLengthY = false;
    boolean principalPointX = false;
    boolean principalPointY = false;
    boolean deprojectionDistortionCoefficients = false;
    boolean projectionDistortionCoefficients = false;
    // Apply to depth stream track:
    boolean depthNear = false;
    boolean depthFar = false;
    boolean depthToVideoTransform = false;
};
partial dictionary MediaTrackCapabilities {
    // Apply to both depth stream track and color stream track:
    DOMString               videoKind;
    (double or DoubleRange) focalLengthX;
    (double or DoubleRange) focalLengthY;
    (double or DoubleRange) principalPointX;
    (double or DoubleRange) principalPointY;
    boolean                 deprojectionDistortionCoefficients;
    boolean                 projectionDistortionCoefficients;
    // Apply to depth stream track:
    (double or DoubleRange) depthNear;
    (double or DoubleRange) depthFar;
    boolean                 depthToVideoTransform;
};
partial dictionary MediaTrackConstraintSet {
    // Apply to both depth stream track and color stream track:
    ConstrainDOMString videoKind;
    ConstrainDouble    focalLengthX;
    ConstrainDouble    focalLengthY;
    ConstrainDouble    principalPointX;
    ConstrainDouble    principalPointY;
    ConstrainBoolean   deprojectionDistortionCoefficients;
    ConstrainBoolean   projectionDistortionCoefficients;
    // Apply to depth stream track:
    ConstrainDouble    depthNear;
    ConstrainDouble    depthFar;
    ConstrainBoolean   depthToVideoTransform;
};
partial dictionary MediaTrackSettings {
    // Apply to both depth stream track and color stream track:
    DOMString              videoKind;
    double                 focalLengthX;
    double                 focalLengthY;
    double                 principalPointX;
    double                 principalPointY;
    DistortionCoefficients deprojectionDistortionCoefficients;
    DistortionCoefficients projectionDistortionCoefficients;
    // Apply to depth stream track:
    double                 depthNear;
    double                 depthFar;
    Transformation         depthToVideoTransform;
};
dictionary DistortionCoefficients {
    double k1;
    double k2;
    double p1;
    double p2;
    double k3;
};
dictionary Transformation {
    Float32Array transformationMatrix;
    DOMString    videoDeviceId;
};
enum VideoKindEnum {
    "color",
    "depth"
};
