Intel VPL transcoder: supported hardware¶
Which Intel hardware is suitable for hardware transcoding, which codecs are available on the different graphics generations, and how to make sure that the hardware has been recognized. Installation of the transcoder packages is described in Transcoders, configuration of the transcoder itself — in Transcoders.
In short: integrated or discrete Intel graphics of Gen9 level or above is required. The transcoder detects which Intel runtime is present on the machine and attaches to it; one and the same tcivpl executable works both on new and on old hardware.
Two Intel runtimes¶
Runtime |
Hardware |
|---|---|
oneVPL (VPL v2) |
Gen12 and newer: Tiger Lake, Rocket Lake, Alder Lake (including Alder Lake-N: N100, N305), Raptor Lake, Arc |
Media SDK v1 (MSDK v1) |
Gen9–Gen11: Skylake, Kaby Lake, Coffee Lake, Comet Lake, Ice Lake |
The runtime is selected automatically and requires no separate configuration: the VPL dispatcher lists the implementations found for the selected /dev/dri/renderD<N> device, and the transcoder takes the first one usable for hardware operation. The transcoder has no dedicated “prefer VPL v2” rule — for Gen9–Gen11 the new runtime simply does not exist, so Media SDK v1 is always what turns up there, while on Gen12 and newer usually only oneVPL is installed.
Take this into account when selecting hardware: the transcoder installation procedures (Transcoders) install the VPL v2 runtime only, that is, they target Gen12 and newer. For Gen9–Gen11 the Media SDK v1 runtime is installed separately, and in recent distributions it may be absent (see below).
Codecs¶
Runtime |
Decoding |
Encoding |
|---|---|---|
VPL v2 (Gen12+) |
H.264, HEVC, MPEG-2 |
H.264, HEVC, MPEG-2 |
MSDK v1 (Gen9–Gen11) |
H.264, MPEG-2 |
H.264, MPEG-2 |
What is not available:
HEVC is not supported on MSDK v1 — neither decoding nor encoding: in Media SDK v1 HEVC is provided through a plugin interface, which the oneVPL dispatcher does not expose. HEVC requires a Gen12 or newer machine. On an attempt the transcoder writes an explicit error —
HEVC decode is not supported on the Intel Media SDK v1 runtimeorHEVC encode is not supported on the Intel Media SDK v1 runtime.AV1, VP9 and VC-1 are not supported by either runtime — they are not needed in broadcasting.
The three codecs listed are the maximum the transcoder is able to work with. On VPL v2 it imposes no limitations of its own, so the actual codec set of a particular adapter is determined by the runtime; what is available on the machine is shown by tcivpl --hw-list (see below). The general, backend-independent codec matrix of the transcoder is given in Backends and codecs.
Cut-down Atom hardware: not supported¶
Platforms based on Atom cores prior to Gen12 — Apollo Lake, Gemini Lake, Elkhart Lake, Jasper Lake (Celeron and Pentium of the J and N series: J4125, J6412, N5105 and similar) — are not suitable for transcoding.
Their media engine is cut down: there is no full hardware encoding, and MPEG-2 encoding is absent altogether. Decoding on such chips may work, but there is nothing to transcode with — use the software transcoder (the pstreamer-tcsw package) or different hardware. The transcoder does not reject such hardware in advance: it starts up and then terminates with an error at encoder initialization.
An important exception: Alder Lake-N (N100, N305 and similar) are Atom cores as well, but their graphics is a full Gen12, and they are supported.
Separately: old Atom processors have no AVX, while some of the prebuilt Intel packages are built with AVX. In that case the transcoder process crashes with Illegal instruction — the instructions are executed by the Intel driver or runtime library loaded into the process, not by the code of the transcoder itself.
What must be installed¶
Component |
RHEL / AlmaLinux / Rocky |
Debian / Ubuntu |
|---|---|---|
VA-API driver iHD (mandatory) |
|
|
VPL v2 runtime (Gen12+) |
|
|
MSDK v1 runtime (Gen9–Gen11) |
|
|
VA-API, DRM |
|
|
Exactly one runtime is required — the one that matches the hardware. The iHD driver is mandatory in any case: on the old i965 the VA-API initialization succeeds, but the decoder does not come up, and there is no separate message about it — the driver is visible only in the log at stream start. On Debian and Ubuntu take specifically the intel-media-va-driver-non-free variant: in intel-media-va-driver some of the codecs are stripped out.
The package names depend on where they are installed from. The Debian names given are the ones from the Intel Graphics repository, which is added by the installation procedure (Ubuntu 22/24); in Ubuntu’s own repository the same VPL v2 runtime is called libmfx-gen1.2, and the versions there are noticeably older.
The Intel VPL dispatcher (libvpl2 in the distributions) ships as part of the transcoder package: it is installed as /opt/pss/lib/libvpl.so.2, and the path is registered in the /etc/ld.so.conf.d/ directory. The dispatcher, however, only selects the runtime — if there is no suitable runtime on the machine, there is nothing to transcode with.
The MSDK v1 runtime has been removed from the recent distributions: intel-mediasdk is present in EPEL 9, but not in EPEL 10; libmfx1 is present in Debian 12 and Ubuntu 24.04, but it is no longer in the following releases. On such systems the runtime for Gen9–Gen11 hardware has to be installed separately.
The transcoder package pulls in neither the driver nor the runtime, so a successful installation by itself does not mean that hardware transcoding will work — this is verified separately. Note also that the service user must have access to the /dev/dri devices (Ubuntu 22/24).
How to check¶
/usr/local/bin/tcivpl --hw-list
The command prints XML with the list of implementations found by the VPL dispatcher — as a single line, without line breaks. For each one it gives the runtime name (device-name), the API version, the decoder and encoder codec lists, the adapter, and the flag of suitability for hardware operation. An example of the output on Gen9–Gen11 (shown with line breaks for readability):
<vpl mfx-version="2.15">
<device id="0" device-name="mfxhw64" api-version="1.35" legacy="1"
dec-codecs="h264,mpeg2" enc-codecs="h264,mpeg2"
vendor-id="8086" device-id="4555" drm-render="128"
supported="1"/>
</vpl>
How to read the output:
legacy="1"— the implementation reports an API version below 2.0, that is, it is the old Media SDK v1 runtime; without this flag it is oneVPL 2.x. This flag andapi-versionare what to rely on first of all: thedevice-namevalue comes from the dispatcher as is (in practice —mfxhw64for Media SDK v1 andmfx-genfor oneVPL).supported="1"— the implementation is usable for hardware operation. An entry without this flag is equivalent to its absence.For Media SDK v1 the codec list is always
h264,mpeg2— this is the set supported by the transcoder on that runtime, not the result of querying the hardware. For oneVPL the lists are taken from what the runtime reports.mfx-version— the API version of the headers the transcoder was built with, not the version of the installed runtime.
An empty list (a <vpl> element without a single <device>) means that there will be no hardware transcoding on this machine: the runtime or the driver is not installed, the GPU is not an Intel one, or there is no access to /dev/dri. The No vpl libraries found message is a separate case: the dispatcher library itself was not found.
The command only lists the implementations and selects nothing. Which of them will be used is determined at stream start — by the device specified in the transcoder settings. At stream start the transcoder writes two lines to the log: the selected runtime with its API version, and the VA-API version together with the driver name. The second line shows that it is indeed the iHD driver that is working, and not i965.
The detected transcoding backends, their versions and the devices found are also shown on the “About” screen (About), and the GPU load — on the “System Monitor” screen (System Monitor).