← Blog

Hardware H.264 Decoding on Fedora 43 and 44 — The Fresh-Install Recipe

Fedora ships codec-free out of the box. Here's the fix to get hardware-accelerated H.264 / H.265 decoding back on a fresh Fedora 43 or 44 install.

Fedora doesn’t ship proprietary codecs — that includes the H.264 / H.265 paths most browsers and video apps reach for first. On a fresh Fedora 43 or 44 install you’ll see Firefox falling back to software decode, ffmpeg refusing to handle MP4s, and vainfo listing only VP8/VP9/AV1.

The fix is three commands.

1. Enable RPM Fusion (free + nonfree)

sudo dnf install -y \
  https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
  https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

This adds the two repos that carry codec-enabled rebuilds of Mesa and FFmpeg (the freeworld packages).

2. Swap Mesa to the freeworld VA-API drivers

sudo dnf swap mesa-va-drivers mesa-va-drivers-freeworld

The stock mesa-va-drivers package has H.264 / H.265 / VC-1 stripped out at compile time. The freeworld build re-enables them. This is what unlocks VA-API acceleration on AMD GPUs and on Intel via the Mesa Gallium driver.

3. Replace ffmpeg-free with full ffmpeg

sudo dnf swap ffmpeg-free ffmpeg --allowerasing

ffmpeg-free is a Fedora-built FFmpeg without proprietary encoders/decoders. The RPM Fusion ffmpeg is the upstream build with everything compiled in. --allowerasing is needed because several packages depend on ffmpeg-free and DNF needs permission to swap them transitively.

4. (Intel only) Install the Intel media driver

sudo dnf install -y intel-media-driver

For 8th-gen Intel and newer (including Meteor Lake / Arc). The iHD driver is the modern path and supports H.264, HEVC, VP9, AV1 with hardware encode and decode. On older Intel (pre-Broadwell), use libva-intel-driver instead.

Verify

sudo dnf install -y libva-utils
vainfo

You should now see entries like:

VAProfileH264Main               : VAEntrypointVLD
VAProfileH264High               : VAEntrypointVLD
VAProfileHEVCMain               : VAEntrypointVLD
VAProfileHEVCMain10             : VAEntrypointVLD

If H264 and HEVC show up under VAEntrypointVLD, hardware decode is wired in correctly.

For a quick end-to-end test:

ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 \
       -i some_h264_file.mp4 -f null -

Check the log line for Using auto hwaccel type vaapi — that’s the hardware path being taken.

Browsers

Firefox and Chromium on Fedora pick up VAAPI automatically once the freeworld packages are in place — media.ffmpeg.vaapi.enabled has been true by default since Firefox 96, and Chromium on Fedora ships with the right flags baked in.

To confirm, open about:support in Firefox or chrome://gpu in Chromium and scroll to Codec Support Information. After the swap, H264 and HEVC flip to Supported under Hardware Decoding:

Firefox about:support codec table after the freeworld swap

Why Fedora ships it this way

Fedora’s policy keeps the base distro free of patent-encumbered code. The U.S. patent landscape around H.264 / H.265 doesn’t allow Fedora to distribute decoders directly. RPM Fusion is a third-party project hosted outside that jurisdiction that fills the gap — same packages, just from a different repo.

The four-command setup is essentially the price of having a clean, legally pristine base. Once it’s done, you don’t think about it again.

Tested on Fedora 43 and 44.

Written by Luke. I build custom software for businesses, made for the way your team works. Fixed price, delivered in days or weeks. I've been shipping software since 2008, co-founded Codahead, a software house in Kraków, and I've published C++ tutorials on YouTube for six years.

Recent posts

All
Vertex Descriptors in Apple Metal: Attributes, Offsets and Indexed Drawing Oct 2026Use MTLVertexDescriptor so your Swift and Metal vertex structs don't have to match, calculate attribute offsets the right way with MemoryLayout.offset(of:), and draw a square from four vertices with an index buffer. Your First Triangle in Apple Metal: Shaders and Vertex Buffers Oct 2026Draw a triangle with Apple Metal in a Swift playground: write the vertex and fragment shaders, build the render pipeline, send vertices with setVertexBytes or an MTLBuffer, and get the memory alignment right. Your Business Deserves a Native App Oct 2026Many of your team's apps are web pages in disguise, and you pay for it in waiting. When Shopify rebuilt its shopping app as native, it started opening twice as fast on Android. Here's what native could do for your business.