Byte / Bit # | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
HB0 | Packet Type = 0x81 | |||||||
HB1 | Version = 1 | |||||||
HB2 | 0 | 0 | 0 | Length = 27 | ||||
PB0 | Checksum | |||||||
PB1 | IEEE OUI Third Octet = 0x49 | |||||||
PB2 | IEEE OUI Second Octet = 0x31 | |||||||
PB3 | IEEE OUI First Octet = 0xF4 | |||||||
PB4 | Vendor Type = 0x02 (FX-Direct) | |||||||
PB5 | I 1 | R 2 | M 3 | AR 4 | 0 | 0 | 0 | |
PB6 | DE Offset 5 Top (LSB) | |||||||
PB7 | DE Offset 5 Top (MSB) | |||||||
PB8 | DE Offset 5 Bottom (LSB) | |||||||
PB9 | DE Offset 5 Bottom (MSB) | |||||||
PB10 | DE Offset 6 Left (LSB) | |||||||
PB11 | DE Offset 6 Left (MSB) | |||||||
PB12 | DE Offset 6 Right (LSB) | |||||||
PB13 | DE Offset 6 Right (MSB) | |||||||
PB14 | Prescale 7 Horizontal | |||||||
PB14 | Prescale 7 Vertical | |||||||
PB15 | AR Numerator 8 (LSB) | |||||||
PB16 | AR Numerator 8 (MSB) | |||||||
PB17 | AR Denominator 8 (LSB) | |||||||
PB18 | AR Denominator 8 (MSB) | |||||||
PB19 ... PB27 |
0x00 (reserved) |
Annotations | |||||||||
1 I |
|
||||||||
2 R |
|
||||||||
3 M |
|
||||||||
4 AR |
|
||||||||
5 DE Offset (vertical) | Raw line count (no pixel repetition applied) relative to the transport frame vertical DE start. |
||||||||
6 DE Offset (horizontal) | Raw pixel count (no pixel repetition applied) relative to the transport frame horizontal DE start. |
||||||||
7 Prescale | Prescale factor to apply (horizontal / vertical respectively) |
||||||||
8 Aspect Ratio | Source aspect ratio (numerator / denominator) value to apply according to Aspect Ratio Mode 4 (horizontal / vertical respectively) In case AR mode is not set, the aspect ratio to apply is auto-mapped from input width and height |
FX-Direct is a protocol which embeds lower resolution video formats in a higher resolution container.The primary use case is sending 240p or 480i video over HDMI in a more compatible 1080p container. Interlaced video information is embedded as pixel colors on specific video lines, and all other metadata is sent over a custom Pixel FX HDMI infoframe: https://docs.pixelfx.co/VSIF-metadata-FX-direct.html
Progressive video (240p): When using FX-Direct for 240p, the encoding device needs to be set to 1080p and nearest-neighbor scale the 240p video to the max integer size (4x) that fits in the 1080p window. The encoding device may use triple buffered video modes, however frame locked mode is preferable. No control pixels are required, only HDMI infoframe data.
Interlaced video (480i): When using FX-Direct for 480i, the encoding device must bypass its own deinterlacer and pass the video fields directly to the output frames with a 1:1 field to frame ratio, for example 60 fields per second become 60 frames per second in the 1080p frame. Triple buffering must be disabled on the encoding device to maintain proper field sequencing.
The encoding device needs to be set to 1080p and nearest-neighbor scale the 480i field to the max integer size that fits in the 1080p window, this scale factor can be different for vertical and horizontal axes. For example a 640x240 field would have a 3x horizontal scale and a 4x vertical scale. Finally, the fx_direct_encoder below is required to embed the even-odd field info in the output video frame.