3.4 Pixel Formats¶
BMDPixelFormat
enumerates the video pixel formats supported
bmdFormatUnspecified
This represents any pixel format for the purpose of checking display mode support with the
IDeckLinkInput::DoesSupportVideoMode()
andIDeckLinkOutput::DoesSupportVideoMode()
methods.
bmdFormat8BitYUV - ‘2vuy’ 4:2:2 raw
Four 8-bit unsigned components (CCIR 601) are packed into one 32-bit little-endian word.
int rowBytes = width * 16 / 8 int frameSize = rowBytes * heightIn this format, two pixels fit into 32 bits or 4 bytes, so one pixel fits into 16 bits or 2 bytes.
For the row bytes calculation, the image width is multiplied by the number of bytes per pixel.
For the frame size calculation, the row bytes are simply multiplied by the number of rows in the frame.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
Y’1
Cr0
Y’0
Cb0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
bmdFormat10BitYUV - ‘v210’ 4:2:2 raw
Twelve 10-bit unsigned components are packed into four 32-bit little-endian words.
int rowBytes = (width + 47) / 48) * 128 int frameSize = rowBytes * heightIn this format, each line of video must be aligned on a 128 byte boundary. Six pixels fit into 16 bytes so 48 pixels fit in 128 bytes.
For the row bytes calculation the image width is rounded to the nearest 48 pixel boundary and multiplied by 128.
For the frame size calculation the row bytes are simply multiplied by the number of rows in the frame.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
X
X
Cr0
Y’0
Cb0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
Word 1
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
X
X
Y’2
Cb2
Y’1
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
Word 2
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
X
X
Cb4
Y’3
Cr2
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
Word 3
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
X
X
Y’5
Cr4
Y’4
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
bmdFormat10BitYUVA - ‘Ay10’ 4:2:2 raw
Six 10-bit unsigned components are packed into two 32-bit big-endian words. The alpha channel is valid and full range.
int rowBytes = ((width + 63) / 64) * 256 int frameSize = rowBytes * heightIn this format each line of video must be aligned to a 256 byte boundary. One pixel fits into 4 bytes so 64 pixels fit into 256 bytes.
For the row bytes calculation, the image width is rounded to the nearest 64 pixel boundary and multiplied by 256.
For the frame size calculation, the row bytes are simply multiplied by the number of rows in the frame.
On all connectors using YCbCr, or HDMI, playback without keying enabled will drop the alpha and capture will set the alpha to the peak nominal value.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
Y’0
Cb0
Y’0
A0
Cb0
X
X
A0
7
6
5
4
3
2
1
0
5
4
3
2
1
0
9
8
3
2
1
0
9
8
7
6
9
8
7
6
5
4
Word 1
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
Y’1
Cr0
Y’1
A1
Cr0
X
X
A1
7
6
5
4
3
2
1
0
5
4
3
2
1
0
9
8
3
2
1
0
9
8
7
6
9
8
7
6
5
4
bmdFormat8BitARGB - ARGB 4:4:4:4 raw
Four 8-bit unsigned components are packed into one 32-bit little-endian word. Alpha channel is valid.
int rowBytes = width * 32 / 8 int frameSize = rowBytes * heightIn this format, each pixel fits into 32 bits or 4 bytes.
For the row bytes calculation the image width is multiplied by the number of bytes per pixel.
For the frame size calculation, the row bytes are simply multiplied by the number of rows in the frame.
On all connectors using YCbCr, or HDMI, playback without keying enabled will drop the alpha and capture will set the alpha to the peak nominal value.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
B
G
R
A
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
bmdFormat8BitBGRA - ‘BGRA’ 4:4:4:4 raw
Four 8-bit unsigned components are packed into one 32-bit little-endian word. The alpha channel is valid.
int rowBytes = width * 32 / 8 int frameSize = rowBytes * heightIn this format, each pixel fits into 32 bits or 4 bytes.
For the row bytes calculation, the image width is multiplied by the number of bytes per pixel.
For the frame size calculation, the row bytes are simply multiplied by the number of rows in the frame.
On all connectors using YCbCr, or HDMI, playback without keying enabled will drop the alpha and capture will set the alpha to the peak nominal value.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
A
R
G
B
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
7
6
5
4
3
2
1
0
bmdFormat10BitRGB - ‘r210’ 4:4:4 raw
Three 10-bit unsigned components are packed into one 32-bit big-endian word.
int rowBytes = ((width + 63) / 64) * 256 int frameSize = rowBytes * heightIn this format each line of video must be aligned a 256 byte boundary. One pixel fits into 4 bytes so 64 pixels fit into 256 bytes.
For the row bytes calculation, the image width is rounded to the nearest 64 pixel boundary and multiplied by 256.
For the frame size calculation, the row bytes are simply multiplied by the number of rows in the frame.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
B
G
B
R
G
X
X
R
7
6
5
4
3
2
1
0
5
4
3
2
1
0
9
8
3
2
1
0
9
8
7
6
9
8
7
6
5
4
bmdFormat12BitRGB - ‘R12B’ 4:4:4 raw
Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component.
This 12-bit pixel format is compatible with SMPTE 268M Digital Moving-Picture Exchange version 1, Annex C, Method C4 packing.
int rowBytes = (width * 36) / 8 int frameSize = rowBytes * heightIn this format, 8 pixels fit into 36 bytes.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
R0
G0
R0
G0
B0
7
6
5
4
3
2
1
0
3
2
1
0
11
10
9
8
11
10
9
8
7
6
5
4
7
6
5
4
3
2
1
0
Word 1
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
R1
B0
R1
G1
B1
G1
3
2
1
0
11
10
9
8
11
10
9
8
7
6
5
4
7
6
5
4
3
2
1
0
3
2
1
0
11
10
9
8
Word 2
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
B1
R2
G2
R2
G2
11
10
9
8
7
6
5
4
7
6
5
4
3
2
1
0
3
2
1
0
11
10
9
8
11
10
9
8
7
6
5
4
Word 3
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
B2
R3
B2
R3
G3
7
6
5
4
3
2
1
0
3
2
1
0
11
10
9
8
11
10
9
8
7
6
5
4
7
6
5
4
3
2
1
0
Word 4
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
B3
G3
B3
R4
G4
R4
3
2
1
0
11
10
9
8
11
10
9
8
7
6
5
4
7
6
5
4
3
2
1
0
3
2
1
0
11
10
9
8
Word 5
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
G4
B4
R5
B4
R5
11
10
9
8
7
6
5
4
7
6
5
4
3
2
1
0
3
2
1
0
11
10
9
8
11
10
9
8
7
6
5
4
Word 6
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
G5
B5
G5
B5
R6
7
6
5
4
3
2
1
0
3
2
1
0
11
10
9
8
11
10
9
8
7
6
5
4
7
6
5
4
3
2
1
0
Word 7
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
G6
R6
G6
B6
R7
B6
3
2
1
0
11
10
9
8
11
10
9
8
7
6
5
4
7
6
5
4
3
2
1
0
3
2
1
0
11
10
9
8
Word 8
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
R7
G7
B7
G7
B7
11
10
9
8
7
6
5
4
7
6
5
4
3
2
1
0
3
2
1
0
11
10
9
8
11
10
9
8
7
6
5
4
bmdFormat12BitRGBLE - ‘R12L’ 4:4:4 raw
Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component.
This 12-bit pixel format is compatible with SMPTE 268M Digital Moving-Picture Exchange version 1, Annex C, Method C4 packing.
int rowBytes = (width * 36) / 8 int frameSize = rowBytes * heightIn this format, 8 pixels fit into 36 bytes.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
B0
G0
R0
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
Word 1
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
B1
G1
R1
B0
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
Word 2
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
G2
R2
B1
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
Word 3
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
G3
R3
B2
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
Word 4
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
G4
R4
B3
G3
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
Word 5
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
R5
B4
G4
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
Word 6
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
R6
B5
G5
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
Word 7
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
R7
B6
G6
R6
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
Word 8
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
B7
G7
R7
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
3
2
1
0
11
10
9
8
7
6
5
4
bmdFormat10BitRGBXLE - ‘R10l’ 4:4:4 raw
Three 10-bit unsigned components are packed into one 32-bit little-endian word.
int rowBytes = ((width + 63) / 64) * 256 int frameSize = rowBytes * heightIn this format each line of video must be aligned a 256 byte boundary. One pixel fits into 4 bytes so 64 pixels fit into 256 bytes.
For the row bytes calculation, the image width is rounded to the nearest 64 pixel boundary and multiplied by 256.
For the frame size calculation, the row bytes are simply multiplied by the number of rows in the frame.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
R
G
B
X
X
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
bmdFormat10BitRGBX - ‘R10b’ 4:4:4 raw
Three 10-bit unsigned components are packed into one 32-bit big-endian word.
int rowBytes = ((width + 63) / 64) * 256 int frameSize = rowBytes * heightIn this format each line of video must be aligned a 256 byte boundary. One pixel fits into 4 bytes so 64 pixels fit into 256 bytes.
For the row bytes calculation, the image width is rounded to the nearest 64 pixel boundary and multiplied by 256.
For the frame size calculation, the row bytes are simply multiplied by the number of rows in the frame.
Word 0
Decreasing Address Order
Byte 3
Byte 2
Byte 1
Byte 0
B
X
X
G
B
R
G
R
5
4
3
2
1
0
3
2
1
0
9
8
7
6
1
0
9
8
7
6
5
4
9
8
7
6
5
4
3
2
bmdFormatH265
This pixel format represents compressed H.265 encoded video data.
bmdFormatDNxHR
This pixel format represents compressed DNxHR encoded video data.