Note: Before vaapi version(1.9.0), media driver only allow to create 16bit surface for 12bit bitstream decoding, padding bits will be filled with 0 by hardware. After 1.9.0 vaapi version, media driver is supported to create both 12bit and 16bit surface for 12bit bitstream decoding.
Codec | Type | BMG | LNL | MTLx | DG2/ATSM | DG1/SG1 | TGLx | ICL | KBLx | BXTx | SKL | BDW |
---|---|---|---|---|---|---|---|---|---|---|---|---|
AVC | Output | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 |
Max Res. | 4k | 4k | 4k | 4k | 4k | 4k | 4k | 4k | 4k | 4k | 4k | |
MPEG-2 | Output | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 |
Max Res. | 2k | 2k | 2k | 2k | 2k | 2k | 2k | 2k | 2k | 2k | 2k | |
VC-1 | Output | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | ||||
Max Res. | 4k | 4k | 4k | 4k | 4k | 4k | 4k | |||||
VP8 | Output | NV12 | NV12 | NV12 | NV12* | NV12 | NV12 | NV12 | NV12 | NV12 | ||
Max Res. | 4k | 4k | 4k | 4k* | 4k | 4k | 4k | 4k | 4k | |||
HEVC 8bit | Output | NV12/YUY2/AYUV | NV12/YUY2/AYUV | NV12/YUY2/AYUV | NV12/YUY2/AYUV | NV12/YUY2/AYUV | NV12/YUY2/AYUV | NV12/YUY2/AYUV | NV12 | NV12 | NV12 | |
Max Res. | 16k | 16k | 16k | 16k | 8k | 8k | 8k | 8k | 8k | 8k | ||
HEVC 10bit | Output | P010/Y210/Y410 | P010/Y210/Y410 | P010/Y210/Y410 | P010/Y210/Y410 | P010/Y210/Y410 | P010/Y210/Y410 | P010/Y210/Y410 | P010 | P010 | ||
Max Res. | 16k | 16k | 16k | 16k | 8k | 8k | 8k | 8k | 8k | |||
HEVC 12bit | Output** | P016/Y216/Y416 | P016/Y216/Y416 | P016/Y216/Y416 | P016/Y216/Y416 | P016/Y216/Y416 | P016/Y216/Y416 | |||||
Max Res. | 16k | 16k | 16k | 16k | 8k | 8k | ||||||
VP9 8bit | Output | NV12/AYUV | NV12/AYUV | NV12/AYUV | NV12/AYUV | NV12/AYUV | NV12/AYUV | NV12/AYUV | NV12 | NV12 | ||
Max Res. | 16k | 16k | 16k | 16k | 8k | 8k | 8k | 8k | 4k | |||
VP9 10bit | Output | P010/Y410 | P010/Y410 | P010/Y410 | P010/Y410 | P010/Y410 | P010/Y410 | P010/Y410 | P010 | |||
Max Res. | 16k | 16k | 16k | 16k | 8k | 8k | 8k | 8k | ||||
VP9 12bit | Output** | P016/Y416 | P016/Y416 | P016/Y416 | P016/Y416 | P016/Y416 | P016/Y416 | |||||
Max Res. | 16k | 16k | 16k | 16k | 8k | 8k | ||||||
AV1 8bit | Output | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | |||||
Max Res. | 16k | 16k | 16k | 16k | 8k | 8k | ||||||
AV1 10bit | Output | P010 | P010 | P010 | P010 | P010 | P010 | |||||
Max Res. | 16k | 16k | 16k | 16k | 8k | 8k | ||||||
VVC 8bit | Output | NV12 | ||||||||||
Max Res. | 16k | |||||||||||
VVC 10bit | Output | P010 | ||||||||||
Max Res. | 16k |
- * VP8 is only supported on TGL platform
- ** HVEC/VP9 12bit use P016/Y216/Y416 with the least significant 4 bits are set to zero
Input Format | Output Format | Max resolution | Supported Platforms |
---|---|---|---|
4:2:0, 8-bit | IMC3 | 16K | BDW+ |
4:2:2, 8-bit | 422H | 16K | BDW+ |
4:2:2, 8-bit | 422V | 16K | BDW+ |
4:1:1, 8-bit | 411P | 16K | BDW+ |
4:4:4, 8-bit | 444P | 16K | BDW+ |
4:4:4, 8-bit | RGBP / BGRP | 16K | BDW+ |
4:0:0, 8-bit | 400P | 16K | BDW+ |
420 / 422H interleaved single scan |
YUY2 | 16K | BDW+ |
420 / 422H interleaved single scan |
UYVY | 16K | BDW+ |
420 / 422H / 422V interleaved single scan |
NV12 | 16K | BDW+ |
400/420/422H/444/RGB/BGR interleaved single scan |
A8R8G8B8 | 16K | SKL+ |
Codec | Type | BMG | LNL | MTLx | DG2/ATSM | DG1/SG1 | TGLx | ICL | KBLx | BXTx | SKL | BDW |
---|---|---|---|---|---|---|---|---|---|---|---|---|
AVC | Input | *More | *More | *More | *More | *More | *More | *More | *More | NV12 | NV12 | |
Max Res. | 4k | 4k | 4k | 4k | 4k | 4k | 4k | 4k | 4k | 4k | ||
JPEG | Input/Output | **Note | **Note | **Note | **Note | **Note | **Note | **Note | **Note | **Note | **Note | |
Max Res. | 16k | 16k | 16k | 16k | 16k | 16k | 16k | 16k | 16k | 16k | ||
HEVC 8bit | Input | NV12/YUY2/AYUV/RGB | NV12/YUY2/AYUV/RGB | NV12/YUY2/AYUV/RGB | NV12/YUY2/AYUV/RGB | NV12/YUY2/AYUV/RGB | NV12/YUY2/AYUV/RGB | NV12/AYUV | ||||
Max Res. | 16k*** | 16k*** | 16k*** | 16k*** | 8k | 8k | 8k | |||||
HEVC 10bit | Input | P010/Y210/Y410/RGB | P010/Y210/Y410/RGB | P010/Y210/Y410/RGB | P010/Y210/Y410/RGB | P010/Y210/Y410/RGB | P010/Y210/Y410/RGB | P010/Y410 | ||||
Max Res. | 16k*** | 16k*** | 16k*** | 16k*** | 8k | 8k | 8k | |||||
VP9 8bit | Input | NV12/AYUV | NV12/AYUV | NV12/AYUV | NV12/AYUV | NV12/AYUV | ||||||
Max Res. | 8k | 8k | 8k | 8k | 8k | |||||||
VP9 10bit | Input | P010/Y410 | P010/Y410 | P010/Y410 | P010/Y410 | P010/Y410 | ||||||
Max Res. | 8k | 8k | 8k | 8k | 8k | |||||||
AV1 8bit | Input | NV12 | NV12 | NV12 | NV12 | |||||||
Max Res. | 8k | 8k | 8k | 8k | ||||||||
AV1 10bit | Input | P010 | P010 | P010 | P010 | |||||||
Max Res. | 8k | 8k | 8k | 8k |
- *More: KBL/CFL/ICL/TGL AVC encoding supported input formats: NV12/YUY2/YUYV/YVYU/UYVY/AYUV/ARGB
- **Note: JPEG encoding supports input format NV12/YUY2/UYVY/ABGR/Y8 and output format YUV400/YUV420/YUV422H_2Y/YUV444/RGB24.
- ***: 16k=16384x12288
Codec | Type | DG1/SG1 | TGLx | ICL | KBLx | BXTx | SKL | BDW |
---|---|---|---|---|---|---|---|---|
AVC | Input | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 |
Max Res. | 4k | 4k | 4k | 4k | 4k | 4k | 4k | |
MPEG2 | Input | NV12 | NV12 | NV12 | NV12 | NV12 | NV12 | |
Max Res. | 2k | 2k | 2k | 2k | 2k | 2k | ||
VP8 | Input | NV12 | NV12 | NV12 | NV12 | |||
Max Res. | 4k | 4k | 4k | 4k | ||||
HEVC 8bit | Input | NV12/YUY2/AYUV | NV12/YUY2/AYUV | NV12/AYUV | NV12 | NV12 | NV12 | |
Max Res. | 8k | 8k | 8k | 4k | 4k | 4k | ||
HEVC 10bit | Input | P010/Y210/Y410 | P010/Y210/Y410 | P010/Y410 | ||||
Max Res. | 8k | 8k | 8k |
Platform | Format | NV12 | YV12 | I420 | P010 | YUY2 | UYVY | Y210 | AYUV | Y410 | P016* | Y216* | Y416* | ARGB/ABGR | A2R10G10B10/A2B10G10R10 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BDW | Input | Y | Y | Y | Y | Y | N | ||||||||
Output | Y | Y | Y | Y | Y | N | |||||||||
SKL/BXTx/KBLx | Input | Y | Y | Y | Y | Y | Y | N | |||||||
Output | Y | Y | Y | Y | Y | N | |||||||||
ICL | Input | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | |||
Output | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | |||||
JSL/EHL | Input | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | |||
Output | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | |||||
TGLx | Input | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
Output | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | ||
DG1/SG1 | Input | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
Output | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | ||
DG2/ATSM | Input | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
Output | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | ||
MTLx | Input | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
Output | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | ||
LNL | Input | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
Output | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | ||
BMG | Input | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N |
Output | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
- * For SFC path, there are NOT real 16bit, SFC precision is 12bit; For kernel path, we support real 16bit.
- TGL/DG1/SG1 capable of max resolution: 16K; ICL/JSL/EHL/SKL/BXT/KBL/BDW capable of max resolution: 4k.
- Composition path does not support conversion from BT2020 RGB to BT2020 YUV, BT2020->BT601/BT709, BT601/BT709 -> BT2020. So if some formats, RGB444 planar for example, are only supported by compositon path, make sure the color space isn't BT2020.
Video processing has various feature filters including Blending(or Composition), CSC(Color Space Conversion), De-Interlace, De-Noise, Luma Key, Mirroring, Procamp, Rotation, Scaling, Sharpening, STD/E, TCC, Color Fill, Chroma Sitting, HDR10 TM, 3DLUT. These features can be divided into VEBOX/SFC/EU 3 categories according to hardware units. Generally, VEBOX+SFC or VEBOX+EU feature combination is valid and HW execution sequence is usually VEBOX first, SFC/EU second.
- VEBOX: Chroma Sitting, De-Interlace, De-Noise, Procamp, STD/E, TCC, HDR10 TM, 3DLUT, CSC
- SFC: Chroma Sitting, CSC, Mirroring, Rotation, Scaling, Sharpening, Color Fill
- EU (Media Kernel or Shader): Blending, CSC, Rotation, Scaling, Color Fill
For media usage, there are a lot of interactive between CPU and GPU memory. To accelerate CPU<->GPU surface sharing performance, media copy is enabled to use GPU hardware engine or GPU kernel to copy the surface from/to CPU accessable location. It's supported from ATSM/Meteor Lake(MTL)+ platforms. You could get the detail API information from vaCopy.
Media Copy support most of formats like Nv12/p010/p016/ARGB/yuy2/y210/y216/AYUV/y410/ARGB10, and also popular resolution like 8K/4k/2k/1080p/720p/480p/320P, etc.
Besides, it's required that CPU start address need 4k alignment, you can refer: drm_i915_gem_userptr