{
"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 @@ OpenTrackIO sample
"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 @@ OpenTrackIO sample
"num": 24000,
"denom": 1001
},
- "dropFrame": true,
- "oddField": true
+ "subFrame": 0
}
}
},
@@ -123,7 +128,7 @@ OpenTrackIO sample
"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
-
distortion | lens | Regular | 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).
- | None | The radial and tangential coefficients shall each be real numbers. |
+
distortionProjection | lens | Static | 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.
+ | None | The parameter shall be a boolean. |
-
distortionOverscan | lens | Regular | Overscan factor on lens distortion | None | The parameter shall be a non-negative real number. |
+
distortionOffset | lens | Regular | Offset in x and y of the centre of distortion of the virtual camera
+ | millimeter | X and Y centre shift shall each be real numbers. |
-
distortionOverscanMax | lens | Static | Static maximum overscan factor on lens distortion | None | The parameter shall be a non-negative real number. |
+
distortionOverscan | lens | Regular | 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.
+ | None | The parameter shall be a real number >= 1. |
-
distortionShift | lens | Regular | Shift in x and y of the centre of distortion of the virtual camera
- | millimeter | X and Y centre shift shall each be real numbers. |
+
distortionOverscanMax | lens | Static | 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.
+ | None | The parameter shall be a real number >= 1. |
+
+
distortion | lens | Regular | 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).
+ | None | The list shall contain at least one Distortion object, and in each
+ object the radial and tangential coefficients shall each be real numbers.
+ |
encoders | lens | Regular |
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.
| millimeter | The parameter shall be a non-negative real number. |
-
perspectiveShift | lens | Regular | Shift in x and y of the centre of perspective projection of the
+ |
projectionOffset | lens | Regular | Offset in x and y of the centre of perspective projection of the
virtual camera
- | millimeter | X and Y perspective shift shall each be real numbers. |
+
millimeter | X and Y projection offset shall each be real numbers. |
rawEncoders | lens | Regular |
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.
| None | The parameter shall be a non-negative real number. |
-
undistortion | lens | Regular | 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).
- | None | The radial and tangential coefficients shall each be real numbers. |
+
undistortionOverscan | lens | Regular | 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.
+ | None | The parameter shall be a real number >= 1. |
+
+
undistortionOverscanMax | lens | Static | 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.
+ | None | The parameter shall be a real number >= 1. |
protocol | None | Regular | Name 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.
| None | The parameter shall be a integer in the range (0..4,294,967,295].
- |
-
-
frameRate | timing | Regular | 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.
- | None | 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 | timing | Regular | Enumerated 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)
| second | 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 | timing | Regular | 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.
+ | None | 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 | timing | Regular | 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)
| second | 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 | timing | Regular | Integer incrementing with each sample. | None | The parameter shall be a integer in the range (0..4,294,967,295].
@@ -774,8 +809,9 @@ Description of all fields
|
synchronization | timing | Regular | 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
@@ -805,8 +841,9 @@ Description of all fields
|
timecode | timing | 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.
| None | The 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
transforms | None | Regular | 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
@@ -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"
}
}
|