diff --git a/README.md b/README.md
index a0d5997..41a025d 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,7 @@ You can read the current rendered specifications by opening the [autogenerated w
- Sub-frame latency
* Each packet carries an exact range and offset
- Concatenation of files is supported
+ - 3D stereo support
- Multicast support
- Native QUIC support
- Extensive metadata
diff --git a/draft-avtransport-spec.bs b/draft-avtransport-spec.bs
index e772df1..21510c1 100644
--- a/draft-avtransport-spec.bs
+++ b/draft-avtransport-spec.bs
@@ -227,6 +227,10 @@ Below is a table of how they're allocated:
''0x0040''
[[#video-orientation-packets]]
+
+
''0x0041''
+
[[#stereo-video-packets]]
+
''0x0050''
[[#stream-duration-packets]]
@@ -2940,6 +2944,155 @@ including cropping via the [=cropped_width=]/[=cropped_height=] fields in
[[#video-information-packets]] packets.
+## Stereo video ## {#stereo-video-packets}
+
+A stereoscopic video file consists in multiple views embedded in a single
+frame, usually describing two views of a scene.
+
+A standardized way to transmit stereoscopic video information is as follows:
+
+
+
+
+
Type
+
Name
+
Data
+
Description
+
+
+
b(16)
+
stereo_video_descriptor
+
''0x0040''
+
Indicates this is a stereo video information packet.
+
+
+
b(16)
+
[=stream_id=]
+
+
The stream ID for which to associate the stereo information with.
+
+
+
u(32)
+
[=global_seq=]
+
+
Monotonically incrementing per-packet global sequence number.
+
+
+
i(64)
+
[=pts=]
+
+
Timestamp (in stream [=timebase=] units) at which this stereo packet has to be applied at.
+
+
+
u(8)
+
flags
+
enum {{StereoVideoFlags}}
+
Additional flags.
+
+
+
u(8)
+
video
+
enum {{StereoVideoView}}
+
Determines which views are packed.
+
+
+
u(8)
+
primary_eye
+
enum {{StereoVideoPrimaryEye}}
+
Determines which eye is the primary eye when rendering in 2D.
+
+
+
u(32)
+
baseline
+
+
The distance between the centres of the lenses of the camera system, in micrometers.
+
+
+
b(40)
+
[=padding=]
+
+
Padding, reserved for future use. MUST be 0x0.
+
+
+
b(64)
+
[=ldpc_288_224=]
+
[=LDPC(288, 224)=]
+
64-bits of LDPC parity data to correct the previous 224 bits of the packet.
+
+
+
R(64)
+
horizontal_disparity_adjustment
+
+
Relative shift of the left and right images, which changes the zero parallax plane. Range is -1.0 to 1.0.
+
+
+
R(64)
+
horizontal_field_of_view
+
+
Horizontal field of view, in degrees.
+
+
+
b(96)
+
[=padding=]
+
+
Padding, reserved for future use. MUST be 0x0.
+
+
+
b(64)
+
[=ldpc_288_224=]
+
[=LDPC(288, 224)=]
+
64-bits of LDPC parity data to correct the previous 224 bits of the packet.
+
+
+
+
+The effects of stereo video packets MUST persist from the [=pts=] value given,
+until a new stereo video packet is sent, or the stream is reinitialized.
+
+
+## Stereo Video Type Enumeration (enum StereoVideoType) ## {#enum-StereoVideoType}
+
+By convention, the first view is the left eye's view, and the second view is the right eye's view.
+The two are swapped if [=STEREO_VIDEO_FLAG_INVERTED=] is set.
+
+
+ : STEREO_VIDEO_TYPE_2D = 0x0
+ :: Video is not stereoscopic. Only a single view exists. The metadata has to be ignored.
+ : STEREO_VIDEO_TYPE_SIDE_BY_SIDE = 0x1
+ :: Views are next to each other, horizontally.
+ : STEREO_VIDEO_TYPE_TOP_AND_BOTTOM = 0x2
+ :: Views are on top of each other.
+ : STEREO_VIDEO_TYPE_INDIVIDUAL = 0x3
+ :: Views are separate, one in each frame. Indicated by the [=field_id=], if set to 1, then view is the [=primary-eye=].
+ : STEREO_VIDEO_TYPE_CHECKERBOARD = 0x4
+ :: Pixels from each view are interleaved in a checkerboard structure.
+ : STEREO_VIDEO_TYPE_SIDE_BY_SIDE_QUINCUNX = 0x5
+ :: Views are next to each other, horizontally. But are spatially sampled using a Quincunx pattern.
+ : STEREO_VIDEO_TYPE_LINES = 0x6
+ :: Views are interleaved on a line-basis, as if interlaced.
+ : STEREO_VIDEO_TYPE_COLUMNS = 0x7
+ :: Views are interleaved on a column basis.
+
+ : STEREO_VIDEO_PRIMARY_EYE_NONE = 0x0
+ :: Neither eye is primary.
+ : STEREO_VIDEO_PRIMARY_EYE_LEFT = 0x1
+ :: The left eye is the primary.
+ : STEREO_VIDEO_PRIMARY_EYE_RIGHT = 0x2
+ :: The right eye is the primary.
+
+
+
## User data ## {#user-data-packets}
The user-specific data packet is laid out as follows: