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: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDataDescription
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)flagsenum {{StereoVideoFlags}}Additional flags.
u(8)videoenum {{StereoVideoView}}Determines which views are packed.
u(8)primary_eyeenum {{StereoVideoPrimaryEye}}Determines which eye is the primary eye when rendering in 2D.
u(32)baselineThe 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_adjustmentRelative 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_viewHorizontal 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 Flags Enumeration (enum StereoVideoFlags) ## {#enum-StereoVideoFlags} + +
+ : STEREO_VIDEO_FLAG_INVERTED = 0x0 + :: Views must be swapped during presentation (left->right, right->left). +
+ +## Stereo Video Primary Eye Enumeration (enum StereoVideoPrimaryEye) ## {#enum-StereoVideoPrimaryEye} + +
+ : 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: