Vendor Specific InfoFrame (VSIF) for FX-Direct

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
Interlaced mode (1 bit)
Off 0
On 1
2 R
Rotation (1 bit)
(Not implemented yet!)
Off 0
On 1
3 M
Menu State (1 bit)
Closed 0
Open 1
4 AR
Aspect Ratio Mode (2 bits)
Not set 0
DAR 1
PAR 2
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.