diff --git a/index.html b/index.html index 13da224..51ffaff 100644 --- a/index.html +++ b/index.html @@ -1270,46 +1270,66 @@

Constraints

The parameter shall be a tuple of items of the class itemClass. The tuple can be empty

-

distortion

+

distortionProjection

Description

-

Coefficients for calculating the distortion characteristics of a -lens comprising radial distortion coefficients of the spherical -distortion (k1-N) and the tangential distortion (p1-N).

+

The OpenLensIO distortion model is the Projection Characterization, +not the Field-Of-View Characterization. This is primarily relevant when +storing overscan values, not in transmission as the overscan should be +calculated by the consumer.

Units

n/a

Sampling

-

Regular

+

Static

Constraints

-

The radial and tangential coefficients shall each be real numbers.

-

distortionOverscan

+

The parameter shall be a boolean.

+

distortionOffset

Description

-

Overscan factor on lens distortion

+

Offset in x and y of the centre of distortion of the virtual camera

Units

-

n/a

+

millimeter

Sampling

Regular

Constraints

-

The parameter shall be a non-negative real number.

-

distortionOverscanMax

+

X and Y centre shift shall each be real numbers.

+

distortionOverscan

Description

-

Static maximum overscan factor on lens distortion

+

Overscan factor on lens distortion. This is primarily relevant when +storing overscan values, not in transmission as the overscan should be +calculated by the consumer.

Units

n/a

Sampling

-

Static

+

Regular

Constraints

-

The parameter shall be a non-negative real number.

-

distortionShift

+

The parameter shall be a real number >= 1.

+

distortionOverscanMax

Description

-

Shift in x and y of the centre of distortion of the virtual camera

+

Static maximum overscan factor on lens distortion. This is primarily +relevant when storing overscan values, not in transmission as the +overscan should be calculated by the consumer.

Units

-

millimeter

+

n/a

Sampling

-

Regular

+

Static

Constraints

-

X and Y centre shift shall each be real numbers.

-

encoders

+

The parameter shall be a real number >= 1.

+

distortion

Description

+

A list of Distortion objects that each define the coefficients for +calculating the distortion characteristics of a lens comprising radial +distortion coefficients of the spherical distortion (k1-N) and the +tangential distortion (p1-N). An optional key 'model' can be used that +describes the distortion model. The default is Brown-Conrady D-U (that +maps Distorted to Undistorted coordinates).

+

Units

+

n/a

+

Sampling

+

Regular

+

Constraints

+

The list shall contain at least one Distortion object, and in each +object the radial and tangential coefficients shall each be real numbers.

+

encoders

+

Description

Normalised real numbers (0-1) for focus, iris and zoom. Encoders are represented in this way (as opposed to raw integer values) to ensure values remain independent of encoder resolution, @@ -1320,293 +1340,303 @@

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall contain at least one normalised values (0..1) for the FIZ encoders.
 

entrancePupilOffset

-

Description

+

Description

Offset of the entrance pupil relative to the nominal imaging plane (positive if the entrance pupil is located on the side of the nominal imaging plane that is towards the object, and negative otherwise). Measured in meters as in a render engine it is often applied in the virtual camera's transform chain.

-

Units

+

Units

meter

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be a real number.

exposureFalloff

-

Description

+

Description

Coefficients for calculating the exposure fall-off (vignetting) of a lens

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The coefficients shall each be real numbers.

fStop

-

Description

+

Description

The linear f-number of the lens, equal to the focal length divided by the diameter of the entrance pupil.

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be a non-negative real number.

firmwareVersion

-

Description

+

Description

Non-blank string identifying lens firmware version

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Static

-

Constraints

+

Constraints

The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

focalLength

-

Description

+

Description

Focal length of the lens.

-

Units

+

Units

millimeter

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be a non-negative real number.

focusDistance

-

Description

+

Description

Focus distance/position of the lens

-

Units

+

Units

meter

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be a non-negative real number.

make

-

Description

+

Description

Non-blank string naming lens manufacturer

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Static

-

Constraints

+

Constraints

The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

model

-

Description

+

Description

Non-blank string identifying lens model

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Static

-

Constraints

+

Constraints

The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

nominalFocalLength

-

Description

+

Description

Nominal focal length of the lens. The number printed on the side of a prime lens, e.g. 50 mm, and undefined in the case of a zoom lens.

-

Units

+

Units

millimeter

-

Sampling

+

Sampling

Static

-

Constraints

+

Constraints

The parameter shall be a non-negative real number.

-

perspectiveShift

-

Description

-

Shift in x and y of the centre of perspective projection of the +

projectionOffset

+

Description

+

Offset in x and y of the centre of perspective projection of the virtual camera

-

Units

+

Units

millimeter

-

Sampling

+

Sampling

Regular

-

Constraints

-

X and Y perspective shift shall each be real numbers.

+

Constraints

+

X and Y projection offset shall each be real numbers.

rawEncoders

-

Description

+

Description

Raw encoder values for focus, iris and zoom. These values are dependent on encoder resolution and before any homing / ranging has taken place.

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall contain at least one integer value for the FIZ encoders.
 

serialNumber

-

Description

+

Description

Non-blank string uniquely identifying the lens

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Static

-

Constraints

+

Constraints

The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

tStop

-

Description

+

Description

Linear t-number of the lens, equal to the F-number of the lens divided by the square root of the transmittance of the lens.

-

Units

-

n/a

-

Sampling

-

Regular

-

Constraints

-

The parameter shall be a non-negative real number.

-

undistortion

-

Description

-

Coefficients for calculating the undistortion characteristics of a -lens comprising radial distortion coefficients of the spherical -distortion (k1-N) and the tangential distortion (p1-N).

Units

n/a

Sampling

Regular

Constraints

-

The radial and tangential coefficients shall each be real numbers.

-

protocol

+

The parameter shall be a non-negative real number.

+

undistortionOverscan

Description

-

Name of the protocol in which the sample is being employed, and -version of that protocol

+

Overscan factor on lens undistortion. This is primarily relevant when +storing overscan values, not in transmission as the overscan should be +calculated by the consumer.

Units

n/a

Sampling

Regular

Constraints

+

The parameter shall be a real number >= 1.

+

undistortionOverscanMax

+

Description

+

Static maximum overscan factor on lens undistortion. This is primarily +relevant when storing overscan values, not in transmission as the +overscan should be calculated by the consumer.

+

Units

+

n/a

+

Sampling

+

Static

+

Constraints

+

The parameter shall be a real number >= 1.

+

protocol

+

Description

+

Name of the protocol in which the sample is being employed, and +version of that protocol

+

Units

+

n/a

+

Sampling

+

Regular

+

Constraints

Protocol name is nonblank string; protocol version is basic x.y.z semantic versioning string

relatedSampleIds

-

Description

+

Description

List of sampleId properties of samples related to this sample. The existence of a sample with a given sampleId is not guaranteed.

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be a tuple of items of the class itemClass. The tuple can be empty

sampleId

-

Description

+

Description

URN serving as unique identifier of the sample in which data is being transported.

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be a UUID URN as specified in IETF RFC 4122. Only lowercase characters shall be used. Example: f81d4fae-7dec-11d0-a765-00a0c91e6bf6

shutterAngle

-

Description

+

Description

Shutter speed as a fraction of the capture frame rate. The shutter speed (in units of 1/s) is equal to the value of the parameter divided by 360 times the capture frame rate.

-

Units

+

Units

degree

-

Sampling

+

Sampling

Static

-

Constraints

+

Constraints

The parameter shall be a real number in the range (0..360].

sourceId

-

Description

+

Description

URN serving as unique identifier of the source from which data is being transported.

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be a UUID URN as specified in IETF RFC 4122. Only lowercase characters shall be used. Example: f81d4fae-7dec-11d0-a765-00a0c91e6bf6

sourceNumber

-

Description

+

Description

Number that identifies the index of the stream from a source from which data is being transported. This is most important in the case where a source is producing multiple streams of samples.

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be a integer in the range (0..4,294,967,295].

-

frameRate

-

Description

-

Sample frame rate as a rational number. Drop frame rates such as -29.97 should be represented as e.g. 30000/1001. In a variable rate -system this should is estimated from the last sample delta time.

-

Units

-

n/a

-

Sampling

-

Regular

-

Constraints

-

The parameter shall be a rational number whose numerator -is in the range [0..2,147,483,647] and denominator in the range -(0..4,294,967,295].

mode

-

Description

+

Description

Enumerated value indicating whether the sample transport mechanism provides inherent ('external') timing, or whether the transport mechanism lacks inherent timing and so the sample must contain a PTP timestamp itself ('internal') to carry timing information.

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be one of the allowed values.

recordedTimestamp

-

Description

+

Description

PTP timestamp of the data recording instant, provided for convenience during playback of e.g. pre-recorded tracking data. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned -integer (nanoseconds), and an optional 32-bit unsigned integer -(attoseconds)

-

Units

+integer (nanoseconds)

+

Units

second

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall contain valid number of seconds, nanoseconds -and optionally attoseconds elapsed since the start of the epoch.

+elapsed since the start of the epoch.

+

sampleRate

+

Description

+

Sample frame rate as a rational number. Drop frame rates such as +29.97 should be represented as e.g. 30000/1001. In a variable rate +system this should is estimated from the last sample delta time.

+

Units

+

n/a

+

Sampling

+

Regular

+

Constraints

+

The parameter shall be a rational number whose numerator +is in the range [0..2,147,483,647] and denominator in the range +(0..4,294,967,295].

sampleTimestamp

-

Description

+

Description

PTP timestamp of the data capture instant. Note this may differ from the packet's transmission PTP timestamp. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned -integer (nanoseconds), and an optional 32-bit unsigned integer -(attoseconds)

-

Units

+integer (nanoseconds)

+

Units

second

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall contain valid number of seconds, nanoseconds -and optionally attoseconds elapsed since the start of the epoch.

+elapsed since the start of the epoch.

sequenceNumber

-

Description

+

Description

Integer incrementing with each sample.

-

Units

+

Units

n/a

-

Sampling

+

Sampling

Regular

-

Constraints

+

Constraints

The parameter shall be a integer in the range (0..4,294,967,295].

synchronization

-

Description

+

Description

Object describing how the tracking device is synchronized for this sample.

-

frequency: The frequency of the synchronisation. This may differ from -the sample frame rate for example in a genlocked tracking device. +

frequency: The frequency of a synchronization signal.This may differ from +the sample frame rate for example in a genlocked tracking device. This is +not required if the synchronization source is PTP or NTP. locked: Is the tracking device locked to the synchronization source offsets: Offsets in seconds between sync and sample. Critical for e.g. frame remapping, or when using different data sources for @@ -1631,114 +1661,115 @@

"ptp": The tracking device is locked to a PTP master
  • "ntp": The tracking device is locked to an NTP server
  • -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Regular

    -

    Constraints

    +

    Constraints

    The parameter shall contain the required valid fields.
     

    timecode

    -

    Description

    +

    Description

    SMPTE timecode of the sample. Timecode is a standard for labeling individual frames of data in media systems and is useful for inter-frame synchronization.

    -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Regular

    -

    Constraints

    +

    Constraints

    The parameter shall contain a valid format and hours, minutes, seconds and frames with appropriate min/max values.

    firmwareVersion

    -

    Description

    +

    Description

    Non-blank string identifying tracking device firmware version

    -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Static

    -

    Constraints

    +

    Constraints

    The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

    make

    -

    Description

    +

    Description

    Non-blank string naming tracking device manufacturer

    -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Static

    -

    Constraints

    +

    Constraints

    The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

    model

    -

    Description

    +

    Description

    Non-blank string identifying tracking device model

    -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Static

    -

    Constraints

    +

    Constraints

    The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

    notes

    -

    Description

    +

    Description

    Non-blank string containing notes about tracking system

    -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Regular

    -

    Constraints

    +

    Constraints

    The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

    recording

    -

    Description

    +

    Description

    Boolean indicating whether tracking system is recording data

    -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Regular

    -

    Constraints

    +

    Constraints

    The parameter shall be a boolean.

    serialNumber

    -

    Description

    +

    Description

    Non-blank string uniquely identifying the tracking device

    -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Static

    -

    Constraints

    +

    Constraints

    The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

    slate

    -

    Description

    +

    Description

    Non-blank string describing the recording slate

    -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Regular

    -

    Constraints

    +

    Constraints

    The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

    status

    -

    Description

    +

    Description

    Non-blank string describing status of tracking system

    -

    Units

    +

    Units

    n/a

    -

    Sampling

    +

    Sampling

    Regular

    -

    Constraints

    +

    Constraints

    The parameter shall be a Unicode string betwee 0 and 1023 codepoints.

    transforms

    -

    Description

    +

    Description

    A list of transforms. -Transforms can have a transformId and parentTransformId that can be used -to compose a transform hierarchy. In the case of multiple children their -transforms should be processed in their order in the array. +Transforms can have a id and parentId that can be used to compose a +transform hierarchy. In the case of multiple children their transforms +should be processed in their order in the array. X,Y,Z in meters of camera sensor relative to stage origin. The Z axis points upwards and the coordinate system is right-handed. Y points in the forward camera direction (when pan, tilt and roll are @@ -1757,11 +1788,11 @@

    -

    Units

    +

    Units

    meter / degree

    -

    Sampling

    +

    Sampling

    Regular

    -

    Constraints

    +

    Constraints

    Each component of each transform shall contain Real numbers.

    Reader coverage

    The following table indicates the camera parameters supported by each of the readers.

    @@ -1783,10 +1814,11 @@

    globalStage isoSpeed custom -distortion +distortionProjection +distortionOffset distortionOverscan distortionOverscanMax -distortionShift +distortion encoders entrancePupilOffset exposureFalloff @@ -1797,20 +1829,21 @@

    make model nominalFocalLength -perspectiveShift +projectionOffset rawEncoders serialNumber tStop -undistortion +undistortionOverscan +undistortionOverscanMax protocol relatedSampleIds sampleId shutterAngle sourceId sourceNumber -frameRate mode recordedTimestamp +sampleRate sampleTimestamp sequenceNumber synchronization @@ -1848,6 +1881,7 @@

    + + @@ -1865,6 +1899,7 @@

    + + @@ -1910,6 +1945,7 @@

    + + + + @@ -1923,6 +1959,7 @@

    + + @@ -1968,6 +2005,7 @@

    + + + @@ -1981,6 +2019,7 @@

    + + @@ -2026,6 +2065,7 @@

    + + + @@ -2039,6 +2079,7 @@

    + + @@ -2235,10 +2276,14 @@

    = 1. ### `distortionOverscanMax` #### Description -Static maximum overscan factor on lens distortion +Static maximum overscan factor on lens distortion. This is primarily + relevant when storing overscan values, not in transmission as the + overscan should be calculated by the consumer. + #### Units @@ -368,18 +394,23 @@ Static #### Constraints -The parameter shall be a non-negative real number. +The parameter shall be a real number >= 1. -### `distortionShift` +### `distortion` #### Description -Shift in x and y of the centre of distortion of the virtual camera +A list of Distortion objects that each define the coefficients for + calculating the distortion characteristics of a lens comprising radial + distortion coefficients of the spherical distortion (k1-N) and the + tangential distortion (p1-N). An optional key 'model' can be used that + describes the distortion model. The default is Brown-Conrady D-U (that + maps Distorted to Undistorted coordinates). #### Units -millimeter +n/a #### Sampling @@ -387,7 +418,9 @@ Regular #### Constraints -X and Y centre shift shall each be real numbers. +The list shall contain at least one Distortion object, and in each + object the radial and tangential coefficients shall each be real numbers. + ### `encoders` @@ -599,11 +632,11 @@ Static The parameter shall be a non-negative real number. -### `perspectiveShift` +### `projectionOffset` #### Description -Shift in x and y of the centre of perspective projection of the +Offset in x and y of the centre of perspective projection of the virtual camera @@ -617,7 +650,7 @@ Regular #### Constraints -X and Y perspective shift shall each be real numbers. +X and Y projection offset shall each be real numbers. ### `rawEncoders` @@ -683,13 +716,13 @@ Regular The parameter shall be a non-negative real number. -### `undistortion` +### `undistortionOverscan` #### Description -Coefficients for calculating the undistortion characteristics of a - lens comprising radial distortion coefficients of the spherical - distortion (k1-N) and the tangential distortion (p1-N). +Overscan factor on lens undistortion. This is primarily relevant when + storing overscan values, not in transmission as the overscan should be + calculated by the consumer. #### Units @@ -702,7 +735,28 @@ Regular #### Constraints -The radial and tangential coefficients shall each be real numbers. +The parameter shall be a real number >= 1. + +### `undistortionOverscanMax` + +#### Description + +Static maximum overscan factor on lens undistortion. This is primarily + relevant when storing overscan values, not in transmission as the + overscan should be calculated by the consumer. + + +#### Units + +n/a + +#### Sampling + +Static + +#### Constraints + +The parameter shall be a real number >= 1. ### `protocol` @@ -837,13 +891,14 @@ Regular The parameter shall be a integer in the range (0..4,294,967,295]. -### `frameRate` +### `mode` #### Description -Sample frame rate as a rational number. Drop frame rates such as - 29.97 should be represented as e.g. 30000/1001. In a variable rate - system this should is estimated from the last sample delta time. +Enumerated value indicating whether the sample transport mechanism + provides inherent ('external') timing, or whether the transport + mechanism lacks inherent timing and so the sample must contain a PTP + timestamp itself ('internal') to carry timing information. #### Units @@ -856,24 +911,22 @@ Regular #### Constraints -The parameter shall be a rational number whose numerator - is in the range [0..2,147,483,647] and denominator in the range - (0..4,294,967,295]. - +The parameter shall be one of the allowed values. -### `mode` +### `recordedTimestamp` #### Description -Enumerated value indicating whether the sample transport mechanism - provides inherent ('external') timing, or whether the transport - mechanism lacks inherent timing and so the sample must contain a PTP - timestamp itself ('internal') to carry timing information. + + PTP timestamp of the data recording instant, provided for convenience + during playback of e.g. pre-recorded tracking data. The timestamp + comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned + integer (nanoseconds) #### Units -n/a +second #### Sampling @@ -881,23 +934,22 @@ Regular #### Constraints -The parameter shall be one of the allowed values. +The parameter shall contain valid number of seconds, nanoseconds + elapsed since the start of the epoch. + -### `recordedTimestamp` +### `sampleRate` #### Description - - PTP timestamp of the data recording instant, provided for convenience - during playback of e.g. pre-recorded tracking data. The timestamp - comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned - integer (nanoseconds), and an optional 32-bit unsigned integer - (attoseconds) +Sample frame rate as a rational number. Drop frame rates such as + 29.97 should be represented as e.g. 30000/1001. In a variable rate + system this should is estimated from the last sample delta time. #### Units -second +n/a #### Sampling @@ -905,8 +957,9 @@ Regular #### Constraints -The parameter shall contain valid number of seconds, nanoseconds - and optionally attoseconds elapsed since the start of the epoch. +The parameter shall be a rational number whose numerator + is in the range [0..2,147,483,647] and denominator in the range + (0..4,294,967,295]. ### `sampleTimestamp` @@ -916,8 +969,7 @@ The parameter shall contain valid number of seconds, nanoseconds PTP timestamp of the data capture instant. Note this may differ from the packet's transmission PTP timestamp. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned - integer (nanoseconds), and an optional 32-bit unsigned integer - (attoseconds) + integer (nanoseconds) #### Units @@ -931,7 +983,7 @@ Regular #### Constraints The parameter shall contain valid number of seconds, nanoseconds - and optionally attoseconds elapsed since the start of the epoch. + elapsed since the start of the epoch. ### `sequenceNumber` @@ -960,8 +1012,9 @@ The parameter shall be a integer in the range (0..4,294,967,295]. Object describing how the tracking device is synchronized for this sample. - frequency: The frequency of the synchronisation. This may differ from - the sample frame rate for example in a genlocked tracking device. + frequency: The frequency of a synchronization signal.This may differ from + the sample frame rate for example in a genlocked tracking device. This is + not required if the synchronization source is PTP or NTP. locked: Is the tracking device locked to the synchronization source offsets: Offsets in seconds between sync and sample. Critical for e.g. frame remapping, or when using different data sources for @@ -1007,8 +1060,9 @@ Regular SMPTE timecode of the sample. Timecode is a standard for labeling individual frames of data in media systems and is useful for inter-frame synchronization. - - format.dropFrame: True if the frame rate is a drop-frame format such as 29.97 fps. - - format.frameRate: The frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. Note the timecode frame rate may differ from the sample frequency. + - format.frameRate: The frame rate as a rational number. Drop frame + rates such as 29.97 should be represented as e.g. 30000/1001. The + timecode frame rate may differ from the sample frequency. #### Units @@ -1188,9 +1242,9 @@ The parameter shall be a Unicode string betwee 0 and 1023 #### Description A list of transforms. - Transforms can have a transformId and parentTransformId that can be used - to compose a transform hierarchy. In the case of multiple children their - transforms should be processed in their order in the array. + Transforms can have a id and parentId that can be used to compose a + transform hierarchy. In the case of multiple children their transforms + should be processed in their order in the array. X,Y,Z in meters of camera sensor relative to stage origin. The Z axis points upwards and the coordinate system is right-handed. Y points in the forward camera direction (when pan, tilt and roll are @@ -1227,12 +1281,12 @@ Each component of each transform shall contain Real numbers. The following table indicates the camera parameters supported by each of the readers. -| Reader | activeSensorPhysicalDimensions | activeSensorResolution | anamorphicSqueeze | firmwareVersion | label | make | model | serialNumber | captureFrameRate | duration | fdlLink | globalStage | isoSpeed | custom | distortion | distortionOverscan | distortionOverscanMax | distortionShift | encoders | entrancePupilOffset | exposureFalloff | fStop | firmwareVersion | focalLength | focusDistance | make | model | nominalFocalLength | perspectiveShift | rawEncoders | serialNumber | tStop | undistortion | protocol | relatedSampleIds | sampleId | shutterAngle | sourceId | sourceNumber | frameRate | mode | recordedTimestamp | sampleTimestamp | sequenceNumber | synchronization | timecode | firmwareVersion | make | model | notes | recording | serialNumber | slate | status | transforms | -| ----------- | ----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- | -| RED | + | | + | + | | + | + | + | + | + | | | + | | | | | | | + | | | + | + | + | + | + | | | | + | + | | | | | + | | | | | | | | | | | | | | | | | | | -| ARRI | + | | + | | | + | + | + | + | + | | | + | | | | | | | | | | | + | + | + | + | | | | + | + | | | | | + | | | | | | | | | | | | | | | | | | | -| Venice | + | | + | + | | + | + | + | + | + | | | + | | | | | | | | | | | + | + | | + | | | | + | + | | | | | + | | | | | | | | | | | | | | | | | | | -| Canon | | | + | | | + | | | | + | | | + | | | | | | | | | | | + | + | | | | | | | + | | | | | + | | | | | | | | | | | | | | | | | | | +| Reader | activeSensorPhysicalDimensions | activeSensorResolution | anamorphicSqueeze | firmwareVersion | label | make | model | serialNumber | captureFrameRate | duration | fdlLink | globalStage | isoSpeed | custom | distortionProjection | distortionOffset | distortionOverscan | distortionOverscanMax | distortion | encoders | entrancePupilOffset | exposureFalloff | fStop | firmwareVersion | focalLength | focusDistance | make | model | nominalFocalLength | projectionOffset | rawEncoders | serialNumber | tStop | undistortionOverscan | undistortionOverscanMax | protocol | relatedSampleIds | sampleId | shutterAngle | sourceId | sourceNumber | mode | recordedTimestamp | sampleRate | sampleTimestamp | sequenceNumber | synchronization | timecode | firmwareVersion | make | model | notes | recording | serialNumber | slate | status | transforms | +| ----------- | ----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- |----------- | +| RED | + | | + | + | | + | + | + | + | + | | | + | | | | | | | | + | | | + | + | + | + | + | | | | + | + | | | | | | + | | | | | | | | | | | | | | | | | | | +| ARRI | + | | + | | | + | + | + | + | + | | | + | | | | | | | | | | | | + | + | + | + | | | | + | + | | | | | | + | | | | | | | | | | | | | | | | | | | +| Venice | + | | + | + | | + | + | + | + | + | | | + | | | | | | | | | | | | + | + | | + | | | | + | + | | | | | | + | | | | | | | | | | | | | | | | | | | +| Canon | | | + | | | + | | | | + | | | + | | | | | | | | | | | | + | + | | | | | | | + | | | | | | + | | | | | | | | | | | | | | | | | | | ## Clip JSON Schema ```{ @@ -1409,10 +1463,14 @@ The following table indicates the camera parameters supported by each of the rea "type": "object", "additionalProperties": false, "properties": { + "distortionProjection": { + "type": "boolean", + "description": "The OpenLensIO distortion model is the Projection Characterization, not the Field-Of-View Characterization. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " + }, "distortionOverscanMax": { "type": "number", - "minimum": 0.0, - "description": "Static maximum overscan factor on lens distortion" + "minimum": 1.0, + "description": "Static maximum overscan factor on lens distortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " }, "firmwareVersion": { "type": "string", @@ -1443,6 +1501,11 @@ The following table indicates the camera parameters supported by each of the rea "minLength": 1, "maxLength": 1023, "description": "Non-blank string uniquely identifying the lens" + }, + "undistortionOverscanMax": { + "type": "number", + "minimum": 1.0, + "description": "Static maximum overscan factor on lens undistortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " } } }, @@ -1523,36 +1586,7 @@ The following table indicates the camera parameters supported by each of the rea }, "description": "Until the OpenLensIO model is finalised, this list provides custom coefficients for a particular lens model e.g. undistortion, anamorphic etc " }, - "distortion": { - "type": "object", - "additionalProperties": false, - "required": [ - "radial" - ], - "properties": { - "radial": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - }, - "tangential": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - } - }, - "description": "Coefficients for calculating the distortion characteristics of a lens comprising radial distortion coefficients of the spherical distortion (k1-N) and the tangential distortion (p1-N). " - }, - "distortionOverscan": { - "type": "number", - "minimum": 0.0, - "description": "Overscan factor on lens distortion" - }, - "distortionShift": { + "distortionOffset": { "type": "object", "additionalProperties": false, "required": [ @@ -1567,9 +1601,45 @@ The following table indicates the camera parameters supported by each of the rea "type": "number" } }, - "description": "Shift in x and y of the centre of distortion of the virtual camera ", + "description": "Offset in x and y of the centre of distortion of the virtual camera ", "units": "millimeter" }, + "distortionOverscan": { + "type": "number", + "minimum": 1.0, + "description": "Overscan factor on lens distortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " + }, + "distortion": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "radial" + ], + "properties": { + "model": { + "type": "string" + }, + "radial": { + "type": "array", + "items": { + "type": "number" + }, + "minLength": 1 + }, + "tangential": { + "type": "array", + "items": { + "type": "number" + }, + "minLength": 1 + } + } + }, + "description": "A list of Distortion objects that each define the coefficients for calculating the distortion characteristics of a lens comprising radial distortion coefficients of the spherical distortion (k1-N) and the tangential distortion (p1-N). An optional key 'model' can be used that describes the distortion model. The default is Brown-Conrady D-U (that maps Distorted to Undistorted coordinates). " + }, "encoders": { "type": "object", "additionalProperties": false, @@ -1650,7 +1720,7 @@ The following table indicates the camera parameters supported by each of the rea "description": "Focus distance/position of the lens", "units": "meter" }, - "perspectiveShift": { + "projectionOffset": { "type": "object", "additionalProperties": false, "required": [ @@ -1665,7 +1735,7 @@ The following table indicates the camera parameters supported by each of the rea "type": "number" } }, - "description": "Shift in x and y of the centre of perspective projection of the virtual camera ", + "description": "Offset in x and y of the centre of perspective projection of the virtual camera ", "units": "millimeter" }, "rawEncoders": { @@ -1709,29 +1779,10 @@ The following table indicates the camera parameters supported by each of the rea "minimum": 0.0, "description": "Linear t-number of the lens, equal to the F-number of the lens divided by the square root of the transmittance of the lens. " }, - "undistortion": { - "type": "object", - "additionalProperties": false, - "required": [ - "radial" - ], - "properties": { - "radial": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - }, - "tangential": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - } - }, - "description": "Coefficients for calculating the undistortion characteristics of a lens comprising radial distortion coefficients of the spherical distortion (k1-N) and the tangential distortion (p1-N). " + "undistortionOverscan": { + "type": "number", + "minimum": 1.0, + "description": "Overscan factor on lens undistortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " } } }, @@ -1745,8 +1796,14 @@ The following table indicates the camera parameters supported by each of the rea "maxLength": 1023 }, "version": { - "type": "string", - "pattern": "^[0-9]+.[0-9]+.[0-9]+$" + "type": "array", + "items": { + "type": "integer", + "minValue": 0, + "maxValue": 9 + }, + "minItems": 3, + "maxItems": 3 } }, "description": "Name of the protocol in which the sample is being employed, and version of that protocol " @@ -1779,27 +1836,6 @@ The following table indicates the camera parameters supported by each of the rea "type": "object", "additionalProperties": false, "properties": { - "frameRate": { - "type": "object", - "properties": { - "num": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 - }, - "denom": { - "type": "integer", - "minimum": 1, - "maximum": 4294967295 - } - }, - "required": [ - "num", - "denom" - ], - "additionalProperties": false, - "description": "Sample frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. In a variable rate system this should is estimated from the last sample delta time. " - }, "mode": { "type": "string", "enum": [ @@ -1821,20 +1857,36 @@ The following table indicates the camera parameters supported by each of the rea "type": "integer", "minimum": 0, "maximum": 4294967295 - }, - "attoseconds": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295 } }, "required": [ "seconds", "nanoseconds" ], - "description": " PTP timestamp of the data recording instant, provided for convenience during playback of e.g. pre-recorded tracking data. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds), and an optional 32-bit unsigned integer (attoseconds) ", + "description": " PTP timestamp of the data recording instant, provided for convenience during playback of e.g. pre-recorded tracking data. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds) ", "units": "second" }, + "sampleRate": { + "type": "object", + "properties": { + "num": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647 + }, + "denom": { + "type": "integer", + "minimum": 1, + "maximum": 4294967295 + } + }, + "required": [ + "num", + "denom" + ], + "additionalProperties": false, + "description": "Sample frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. In a variable rate system this should is estimated from the last sample delta time. " + }, "sampleTimestamp": { "type": "object", "additionalProperties": false, @@ -1848,18 +1900,13 @@ The following table indicates the camera parameters supported by each of the rea "type": "integer", "minimum": 0, "maximum": 4294967295 - }, - "attoseconds": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295 } }, "required": [ "seconds", "nanoseconds" ], - "description": "PTP timestamp of the data capture instant. Note this may differ from the packet's transmission PTP timestamp. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds), and an optional 32-bit unsigned integer (attoseconds) ", + "description": "PTP timestamp of the data capture instant. Note this may differ from the packet's transmission PTP timestamp. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds) ", "units": "second" }, "sequenceNumber": { @@ -1871,7 +1918,7 @@ The following table indicates the camera parameters supported by each of the rea "synchronization": { "type": "object", "additionalProperties": false, - "description": "Object describing how the tracking device is synchronized for this sample.\n frequency: The frequency of the synchronisation. This may differ from the sample frame rate for example in a genlocked tracking device. locked: Is the tracking device locked to the synchronization source offsets: Offsets in seconds between sync and sample. Critical for e.g. frame remapping, or when using different data sources for position/rotation and lens encoding present: Is the synchronization source present (a synchronization source can be present but not locked if frame rates differ for example) ptp: If the synchronization source is a PTP master, then this object contains: - \"master\": The MAC address of the PTP master - \"offset\": The timing offset in seconds from the sample timestamp to the PTP timestamp - \"domain\": The PTP domain number source: The source of synchronization must be defined as one of the following: - \"genlock\": The tracking device has an external black/burst or tri-level analog sync signal that is triggering the capture of tracking samples - \"videoIn\": The tracking device has an external video signal that is triggering the capture of tracking samples - \"ptp\": The tracking device is locked to a PTP master - \"ntp\": The tracking device is locked to an NTP server ", + "description": "Object describing how the tracking device is synchronized for this sample.\n frequency: The frequency of a synchronization signal.This may differ from the sample frame rate for example in a genlocked tracking device. This is not required if the synchronization source is PTP or NTP. locked: Is the tracking device locked to the synchronization source offsets: Offsets in seconds between sync and sample. Critical for e.g. frame remapping, or when using different data sources for position/rotation and lens encoding present: Is the synchronization source present (a synchronization source can be present but not locked if frame rates differ for example) ptp: If the synchronization source is a PTP master, then this object contains: - \"master\": The MAC address of the PTP master - \"offset\": The timing offset in seconds from the sample timestamp to the PTP timestamp - \"domain\": The PTP domain number source: The source of synchronization must be defined as one of the following: - \"genlock\": The tracking device has an external black/burst or tri-level analog sync signal that is triggering the capture of tracking samples - \"videoIn\": The tracking device has an external video signal that is triggering the capture of tracking samples - \"ptp\": The tracking device is locked to a PTP master - \"ntp\": The tracking device is locked to an NTP server ", "properties": { "frequency": { "type": "object", @@ -1927,7 +1974,8 @@ The following table indicates the camera parameters supported by each of the rea }, "domain": { "type": "integer", - "minimum": 0 + "minimum": 0, + "maximum": 127 } } }, @@ -1942,7 +1990,6 @@ The following table indicates the camera parameters supported by each of the rea } }, "required": [ - "frequency", "locked", "source" ] @@ -1976,14 +2023,13 @@ The following table indicates the camera parameters supported by each of the rea "frames": { "type": "integer", "minimum": 0, - "maximum": 29 + "maximum": 119 }, "format": { "type": "object", - "description": "The timecode format is defined as a rational frame rate and drop frame flag. Where an interlaced signal is described, the oddField flag indicates which field (odd or even) is referred to by the timecode. ", + "description": "The timecode format is defined as a rational frame rate and - where a signal with sub-frames is described, such as an interlaced signal - an index of which sub-frame is referred to by the timecode. ", "required": [ - "frameRate", - "dropFrame" + "frameRate" ], "additionalProperties": false, "properties": { @@ -2007,16 +2053,15 @@ The following table indicates the camera parameters supported by each of the rea } } }, - "dropFrame": { - "type": "boolean" - }, - "oddField": { - "type": "boolean" + "sub_frame": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 } } } }, - "description": "SMPTE timecode of the sample. Timecode is a standard for labeling individual frames of data in media systems and is useful for inter-frame synchronization. - format.dropFrame: True if the frame rate is a drop-frame format such as 29.97 fps. - format.frameRate: The frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. Note the timecode frame rate may differ from the sample frequency. " + "description": "SMPTE timecode of the sample. Timecode is a standard for labeling individual frames of data in media systems and is useful for inter-frame synchronization. - format.frameRate: The frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. The timecode frame rate may differ from the sample frequency. " } } }, @@ -2103,12 +2148,12 @@ The following table indicates the camera parameters supported by each of the rea } } }, - "transformId": { + "id": { "type": "string", "minLength": 1, "maxLength": 1023 }, - "parentTransformId": { + "parentId": { "type": "string", "minLength": 1, "maxLength": 1023 @@ -2119,7 +2164,7 @@ The following table indicates the camera parameters supported by each of the rea "rotation" ] }, - "description": "A list of transforms. Transforms can have a transformId and parentTransformId that can be used to compose a transform hierarchy. In the case of multiple children their transforms should be processed in their order in the array. X,Y,Z in meters of camera sensor relative to stage origin. The Z axis points upwards and the coordinate system is right-handed. Y points in the forward camera direction (when pan, tilt and roll are zero). For example in an LED volume Y would point towards the centre of the LED wall and so X would point to camera-right. Rotation expressed as euler angles in degrees of the camera sensor relative to stage origin Rotations are intrinsic and are measured around the axes ZXY, commonly referred to as [pan, tilt, roll] Notes on Euler angles: Euler angles are human readable and unlike quarternions, provide the ability for cycles (with angles >360 or <0 degrees). Where a tracking system is providing the pose of a virtual camera, gimbal lock does not present the physical challenges of a robotic system. Conversion to and from quarternions is trivial with an acceptable loss of precision ", + "description": "A list of transforms. Transforms can have a id and parentId that can be used to compose a transform hierarchy. In the case of multiple children their transforms should be processed in their order in the array. X,Y,Z in meters of camera sensor relative to stage origin. The Z axis points upwards and the coordinate system is right-handed. Y points in the forward camera direction (when pan, tilt and roll are zero). For example in an LED volume Y would point towards the centre of the LED wall and so X would point to camera-right. Rotation expressed as euler angles in degrees of the camera sensor relative to stage origin Rotations are intrinsic and are measured around the axes ZXY, commonly referred to as [pan, tilt, roll] Notes on Euler angles: Euler angles are human readable and unlike quarternions, provide the ability for cycles (with angles >360 or <0 degrees). Where a tracking system is providing the pose of a virtual camera, gimbal lock does not present the physical challenges of a robotic system. Conversion to and from quarternions is trivial with an acceptable loss of precision ", "units": "meter / degree" } } diff --git a/index.pdf b/index.pdf index 6cd95b4..16efc6b 100644 Binary files a/index.pdf and b/index.pdf differ diff --git a/opentrackio/examples/complete_dynamic_example.json b/opentrackio/examples/complete_dynamic_example.json index cd7692e..6d04ad2 100644 --- a/opentrackio/examples/complete_dynamic_example.json +++ b/opentrackio/examples/complete_dynamic_example.json @@ -12,25 +12,43 @@ 1.0, 2.0 ], - "distortion": { - "radial": [ - 1.0, - 2.0, - 3.0, - 4.0, - 5.0, - 6.0 - ], - "tangential": [ - 1.0, - 2.0 - ] - }, - "distortionOverscan": 1.0, - "distortionShift": { + "distortionOffset": { "x": 1.0, "y": 2.0 }, + "distortionOverscan": 1.1, + "distortion": [ + { + "radial": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0, + 6.0 + ], + "tangential": [ + 1.0, + 2.0 + ], + "model": "Brown-Conrady D-U" + }, + { + "radial": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0, + 6.0 + ], + "tangential": [ + 1.0, + 2.0 + ], + "model": "Brown-Conrady U-D" + } + ], "encoders": { "focus": 0.1, "iris": 0.2, @@ -45,7 +63,7 @@ "fStop": 4.0, "focalLength": 24.305, "focusDistance": 10.0, - "perspectiveShift": { + "projectionOffset": { "x": 0.1, "y": 0.2 }, @@ -55,53 +73,39 @@ "zoom": 3000 }, "tStop": 4.1, - "undistortion": { - "radial": [ - 1.0, - 2.0, - 3.0, - 4.0, - 5.0, - 6.0 - ], - "tangential": [ - 1.0, - 2.0 - ] - } + "undistortionOverscan": 1.2 }, "protocol": { "name": "OpenTrackIO", - "version": "0.9.0" + "version": [ + 0, + 9, + 1 + ] }, "relatedSampleIds": [ - "urn:uuid:fd98e79b-feb9-4b97-8f4a-dcc179c68cdf", - "urn:uuid:1c704bf9-e967-48f0-89eb-faf5cc695425" + "urn:uuid:70a5bca5-776c-4b91-97c9-83ff4090728c", + "urn:uuid:bcc17b3d-4f25-4345-871f-30c1320263c8" ], - "sampleId": "urn:uuid:abc20091-4579-4d69-a5d2-62326b68e354", - "sourceId": "urn:uuid:bf98b165-b437-4061-80a6-b21001428861", + "sampleId": "urn:uuid:4cf9ea5d-c222-45b2-9a12-41147ab12097", + "sourceId": "urn:uuid:a92b9fdc-5dd9-4db7-b0c3-4cddb5e2a05c", "sourceNumber": 1, "timing": { - "frameRate": { - "num": 24000, - "denom": 1001 - }, "mode": "internal", "recordedTimestamp": { "seconds": 1718806000, "nanoseconds": 500000000 }, + "sampleRate": { + "num": 24000, + "denom": 1001 + }, "sampleTimestamp": { "seconds": 1718806554, - "nanoseconds": 500000000, - "attoseconds": 0 + "nanoseconds": 500000000 }, "sequenceNumber": 0, "synchronization": { - "frequency": { - "num": 24000, - "denom": 1001 - }, "locked": true, "source": "ptp", "offsets": { @@ -126,8 +130,7 @@ "num": 24000, "denom": 1001 }, - "dropFrame": true, - "oddField": true + "subFrame": 0 } } }, @@ -149,7 +152,7 @@ "tilt": 90.0, "roll": 45.0 }, - "transformId": "Dolly" + "id": "Dolly" }, { "translation": { @@ -167,8 +170,8 @@ "y": 2.0, "z": 3.0 }, - "transformId": "Crane Arm", - "parentTransformId": "Dolly" + "id": "Crane Arm", + "parentId": "Dolly" }, { "translation": { @@ -186,8 +189,8 @@ "y": 2.0, "z": 3.0 }, - "transformId": "Camera", - "parentTransformId": "Crane Arm" + "id": "Camera", + "parentId": "Crane Arm" } ], "custom": { diff --git a/opentrackio/examples/complete_static_example.json b/opentrackio/examples/complete_static_example.json index 8ec7a55..fe24559 100644 --- a/opentrackio/examples/complete_static_example.json +++ b/opentrackio/examples/complete_static_example.json @@ -22,7 +22,7 @@ "num": 24000, "denom": 1001 }, - "fdlLink": "urn:uuid:12f872ac-693d-4eaf-bc65-d29ddabb5447", + "fdlLink": "urn:uuid:931c56d4-5790-4370-9db5-43aa83dc583c", "isoSpeed": 4000, "shutterAngle": 45.0 }, @@ -31,11 +31,13 @@ "denom": 25 }, "lens": { + "distortionProjection": true, "distortionOverscanMax": 1.2, "make": "LensMaker", "model": "Model15", "nominalFocalLength": 14, - "serialNumber": "1234567890A" + "serialNumber": "1234567890A", + "undistortionOverscanMax": 1.3 }, "tracker": { "firmwareVersion": "1.2.3", @@ -57,25 +59,43 @@ 1.0, 2.0 ], - "distortion": { - "radial": [ - 1.0, - 2.0, - 3.0, - 4.0, - 5.0, - 6.0 - ], - "tangential": [ - 1.0, - 2.0 - ] - }, - "distortionOverscan": 1.0, - "distortionShift": { + "distortionOffset": { "x": 1.0, "y": 2.0 }, + "distortionOverscan": 1.1, + "distortion": [ + { + "radial": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0, + 6.0 + ], + "tangential": [ + 1.0, + 2.0 + ], + "model": "Brown-Conrady D-U" + }, + { + "radial": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0, + 6.0 + ], + "tangential": [ + 1.0, + 2.0 + ], + "model": "Brown-Conrady U-D" + } + ], "encoders": { "focus": 0.1, "iris": 0.2, @@ -90,7 +110,7 @@ "fStop": 4.0, "focalLength": 24.305, "focusDistance": 10.0, - "perspectiveShift": { + "projectionOffset": { "x": 0.1, "y": 0.2 }, @@ -100,53 +120,39 @@ "zoom": 3000 }, "tStop": 4.1, - "undistortion": { - "radial": [ - 1.0, - 2.0, - 3.0, - 4.0, - 5.0, - 6.0 - ], - "tangential": [ - 1.0, - 2.0 - ] - } + "undistortionOverscan": 1.2 }, "protocol": { "name": "OpenTrackIO", - "version": "0.9.0" + "version": [ + 0, + 9, + 1 + ] }, "relatedSampleIds": [ - "urn:uuid:677aac81-9e97-4c51-a41e-e1f897bbc8c2", - "urn:uuid:740b2e26-e327-4ceb-96d0-1a581f00a790" + "urn:uuid:a93a3e61-9577-4e99-a50b-e69933cb863e", + "urn:uuid:3e809ba5-6024-425e-85cb-9d0664fd3dd7" ], - "sampleId": "urn:uuid:06a7a705-e466-4563-a9c7-e3cd0f29c3e7", - "sourceId": "urn:uuid:419cedb8-b8c3-4adc-893f-fe2293664b45", + "sampleId": "urn:uuid:aa0490ae-27e6-4bb4-83be-5d5d1336d53f", + "sourceId": "urn:uuid:1f7b88bc-25c5-41d7-9d14-30a071ca4871", "sourceNumber": 1, "timing": { - "frameRate": { - "num": 24000, - "denom": 1001 - }, "mode": "internal", "recordedTimestamp": { "seconds": 1718806000, "nanoseconds": 500000000 }, + "sampleRate": { + "num": 24000, + "denom": 1001 + }, "sampleTimestamp": { "seconds": 1718806554, - "nanoseconds": 500000000, - "attoseconds": 0 + "nanoseconds": 500000000 }, "sequenceNumber": 0, "synchronization": { - "frequency": { - "num": 24000, - "denom": 1001 - }, "locked": true, "source": "ptp", "offsets": { @@ -171,8 +177,7 @@ "num": 24000, "denom": 1001 }, - "dropFrame": true, - "oddField": true + "subFrame": 0 } } }, @@ -194,7 +199,7 @@ "tilt": 90.0, "roll": 45.0 }, - "transformId": "Dolly" + "id": "Dolly" }, { "translation": { @@ -212,8 +217,8 @@ "y": 2.0, "z": 3.0 }, - "transformId": "Crane Arm", - "parentTransformId": "Dolly" + "id": "Crane Arm", + "parentId": "Dolly" }, { "translation": { @@ -231,8 +236,8 @@ "y": 2.0, "z": 3.0 }, - "transformId": "Camera", - "parentTransformId": "Crane Arm" + "id": "Camera", + "parentId": "Crane Arm" } ], "custom": { diff --git a/opentrackio/examples/recommended_dynamic_example.json b/opentrackio/examples/recommended_dynamic_example.json index c352776..cc31604 100644 --- a/opentrackio/examples/recommended_dynamic_example.json +++ b/opentrackio/examples/recommended_dynamic_example.json @@ -1,16 +1,18 @@ { "lens": { - "distortion": { - "radial": [ - 1.0, - 2.0, - 3.0 - ], - "tangential": [ - 1.0, - 2.0 - ] - }, + "distortion": [ + { + "radial": [ + 1.0, + 2.0, + 3.0 + ], + "tangential": [ + 1.0, + 2.0 + ] + } + ], "encoders": { "focus": 0.1, "iris": 0.2, @@ -19,25 +21,29 @@ "entrancePupilOffset": 0.123, "fStop": 4.0, "focalLength": 24.305, - "focusDistance": 1000, - "perspectiveShift": { + "focusDistance": 10.0, + "projectionOffset": { "x": 0.1, "y": 0.2 } }, "protocol": { "name": "OpenTrackIO", - "version": "0.9.0" + "version": [ + 0, + 9, + 1 + ] }, - "sampleId": "urn:uuid:512534d2-e6c4-4ef9-a1de-e9009a180160", - "sourceId": "urn:uuid:4d2614f7-d315-44c6-b5c1-2677d2315b2b", + "sampleId": "urn:uuid:a31d30dd-0042-4e43-87d2-587e0e314faf", + "sourceId": "urn:uuid:8741190f-ed60-4961-b047-f4d6bb12956f", "sourceNumber": 1, "timing": { - "frameRate": { + "mode": "external", + "sampleRate": { "num": 24000, "denom": 1001 }, - "mode": "external", "timecode": { "hours": 1, "minutes": 2, @@ -48,8 +54,7 @@ "num": 24000, "denom": 1001 }, - "dropFrame": true, - "oddField": true + "subFrame": 0 } } }, @@ -71,7 +76,7 @@ "tilt": 90.0, "roll": 45.0 }, - "transformId": "Camera" + "id": "Camera" } ] } \ No newline at end of file diff --git a/opentrackio/examples/recommended_static_example.json b/opentrackio/examples/recommended_static_example.json index 714b69d..7d300ab 100644 --- a/opentrackio/examples/recommended_static_example.json +++ b/opentrackio/examples/recommended_static_example.json @@ -13,17 +13,19 @@ } }, "lens": { - "distortion": { - "radial": [ - 1.0, - 2.0, - 3.0 - ], - "tangential": [ - 1.0, - 2.0 - ] - }, + "distortion": [ + { + "radial": [ + 1.0, + 2.0, + 3.0 + ], + "tangential": [ + 1.0, + 2.0 + ] + } + ], "encoders": { "focus": 0.1, "iris": 0.2, @@ -32,25 +34,29 @@ "entrancePupilOffset": 0.123, "fStop": 4.0, "focalLength": 24.305, - "focusDistance": 1000, - "perspectiveShift": { + "focusDistance": 10.0, + "projectionOffset": { "x": 0.1, "y": 0.2 } }, "protocol": { "name": "OpenTrackIO", - "version": "0.9.0" + "version": [ + 0, + 9, + 1 + ] }, - "sampleId": "urn:uuid:7558e53b-c32c-4523-9e9b-c371e7a0d429", - "sourceId": "urn:uuid:4282b3af-7d26-4f86-8201-afdcd0260a69", + "sampleId": "urn:uuid:965acbf9-6618-462e-a23b-bf916a0c6040", + "sourceId": "urn:uuid:368a00c5-72ac-4797-b379-cd17e36eea48", "sourceNumber": 1, "timing": { - "frameRate": { + "mode": "external", + "sampleRate": { "num": 24000, "denom": 1001 }, - "mode": "external", "timecode": { "hours": 1, "minutes": 2, @@ -61,8 +67,7 @@ "num": 24000, "denom": 1001 }, - "dropFrame": true, - "oddField": true + "subFrame": 0 } } }, @@ -84,7 +89,7 @@ "tilt": 90.0, "roll": 45.0 }, - "transformId": "Camera" + "id": "Camera" } ] } \ No newline at end of file diff --git a/opentrackio/index.html b/opentrackio/index.html index 0eb691c..4556c63 100644 --- a/opentrackio/index.html +++ b/opentrackio/index.html @@ -16,7 +16,7 @@
    -

    OpenTrackIO Documentation v0.9.0

    +

    OpenTrackIO Documentation v(0, 9, 1)

    @@ -52,17 +52,19 @@
    {
       "lens": {
    -    "distortion": {
    -      "radial": [
    -        1.0,
    -        2.0,
    -        3.0
    -      ],
    -      "tangential": [
    -        1.0,
    -        2.0
    -      ]
    -    },
    +    "distortion": [
    +      {
    +        "radial": [
    +          1.0,
    +          2.0,
    +          3.0
    +        ],
    +        "tangential": [
    +          1.0,
    +          2.0
    +        ]
    +      }
    +    ],
         "encoders": {
           "focus": 0.1,
           "iris": 0.2,
    @@ -71,25 +73,29 @@ 
         "entrancePupilOffset": 0.123,
         "fStop": 4.0,
         "focalLength": 24.305,
    -    "focusDistance": 1000,
    -    "perspectiveShift": {
    +    "focusDistance": 10.0,
    +    "projectionOffset": {
           "x": 0.1,
           "y": 0.2
         }
       },
       "protocol": {
         "name": "OpenTrackIO",
    -    "version": "0.9.0"
    +    "version": [
    +      0,
    +      9,
    +      1
    +    ]
       },
    -  "sampleId": "urn:uuid:512534d2-e6c4-4ef9-a1de-e9009a180160",
    -  "sourceId": "urn:uuid:4d2614f7-d315-44c6-b5c1-2677d2315b2b",
    +  "sampleId": "urn:uuid:a31d30dd-0042-4e43-87d2-587e0e314faf",
    +  "sourceId": "urn:uuid:8741190f-ed60-4961-b047-f4d6bb12956f",
       "sourceNumber": 1,
       "timing": {
    -    "frameRate": {
    +    "mode": "external",
    +    "sampleRate": {
           "num": 24000,
           "denom": 1001
         },
    -    "mode": "external",
         "timecode": {
           "hours": 1,
           "minutes": 2,
    @@ -100,8 +106,7 @@ 
               "num": 24000,
               "denom": 1001
             },
    -        "dropFrame": true,
    -        "oddField": true
    +        "subFrame": 0
           }
         }
       },
    @@ -123,7 +128,7 @@ 
             "tilt": 90.0,
             "roll": 45.0
           },
    -      "transformId": "Camera"
    +      "id": "Camera"
         }
       ]
     }
    @@ -149,17 +154,19 @@

    Providing additional static data

    } }, "lens": { - "distortion": { - "radial": [ - 1.0, - 2.0, - 3.0 - ], - "tangential": [ - 1.0, - 2.0 - ] - }, + "distortion": [ + { + "radial": [ + 1.0, + 2.0, + 3.0 + ], + "tangential": [ + 1.0, + 2.0 + ] + } + ], "encoders": { "focus": 0.1, "iris": 0.2, @@ -168,25 +175,29 @@

    Providing additional static data

    "entrancePupilOffset": 0.123, "fStop": 4.0, "focalLength": 24.305, - "focusDistance": 1000, - "perspectiveShift": { + "focusDistance": 10.0, + "projectionOffset": { "x": 0.1, "y": 0.2 } }, "protocol": { "name": "OpenTrackIO", - "version": "0.9.0" + "version": [ + 0, + 9, + 1 + ] }, - "sampleId": "urn:uuid:7558e53b-c32c-4523-9e9b-c371e7a0d429", - "sourceId": "urn:uuid:4282b3af-7d26-4f86-8201-afdcd0260a69", + "sampleId": "urn:uuid:965acbf9-6618-462e-a23b-bf916a0c6040", + "sourceId": "urn:uuid:368a00c5-72ac-4797-b379-cd17e36eea48", "sourceNumber": 1, "timing": { - "frameRate": { + "mode": "external", + "sampleRate": { "num": 24000, "denom": 1001 }, - "mode": "external", "timecode": { "hours": 1, "minutes": 2, @@ -197,8 +208,7 @@

    Providing additional static data

    "num": 24000, "denom": 1001 }, - "dropFrame": true, - "oddField": true + "subFrame": 0 } } }, @@ -220,7 +230,7 @@

    Providing additional static data

    "tilt": 90.0, "roll": 45.0 }, - "transformId": "Camera" + "id": "Camera" } ] } @@ -255,7 +265,7 @@

    Complete sample

    "num": 24000, "denom": 1001 }, - "fdlLink": "urn:uuid:12f872ac-693d-4eaf-bc65-d29ddabb5447", + "fdlLink": "urn:uuid:931c56d4-5790-4370-9db5-43aa83dc583c", "isoSpeed": 4000, "shutterAngle": 45.0 }, @@ -264,11 +274,13 @@

    Complete sample

    "denom": 25 }, "lens": { + "distortionProjection": true, "distortionOverscanMax": 1.2, "make": "LensMaker", "model": "Model15", "nominalFocalLength": 14, - "serialNumber": "1234567890A" + "serialNumber": "1234567890A", + "undistortionOverscanMax": 1.3 }, "tracker": { "firmwareVersion": "1.2.3", @@ -290,25 +302,43 @@

    Complete sample

    1.0, 2.0 ], - "distortion": { - "radial": [ - 1.0, - 2.0, - 3.0, - 4.0, - 5.0, - 6.0 - ], - "tangential": [ - 1.0, - 2.0 - ] - }, - "distortionOverscan": 1.0, - "distortionShift": { + "distortionOffset": { "x": 1.0, "y": 2.0 }, + "distortionOverscan": 1.1, + "distortion": [ + { + "radial": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0, + 6.0 + ], + "tangential": [ + 1.0, + 2.0 + ], + "model": "Brown-Conrady D-U" + }, + { + "radial": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0, + 6.0 + ], + "tangential": [ + 1.0, + 2.0 + ], + "model": "Brown-Conrady U-D" + } + ], "encoders": { "focus": 0.1, "iris": 0.2, @@ -323,7 +353,7 @@

    Complete sample

    "fStop": 4.0, "focalLength": 24.305, "focusDistance": 10.0, - "perspectiveShift": { + "projectionOffset": { "x": 0.1, "y": 0.2 }, @@ -333,53 +363,39 @@

    Complete sample

    "zoom": 3000 }, "tStop": 4.1, - "undistortion": { - "radial": [ - 1.0, - 2.0, - 3.0, - 4.0, - 5.0, - 6.0 - ], - "tangential": [ - 1.0, - 2.0 - ] - } + "undistortionOverscan": 1.2 }, "protocol": { "name": "OpenTrackIO", - "version": "0.9.0" + "version": [ + 0, + 9, + 1 + ] }, "relatedSampleIds": [ - "urn:uuid:677aac81-9e97-4c51-a41e-e1f897bbc8c2", - "urn:uuid:740b2e26-e327-4ceb-96d0-1a581f00a790" + "urn:uuid:a93a3e61-9577-4e99-a50b-e69933cb863e", + "urn:uuid:3e809ba5-6024-425e-85cb-9d0664fd3dd7" ], - "sampleId": "urn:uuid:06a7a705-e466-4563-a9c7-e3cd0f29c3e7", - "sourceId": "urn:uuid:419cedb8-b8c3-4adc-893f-fe2293664b45", + "sampleId": "urn:uuid:aa0490ae-27e6-4bb4-83be-5d5d1336d53f", + "sourceId": "urn:uuid:1f7b88bc-25c5-41d7-9d14-30a071ca4871", "sourceNumber": 1, "timing": { - "frameRate": { - "num": 24000, - "denom": 1001 - }, "mode": "internal", "recordedTimestamp": { "seconds": 1718806000, "nanoseconds": 500000000 }, + "sampleRate": { + "num": 24000, + "denom": 1001 + }, "sampleTimestamp": { "seconds": 1718806554, - "nanoseconds": 500000000, - "attoseconds": 0 + "nanoseconds": 500000000 }, "sequenceNumber": 0, "synchronization": { - "frequency": { - "num": 24000, - "denom": 1001 - }, "locked": true, "source": "ptp", "offsets": { @@ -404,8 +420,7 @@

    Complete sample

    "num": 24000, "denom": 1001 }, - "dropFrame": true, - "oddField": true + "subFrame": 0 } } }, @@ -427,7 +442,7 @@

    Complete sample

    "tilt": 90.0, "roll": 45.0 }, - "transformId": "Dolly" + "id": "Dolly" }, { "translation": { @@ -445,8 +460,8 @@

    Complete sample

    "y": 2.0, "z": 3.0 }, - "transformId": "Crane Arm", - "parentTransformId": "Dolly" + "id": "Crane Arm", + "parentId": "Dolly" }, { "translation": { @@ -464,8 +479,8 @@

    Complete sample

    "y": 2.0, "z": 3.0 }, - "transformId": "Camera", - "parentTransformId": "Crane Arm" + "id": "Camera", + "parentId": "Crane Arm" } ], "custom": { @@ -611,17 +626,34 @@

    Description of all fields

    The tuple can be empty - distortionlensRegularCoefficients for calculating the distortion characteristics of a - lens comprising radial distortion coefficients of the spherical - distortion (k1-N) and the tangential distortion (p1-N). - NoneThe radial and tangential coefficients shall each be real numbers. + distortionProjectionlensStaticThe OpenLensIO distortion model is the Projection Characterization, + not the Field-Of-View Characterization. This is primarily relevant when + storing overscan values, not in transmission as the overscan should be + calculated by the consumer. + NoneThe parameter shall be a boolean. - distortionOverscanlensRegularOverscan factor on lens distortionNoneThe parameter shall be a non-negative real number. + distortionOffsetlensRegularOffset in x and y of the centre of distortion of the virtual camera + millimeterX and Y centre shift shall each be real numbers. - distortionOverscanMaxlensStaticStatic maximum overscan factor on lens distortionNoneThe parameter shall be a non-negative real number. + distortionOverscanlensRegularOverscan factor on lens distortion. This is primarily relevant when + storing overscan values, not in transmission as the overscan should be + calculated by the consumer. + NoneThe parameter shall be a real number >= 1. - distortionShiftlensRegularShift in x and y of the centre of distortion of the virtual camera - millimeterX and Y centre shift shall each be real numbers. + distortionOverscanMaxlensStaticStatic maximum overscan factor on lens distortion. This is primarily + relevant when storing overscan values, not in transmission as the + overscan should be calculated by the consumer. + NoneThe parameter shall be a real number >= 1. + + distortionlensRegularA list of Distortion objects that each define the coefficients for + calculating the distortion characteristics of a lens comprising radial + distortion coefficients of the spherical distortion (k1-N) and the + tangential distortion (p1-N). An optional key 'model' can be used that + describes the distortion model. The default is Brown-Conrady D-U (that + maps Distorted to Undistorted coordinates). + NoneThe list shall contain at least one Distortion object, and in each + object the radial and tangential coefficients shall each be real numbers. + encoderslensRegular Normalised real numbers (0-1) for focus, iris and zoom. @@ -673,9 +705,9 @@

    Description of all fields

    of a prime lens, e.g. 50 mm, and undefined in the case of a zoom lens. millimeterThe parameter shall be a non-negative real number. - perspectiveShiftlensRegularShift in x and y of the centre of perspective projection of the + projectionOffsetlensRegularOffset in x and y of the centre of perspective projection of the virtual camera - millimeterX and Y perspective shift shall each be real numbers. + millimeterX and Y projection offset shall each be real numbers. rawEncoderslensRegular Raw encoder values for focus, iris and zoom. @@ -693,10 +725,15 @@

    Description of all fields

    divided by the square root of the transmittance of the lens. NoneThe parameter shall be a non-negative real number. - undistortionlensRegularCoefficients for calculating the undistortion characteristics of a - lens comprising radial distortion coefficients of the spherical - distortion (k1-N) and the tangential distortion (p1-N). - NoneThe radial and tangential coefficients shall each be real numbers. + undistortionOverscanlensRegularOverscan factor on lens undistortion. This is primarily relevant when + storing overscan values, not in transmission as the overscan should be + calculated by the consumer. + NoneThe parameter shall be a real number >= 1. + + undistortionOverscanMaxlensStaticStatic maximum overscan factor on lens undistortion. This is primarily + relevant when storing overscan values, not in transmission as the + overscan should be calculated by the consumer. + NoneThe parameter shall be a real number >= 1. protocolNoneRegularName of the protocol in which the sample is being employed, and version of that protocol @@ -733,14 +770,6 @@

    Description of all fields

    data is being transported. This is most important in the case where a source is producing multiple streams of samples. NoneThe parameter shall be a integer in the range (0..4,294,967,295]. - - - frameRatetimingRegularSample frame rate as a rational number. Drop frame rates such as - 29.97 should be represented as e.g. 30000/1001. In a variable rate - system this should is estimated from the last sample delta time. - NoneThe parameter shall be a rational number whose numerator - is in the range [0..2,147,483,647] and denominator in the range - (0..4,294,967,295]. modetimingRegularEnumerated value indicating whether the sample transport mechanism @@ -753,19 +782,25 @@

    Description of all fields

    PTP timestamp of the data recording instant, provided for convenience during playback of e.g. pre-recorded tracking data. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned - integer (nanoseconds), and an optional 32-bit unsigned integer - (attoseconds) + integer (nanoseconds) secondThe parameter shall contain valid number of seconds, nanoseconds - and optionally attoseconds elapsed since the start of the epoch. + elapsed since the start of the epoch. + + + sampleRatetimingRegularSample frame rate as a rational number. Drop frame rates such as + 29.97 should be represented as e.g. 30000/1001. In a variable rate + system this should is estimated from the last sample delta time. + NoneThe parameter shall be a rational number whose numerator + is in the range [0..2,147,483,647] and denominator in the range + (0..4,294,967,295]. sampleTimestamptimingRegularPTP timestamp of the data capture instant. Note this may differ from the packet's transmission PTP timestamp. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned - integer (nanoseconds), and an optional 32-bit unsigned integer - (attoseconds) + integer (nanoseconds) secondThe parameter shall contain valid number of seconds, nanoseconds - and optionally attoseconds elapsed since the start of the epoch. + elapsed since the start of the epoch. sequenceNumbertimingRegularInteger incrementing with each sample.NoneThe parameter shall be a integer in the range (0..4,294,967,295]. @@ -774,8 +809,9 @@

    Description of all fields

    synchronizationtimingRegularObject describing how the tracking device is synchronized for this sample. - frequency: The frequency of the synchronisation. This may differ from - the sample frame rate for example in a genlocked tracking device. + frequency: The frequency of a synchronization signal.This may differ from + the sample frame rate for example in a genlocked tracking device. This is + not required if the synchronization source is PTP or NTP. locked: Is the tracking device locked to the synchronization source offsets: Offsets in seconds between sync and sample. Critical for e.g. frame remapping, or when using different data sources for @@ -805,8 +841,9 @@

    Description of all fields

    timecodetimingRegularSMPTE timecode of the sample. Timecode is a standard for labeling individual frames of data in media systems and is useful for inter-frame synchronization. - - format.dropFrame: True if the frame rate is a drop-frame format such as 29.97 fps. - - format.frameRate: The frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. Note the timecode frame rate may differ from the sample frequency. + - format.frameRate: The frame rate as a rational number. Drop frame + rates such as 29.97 should be represented as e.g. 30000/1001. The + timecode frame rate may differ from the sample frequency. NoneThe parameter shall contain a valid format and hours, minutes, seconds and frames with appropriate min/max values. @@ -842,9 +879,9 @@

    Description of all fields

    transformsNoneRegularA list of transforms. - Transforms can have a transformId and parentTransformId that can be used - to compose a transform hierarchy. In the case of multiple children their - transforms should be processed in their order in the array. + Transforms can have a id and parentId that can be used to compose a + transform hierarchy. In the case of multiple children their transforms + should be processed in their order in the array. X,Y,Z in meters of camera sensor relative to stage origin. The Z axis points upwards and the coordinate system is right-handed. Y points in the forward camera direction (when pan, tilt and roll are @@ -1045,10 +1082,14 @@

    JSON schema

    "type": "object", "additionalProperties": false, "properties": { + "distortionProjection": { + "type": "boolean", + "description": "The OpenLensIO distortion model is the Projection Characterization, not the Field-Of-View Characterization. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " + }, "distortionOverscanMax": { "type": "number", - "minimum": 0.0, - "description": "Static maximum overscan factor on lens distortion" + "minimum": 1.0, + "description": "Static maximum overscan factor on lens distortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " }, "firmwareVersion": { "type": "string", @@ -1079,6 +1120,11 @@

    JSON schema

    "minLength": 1, "maxLength": 1023, "description": "Non-blank string uniquely identifying the lens" + }, + "undistortionOverscanMax": { + "type": "number", + "minimum": 1.0, + "description": "Static maximum overscan factor on lens undistortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " } } }, @@ -1159,36 +1205,7 @@

    JSON schema

    }, "description": "Until the OpenLensIO model is finalised, this list provides custom coefficients for a particular lens model e.g. undistortion, anamorphic etc " }, - "distortion": { - "type": "object", - "additionalProperties": false, - "required": [ - "radial" - ], - "properties": { - "radial": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - }, - "tangential": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - } - }, - "description": "Coefficients for calculating the distortion characteristics of a lens comprising radial distortion coefficients of the spherical distortion (k1-N) and the tangential distortion (p1-N). " - }, - "distortionOverscan": { - "type": "number", - "minimum": 0.0, - "description": "Overscan factor on lens distortion" - }, - "distortionShift": { + "distortionOffset": { "type": "object", "additionalProperties": false, "required": [ @@ -1203,9 +1220,45 @@

    JSON schema

    "type": "number" } }, - "description": "Shift in x and y of the centre of distortion of the virtual camera ", + "description": "Offset in x and y of the centre of distortion of the virtual camera ", "units": "millimeter" }, + "distortionOverscan": { + "type": "number", + "minimum": 1.0, + "description": "Overscan factor on lens distortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " + }, + "distortion": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "radial" + ], + "properties": { + "model": { + "type": "string" + }, + "radial": { + "type": "array", + "items": { + "type": "number" + }, + "minLength": 1 + }, + "tangential": { + "type": "array", + "items": { + "type": "number" + }, + "minLength": 1 + } + } + }, + "description": "A list of Distortion objects that each define the coefficients for calculating the distortion characteristics of a lens comprising radial distortion coefficients of the spherical distortion (k1-N) and the tangential distortion (p1-N). An optional key 'model' can be used that describes the distortion model. The default is Brown-Conrady D-U (that maps Distorted to Undistorted coordinates). " + }, "encoders": { "type": "object", "additionalProperties": false, @@ -1286,7 +1339,7 @@

    JSON schema

    "description": "Focus distance/position of the lens", "units": "meter" }, - "perspectiveShift": { + "projectionOffset": { "type": "object", "additionalProperties": false, "required": [ @@ -1301,7 +1354,7 @@

    JSON schema

    "type": "number" } }, - "description": "Shift in x and y of the centre of perspective projection of the virtual camera ", + "description": "Offset in x and y of the centre of perspective projection of the virtual camera ", "units": "millimeter" }, "rawEncoders": { @@ -1345,29 +1398,10 @@

    JSON schema

    "minimum": 0.0, "description": "Linear t-number of the lens, equal to the F-number of the lens divided by the square root of the transmittance of the lens. " }, - "undistortion": { - "type": "object", - "additionalProperties": false, - "required": [ - "radial" - ], - "properties": { - "radial": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - }, - "tangential": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - } - }, - "description": "Coefficients for calculating the undistortion characteristics of a lens comprising radial distortion coefficients of the spherical distortion (k1-N) and the tangential distortion (p1-N). " + "undistortionOverscan": { + "type": "number", + "minimum": 1.0, + "description": "Overscan factor on lens undistortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " } } }, @@ -1381,8 +1415,14 @@

    JSON schema

    "maxLength": 1023 }, "version": { - "type": "string", - "pattern": "^[0-9]+.[0-9]+.[0-9]+$" + "type": "array", + "items": { + "type": "integer", + "minValue": 0, + "maxValue": 9 + }, + "minItems": 3, + "maxItems": 3 } }, "description": "Name of the protocol in which the sample is being employed, and version of that protocol " @@ -1415,27 +1455,6 @@

    JSON schema

    "type": "object", "additionalProperties": false, "properties": { - "frameRate": { - "type": "object", - "properties": { - "num": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 - }, - "denom": { - "type": "integer", - "minimum": 1, - "maximum": 4294967295 - } - }, - "required": [ - "num", - "denom" - ], - "additionalProperties": false, - "description": "Sample frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. In a variable rate system this should is estimated from the last sample delta time. " - }, "mode": { "type": "string", "enum": [ @@ -1457,20 +1476,36 @@

    JSON schema

    "type": "integer", "minimum": 0, "maximum": 4294967295 - }, - "attoseconds": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295 } }, "required": [ "seconds", "nanoseconds" ], - "description": " PTP timestamp of the data recording instant, provided for convenience during playback of e.g. pre-recorded tracking data. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds), and an optional 32-bit unsigned integer (attoseconds) ", + "description": " PTP timestamp of the data recording instant, provided for convenience during playback of e.g. pre-recorded tracking data. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds) ", "units": "second" }, + "sampleRate": { + "type": "object", + "properties": { + "num": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647 + }, + "denom": { + "type": "integer", + "minimum": 1, + "maximum": 4294967295 + } + }, + "required": [ + "num", + "denom" + ], + "additionalProperties": false, + "description": "Sample frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. In a variable rate system this should is estimated from the last sample delta time. " + }, "sampleTimestamp": { "type": "object", "additionalProperties": false, @@ -1484,18 +1519,13 @@

    JSON schema

    "type": "integer", "minimum": 0, "maximum": 4294967295 - }, - "attoseconds": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295 } }, "required": [ "seconds", "nanoseconds" ], - "description": "PTP timestamp of the data capture instant. Note this may differ from the packet's transmission PTP timestamp. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds), and an optional 32-bit unsigned integer (attoseconds) ", + "description": "PTP timestamp of the data capture instant. Note this may differ from the packet's transmission PTP timestamp. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds) ", "units": "second" }, "sequenceNumber": { @@ -1507,7 +1537,7 @@

    JSON schema

    "synchronization": { "type": "object", "additionalProperties": false, - "description": "Object describing how the tracking device is synchronized for this sample.\n frequency: The frequency of the synchronisation. This may differ from the sample frame rate for example in a genlocked tracking device. locked: Is the tracking device locked to the synchronization source offsets: Offsets in seconds between sync and sample. Critical for e.g. frame remapping, or when using different data sources for position/rotation and lens encoding present: Is the synchronization source present (a synchronization source can be present but not locked if frame rates differ for example) ptp: If the synchronization source is a PTP master, then this object contains: - \"master\": The MAC address of the PTP master - \"offset\": The timing offset in seconds from the sample timestamp to the PTP timestamp - \"domain\": The PTP domain number source: The source of synchronization must be defined as one of the following: - \"genlock\": The tracking device has an external black/burst or tri-level analog sync signal that is triggering the capture of tracking samples - \"videoIn\": The tracking device has an external video signal that is triggering the capture of tracking samples - \"ptp\": The tracking device is locked to a PTP master - \"ntp\": The tracking device is locked to an NTP server ", + "description": "Object describing how the tracking device is synchronized for this sample.\n frequency: The frequency of a synchronization signal.This may differ from the sample frame rate for example in a genlocked tracking device. This is not required if the synchronization source is PTP or NTP. locked: Is the tracking device locked to the synchronization source offsets: Offsets in seconds between sync and sample. Critical for e.g. frame remapping, or when using different data sources for position/rotation and lens encoding present: Is the synchronization source present (a synchronization source can be present but not locked if frame rates differ for example) ptp: If the synchronization source is a PTP master, then this object contains: - \"master\": The MAC address of the PTP master - \"offset\": The timing offset in seconds from the sample timestamp to the PTP timestamp - \"domain\": The PTP domain number source: The source of synchronization must be defined as one of the following: - \"genlock\": The tracking device has an external black/burst or tri-level analog sync signal that is triggering the capture of tracking samples - \"videoIn\": The tracking device has an external video signal that is triggering the capture of tracking samples - \"ptp\": The tracking device is locked to a PTP master - \"ntp\": The tracking device is locked to an NTP server ", "properties": { "frequency": { "type": "object", @@ -1563,7 +1593,8 @@

    JSON schema

    }, "domain": { "type": "integer", - "minimum": 0 + "minimum": 0, + "maximum": 127 } } }, @@ -1578,7 +1609,6 @@

    JSON schema

    } }, "required": [ - "frequency", "locked", "source" ] @@ -1612,14 +1642,13 @@

    JSON schema

    "frames": { "type": "integer", "minimum": 0, - "maximum": 29 + "maximum": 119 }, "format": { "type": "object", - "description": "The timecode format is defined as a rational frame rate and drop frame flag. Where an interlaced signal is described, the oddField flag indicates which field (odd or even) is referred to by the timecode. ", + "description": "The timecode format is defined as a rational frame rate and - where a signal with sub-frames is described, such as an interlaced signal - an index of which sub-frame is referred to by the timecode. ", "required": [ - "frameRate", - "dropFrame" + "frameRate" ], "additionalProperties": false, "properties": { @@ -1643,16 +1672,15 @@

    JSON schema

    } } }, - "dropFrame": { - "type": "boolean" - }, - "oddField": { - "type": "boolean" + "sub_frame": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 } } } }, - "description": "SMPTE timecode of the sample. Timecode is a standard for labeling individual frames of data in media systems and is useful for inter-frame synchronization. - format.dropFrame: True if the frame rate is a drop-frame format such as 29.97 fps. - format.frameRate: The frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. Note the timecode frame rate may differ from the sample frequency. " + "description": "SMPTE timecode of the sample. Timecode is a standard for labeling individual frames of data in media systems and is useful for inter-frame synchronization. - format.frameRate: The frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. The timecode frame rate may differ from the sample frequency. " } } }, @@ -1739,12 +1767,12 @@

    JSON schema

    } } }, - "transformId": { + "id": { "type": "string", "minLength": 1, "maxLength": 1023 }, - "parentTransformId": { + "parentId": { "type": "string", "minLength": 1, "maxLength": 1023 @@ -1755,7 +1783,7 @@

    JSON schema

    "rotation" ] }, - "description": "A list of transforms. Transforms can have a transformId and parentTransformId that can be used to compose a transform hierarchy. In the case of multiple children their transforms should be processed in their order in the array. X,Y,Z in meters of camera sensor relative to stage origin. The Z axis points upwards and the coordinate system is right-handed. Y points in the forward camera direction (when pan, tilt and roll are zero). For example in an LED volume Y would point towards the centre of the LED wall and so X would point to camera-right. Rotation expressed as euler angles in degrees of the camera sensor relative to stage origin Rotations are intrinsic and are measured around the axes ZXY, commonly referred to as [pan, tilt, roll] Notes on Euler angles: Euler angles are human readable and unlike quarternions, provide the ability for cycles (with angles >360 or <0 degrees). Where a tracking system is providing the pose of a virtual camera, gimbal lock does not present the physical challenges of a robotic system. Conversion to and from quarternions is trivial with an acceptable loss of precision ", + "description": "A list of transforms. Transforms can have a id and parentId that can be used to compose a transform hierarchy. In the case of multiple children their transforms should be processed in their order in the array. X,Y,Z in meters of camera sensor relative to stage origin. The Z axis points upwards and the coordinate system is right-handed. Y points in the forward camera direction (when pan, tilt and roll are zero). For example in an LED volume Y would point towards the centre of the LED wall and so X would point to camera-right. Rotation expressed as euler angles in degrees of the camera sensor relative to stage origin Rotations are intrinsic and are measured around the axes ZXY, commonly referred to as [pan, tilt, roll] Notes on Euler angles: Euler angles are human readable and unlike quarternions, provide the ability for cycles (with angles >360 or <0 degrees). Where a tracking system is providing the pose of a virtual camera, gimbal lock does not present the physical challenges of a robotic system. Conversion to and from quarternions is trivial with an acceptable loss of precision ", "units": "meter / degree" } } diff --git a/opentrackio/schema.json b/opentrackio/schema.json index 6d03050..ccc5cac 100644 --- a/opentrackio/schema.json +++ b/opentrackio/schema.json @@ -172,10 +172,14 @@ "type": "object", "additionalProperties": false, "properties": { + "distortionProjection": { + "type": "boolean", + "description": "The OpenLensIO distortion model is the Projection Characterization, not the Field-Of-View Characterization. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " + }, "distortionOverscanMax": { "type": "number", - "minimum": 0.0, - "description": "Static maximum overscan factor on lens distortion" + "minimum": 1.0, + "description": "Static maximum overscan factor on lens distortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " }, "firmwareVersion": { "type": "string", @@ -206,6 +210,11 @@ "minLength": 1, "maxLength": 1023, "description": "Non-blank string uniquely identifying the lens" + }, + "undistortionOverscanMax": { + "type": "number", + "minimum": 1.0, + "description": "Static maximum overscan factor on lens undistortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " } } }, @@ -286,36 +295,7 @@ }, "description": "Until the OpenLensIO model is finalised, this list provides custom coefficients for a particular lens model e.g. undistortion, anamorphic etc " }, - "distortion": { - "type": "object", - "additionalProperties": false, - "required": [ - "radial" - ], - "properties": { - "radial": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - }, - "tangential": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - } - }, - "description": "Coefficients for calculating the distortion characteristics of a lens comprising radial distortion coefficients of the spherical distortion (k1-N) and the tangential distortion (p1-N). " - }, - "distortionOverscan": { - "type": "number", - "minimum": 0.0, - "description": "Overscan factor on lens distortion" - }, - "distortionShift": { + "distortionOffset": { "type": "object", "additionalProperties": false, "required": [ @@ -330,9 +310,45 @@ "type": "number" } }, - "description": "Shift in x and y of the centre of distortion of the virtual camera ", + "description": "Offset in x and y of the centre of distortion of the virtual camera ", "units": "millimeter" }, + "distortionOverscan": { + "type": "number", + "minimum": 1.0, + "description": "Overscan factor on lens distortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " + }, + "distortion": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "radial" + ], + "properties": { + "model": { + "type": "string" + }, + "radial": { + "type": "array", + "items": { + "type": "number" + }, + "minLength": 1 + }, + "tangential": { + "type": "array", + "items": { + "type": "number" + }, + "minLength": 1 + } + } + }, + "description": "A list of Distortion objects that each define the coefficients for calculating the distortion characteristics of a lens comprising radial distortion coefficients of the spherical distortion (k1-N) and the tangential distortion (p1-N). An optional key 'model' can be used that describes the distortion model. The default is Brown-Conrady D-U (that maps Distorted to Undistorted coordinates). " + }, "encoders": { "type": "object", "additionalProperties": false, @@ -413,7 +429,7 @@ "description": "Focus distance/position of the lens", "units": "meter" }, - "perspectiveShift": { + "projectionOffset": { "type": "object", "additionalProperties": false, "required": [ @@ -428,7 +444,7 @@ "type": "number" } }, - "description": "Shift in x and y of the centre of perspective projection of the virtual camera ", + "description": "Offset in x and y of the centre of perspective projection of the virtual camera ", "units": "millimeter" }, "rawEncoders": { @@ -472,29 +488,10 @@ "minimum": 0.0, "description": "Linear t-number of the lens, equal to the F-number of the lens divided by the square root of the transmittance of the lens. " }, - "undistortion": { - "type": "object", - "additionalProperties": false, - "required": [ - "radial" - ], - "properties": { - "radial": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - }, - "tangential": { - "type": "array", - "items": { - "type": "number" - }, - "minLength": 1 - } - }, - "description": "Coefficients for calculating the undistortion characteristics of a lens comprising radial distortion coefficients of the spherical distortion (k1-N) and the tangential distortion (p1-N). " + "undistortionOverscan": { + "type": "number", + "minimum": 1.0, + "description": "Overscan factor on lens undistortion. This is primarily relevant when storing overscan values, not in transmission as the overscan should be calculated by the consumer. " } } }, @@ -508,8 +505,14 @@ "maxLength": 1023 }, "version": { - "type": "string", - "pattern": "^[0-9]+.[0-9]+.[0-9]+$" + "type": "array", + "items": { + "type": "integer", + "minValue": 0, + "maxValue": 9 + }, + "minItems": 3, + "maxItems": 3 } }, "description": "Name of the protocol in which the sample is being employed, and version of that protocol " @@ -542,27 +545,6 @@ "type": "object", "additionalProperties": false, "properties": { - "frameRate": { - "type": "object", - "properties": { - "num": { - "type": "integer", - "minimum": 0, - "maximum": 2147483647 - }, - "denom": { - "type": "integer", - "minimum": 1, - "maximum": 4294967295 - } - }, - "required": [ - "num", - "denom" - ], - "additionalProperties": false, - "description": "Sample frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. In a variable rate system this should is estimated from the last sample delta time. " - }, "mode": { "type": "string", "enum": [ @@ -584,20 +566,36 @@ "type": "integer", "minimum": 0, "maximum": 4294967295 - }, - "attoseconds": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295 } }, "required": [ "seconds", "nanoseconds" ], - "description": " PTP timestamp of the data recording instant, provided for convenience during playback of e.g. pre-recorded tracking data. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds), and an optional 32-bit unsigned integer (attoseconds) ", + "description": " PTP timestamp of the data recording instant, provided for convenience during playback of e.g. pre-recorded tracking data. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds) ", "units": "second" }, + "sampleRate": { + "type": "object", + "properties": { + "num": { + "type": "integer", + "minimum": 0, + "maximum": 2147483647 + }, + "denom": { + "type": "integer", + "minimum": 1, + "maximum": 4294967295 + } + }, + "required": [ + "num", + "denom" + ], + "additionalProperties": false, + "description": "Sample frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. In a variable rate system this should is estimated from the last sample delta time. " + }, "sampleTimestamp": { "type": "object", "additionalProperties": false, @@ -611,18 +609,13 @@ "type": "integer", "minimum": 0, "maximum": 4294967295 - }, - "attoseconds": { - "type": "integer", - "minimum": 0, - "maximum": 4294967295 } }, "required": [ "seconds", "nanoseconds" ], - "description": "PTP timestamp of the data capture instant. Note this may differ from the packet's transmission PTP timestamp. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds), and an optional 32-bit unsigned integer (attoseconds) ", + "description": "PTP timestamp of the data capture instant. Note this may differ from the packet's transmission PTP timestamp. The timestamp comprises a 48-bit unsigned integer (seconds), a 32-bit unsigned integer (nanoseconds) ", "units": "second" }, "sequenceNumber": { @@ -634,7 +627,7 @@ "synchronization": { "type": "object", "additionalProperties": false, - "description": "Object describing how the tracking device is synchronized for this sample.\n frequency: The frequency of the synchronisation. This may differ from the sample frame rate for example in a genlocked tracking device. locked: Is the tracking device locked to the synchronization source offsets: Offsets in seconds between sync and sample. Critical for e.g. frame remapping, or when using different data sources for position/rotation and lens encoding present: Is the synchronization source present (a synchronization source can be present but not locked if frame rates differ for example) ptp: If the synchronization source is a PTP master, then this object contains: - \"master\": The MAC address of the PTP master - \"offset\": The timing offset in seconds from the sample timestamp to the PTP timestamp - \"domain\": The PTP domain number source: The source of synchronization must be defined as one of the following: - \"genlock\": The tracking device has an external black/burst or tri-level analog sync signal that is triggering the capture of tracking samples - \"videoIn\": The tracking device has an external video signal that is triggering the capture of tracking samples - \"ptp\": The tracking device is locked to a PTP master - \"ntp\": The tracking device is locked to an NTP server ", + "description": "Object describing how the tracking device is synchronized for this sample.\n frequency: The frequency of a synchronization signal.This may differ from the sample frame rate for example in a genlocked tracking device. This is not required if the synchronization source is PTP or NTP. locked: Is the tracking device locked to the synchronization source offsets: Offsets in seconds between sync and sample. Critical for e.g. frame remapping, or when using different data sources for position/rotation and lens encoding present: Is the synchronization source present (a synchronization source can be present but not locked if frame rates differ for example) ptp: If the synchronization source is a PTP master, then this object contains: - \"master\": The MAC address of the PTP master - \"offset\": The timing offset in seconds from the sample timestamp to the PTP timestamp - \"domain\": The PTP domain number source: The source of synchronization must be defined as one of the following: - \"genlock\": The tracking device has an external black/burst or tri-level analog sync signal that is triggering the capture of tracking samples - \"videoIn\": The tracking device has an external video signal that is triggering the capture of tracking samples - \"ptp\": The tracking device is locked to a PTP master - \"ntp\": The tracking device is locked to an NTP server ", "properties": { "frequency": { "type": "object", @@ -690,7 +683,8 @@ }, "domain": { "type": "integer", - "minimum": 0 + "minimum": 0, + "maximum": 127 } } }, @@ -705,7 +699,6 @@ } }, "required": [ - "frequency", "locked", "source" ] @@ -739,14 +732,13 @@ "frames": { "type": "integer", "minimum": 0, - "maximum": 29 + "maximum": 119 }, "format": { "type": "object", - "description": "The timecode format is defined as a rational frame rate and drop frame flag. Where an interlaced signal is described, the oddField flag indicates which field (odd or even) is referred to by the timecode. ", + "description": "The timecode format is defined as a rational frame rate and - where a signal with sub-frames is described, such as an interlaced signal - an index of which sub-frame is referred to by the timecode. ", "required": [ - "frameRate", - "dropFrame" + "frameRate" ], "additionalProperties": false, "properties": { @@ -770,16 +762,15 @@ } } }, - "dropFrame": { - "type": "boolean" - }, - "oddField": { - "type": "boolean" + "sub_frame": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 } } } }, - "description": "SMPTE timecode of the sample. Timecode is a standard for labeling individual frames of data in media systems and is useful for inter-frame synchronization. - format.dropFrame: True if the frame rate is a drop-frame format such as 29.97 fps. - format.frameRate: The frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. Note the timecode frame rate may differ from the sample frequency. " + "description": "SMPTE timecode of the sample. Timecode is a standard for labeling individual frames of data in media systems and is useful for inter-frame synchronization. - format.frameRate: The frame rate as a rational number. Drop frame rates such as 29.97 should be represented as e.g. 30000/1001. The timecode frame rate may differ from the sample frequency. " } } }, @@ -866,12 +857,12 @@ } } }, - "transformId": { + "id": { "type": "string", "minLength": 1, "maxLength": 1023 }, - "parentTransformId": { + "parentId": { "type": "string", "minLength": 1, "maxLength": 1023 @@ -882,7 +873,7 @@ "rotation" ] }, - "description": "A list of transforms. Transforms can have a transformId and parentTransformId that can be used to compose a transform hierarchy. In the case of multiple children their transforms should be processed in their order in the array. X,Y,Z in meters of camera sensor relative to stage origin. The Z axis points upwards and the coordinate system is right-handed. Y points in the forward camera direction (when pan, tilt and roll are zero). For example in an LED volume Y would point towards the centre of the LED wall and so X would point to camera-right. Rotation expressed as euler angles in degrees of the camera sensor relative to stage origin Rotations are intrinsic and are measured around the axes ZXY, commonly referred to as [pan, tilt, roll] Notes on Euler angles: Euler angles are human readable and unlike quarternions, provide the ability for cycles (with angles >360 or <0 degrees). Where a tracking system is providing the pose of a virtual camera, gimbal lock does not present the physical challenges of a robotic system. Conversion to and from quarternions is trivial with an acceptable loss of precision ", + "description": "A list of transforms. Transforms can have a id and parentId that can be used to compose a transform hierarchy. In the case of multiple children their transforms should be processed in their order in the array. X,Y,Z in meters of camera sensor relative to stage origin. The Z axis points upwards and the coordinate system is right-handed. Y points in the forward camera direction (when pan, tilt and roll are zero). For example in an LED volume Y would point towards the centre of the LED wall and so X would point to camera-right. Rotation expressed as euler angles in degrees of the camera sensor relative to stage origin Rotations are intrinsic and are measured around the axes ZXY, commonly referred to as [pan, tilt, roll] Notes on Euler angles: Euler angles are human readable and unlike quarternions, provide the ability for cycles (with angles >360 or <0 degrees). Where a tracking system is providing the pose of a virtual camera, gimbal lock does not present the physical challenges of a robotic system. Conversion to and from quarternions is trivial with an acceptable loss of precision ", "units": "meter / degree" } }