Hw transcode fails w/ HDR tone mapping

Server Version: Plex Media Server v1.43.0.10492-121068a07 (11 Feb 2026)
Installed on: TrueNAS 25.10.1 - Goldeye
Transcode Device: Intel N150 (igpu)
Logs: Plex Media Server.log (303.1 KB)
Logs: Transcoder Log (-loglevel=verbose).log (37.2 KB)

Player Version#: N/A (server side, reproduced w/ both Web and Android app players)


  • Source video is 4K DoVi/HDR10 (HEVC Main 10)
  • Hw transcoding works when HDR tone mapping is disabled in the settings
  • Based on the HDR to SDR Tone Mapping support article, ā€œIntel ā€˜Kaby Lake’ or newer processorā€ should support tone mapping. The N150 [intel spec] is relatively new (12th gen) and uses the Twin Lake-N architecture, so I don’t expect any old HW limitations to be at play.
  • The top-level error seems to be [Parsed_tonemap_opencl_3 @ 0x7fe42b597880] Failed to build program: -6, on line 1006 of the primary log.

I re-ran just the failing Plex Transcoder command from a shell with -loglevel verbose to provide as much information as possible including driver and library versions in a separate log (above).

I am open to making any invasive changes or collecting additional output that would be helpful in debugging.

I am running on a KabyLake.
I also have N100s here which work.

Check your configuration.

Plex container must be GID-matching the group which owns /dev/dri
-or-
Plex container must run root. I chose to run as root.

Hi @ChuckPa, thanks for the quick response.

I don’t believe it’s a driver/container permission issue. I am already running the Plex application as root*, and I am able to view the rendering processes from the TrueNAS host** if I disable HDR tone mapping in the Plex server settings.

Trying to better understand the context of the problem - do you happen to know if Parsed_tonemap_opencl_3 ... Failed to build program: -6 indicates a failure to build the GPU kernel in the userspace of the Plex container, or is it an error propagated from the DRM of the host?

If you don’t mind me asking, what kernel and drm driver versions do you have in the working configuration(s)? I’ll try to compare apples to apples if I can. Have you specifically been able to transcode 4K HDR content with tone mapping enabled?


* TrueNAS Plex app info showing /dev/dri read and write access:

** output from intel_gpu_top (in TrueNAS) showing that /dev/dri/card0 is being used for Plex transcoding:

The machine is running 25.10.1

Welcome to TrueNAS
Last login: Sat Jan 17 16:14:23 2026
truenas_admin@truenas[~]$ uname -a
Linux truenas 6.12.33-production+truenas #1 SMP PREEMPT_DYNAMIC Wed Dec 17 21:17:21 UTC 2025 x86_64 GNU/Linux
truenas_admin@truenas[~]$ 

One thing you can do.

  1. Get into the shell (inside the container itself)
  2. Get into the ā€œCodecsā€ directory
  3. Without deleting the .device_id file (your license), delete everything else.
  4. Restart PMS.
  5. Retest

What happens is that it will download the codecs fresh on demand again.

Intel_gpu_top gives me the following on the KabyLake
(The N100 is the AlderLake CPU … much better GPU

No luck. I confirmed it re-downloaded the codecs, but hit the same error during the transcode

Feb 16, 2026 00:22:18.987 [140460856716088] INFO - [Req#d1/Transcode] CodecManager: obtaining decoder 'hevc'
Feb 16, 2026 00:22:19.662 [140460859435832] INFO - [Req#d4/Transcode] CodecManager: obtaining decoder 'dca'
Feb 16, 2026 00:22:19.837 [140460859435832] INFO - [Req#d4/Transcode] CodecManager: obtaining encoder 'aac'
...
Feb 16, 2026 00:22:20.131 [140460859435832] ERROR - [Req#f0/Transcode/95wvblmi51uo09seshwzasy4/1ee61b03-d346-4540-914d-9e10e334343b] [Parsed_tonemap_opencl_3 @ 0x7fe11f9d3880] Failed to build program: -6.
Feb 16, 2026 00:22:20.132 [140460910062392] ERROR - [Req#f9/Transcode/95wvblmi51uo09seshwzasy4/1ee61b03-d346-4540-914d-9e10e334343b] [fc#0 @ 0x7fe120267bc0] Error while filtering: I/O error
Feb 16, 2026 00:22:20.132 [140460901624632] ERROR - [Req#fa/Transcode/95wvblmi51uo09seshwzasy4/1ee61b03-d346-4540-914d-9e10e334343b] Failed to inject frame into filter network: I/O error
Feb 16, 2026 00:22:20.132 [140460859435832] ERROR - [Req#fb/Transcode/95wvblmi51uo09seshwzasy4/1ee61b03-d346-4540-914d-9e10e334343b] Error while filtering: I/O error
Feb 16, 2026 00:22:20.133 [140460910062392] ERROR - [Req#fc/Transcode/95wvblmi51uo09seshwzasy4/1ee61b03-d346-4540-914d-9e10e334343b] [out#0/dash @ 0x7fe12011a940] Nothing was written into output file, because at least one of its streams received no packets.
Feb 16, 2026 00:22:20.147 [140460951530296] DEBUG - Jobs: '/usr/lib/plexmediaserver/Plex Transcoder' exit code for process 480 is 251 (failure)

Here’s a plausible theory I’ve come up with:

Now, this is an igpu so it shares the system memory. TrueNAS reports 27.9Gi free memory at the moment, and the Plex container resource limit is 30G. My test transcode only seems to raise the memory usage by ~400MB without tone mapping. However, some users report that the Intel implementation of OpenCL imposes artificial limits (e.g. 25%) and I’m not sure what the dynamic memory requirements are.

I’ll try to read up on the Intel OpenCl runtime used by PMS, which seems to be Drivers/icr-8cc9b1b5bc2e41d30c62ae32-linux-x86_64/libigdrcl.so. There may be some environment knobs to tweak, or information that can be extracted.

I can hardware transcode on the TrueNAS machine (64 GB of ram, KabyLake, – 100% vanilla install) and the N100 (8GB of RAM, AlderLake, – 100% vanilla install of Unraid.

It’s not a reasonable hypothesis to assert it’s anything with PMS runtimes (ICR, OpenCL, or otherwise) on the host because those same binaries work for countless other environments as well as instances on TrueNAS.

This has to be local configuration specific.

ToneMapping of 2160p requires 49,766,400 bytes of memory (raw input frame and output frame) . The pipeline is HW decode → ToneMap → HW encode

I would start removing container limits until it works.

Yeah, I get why you’re saying that. Unfortunately, the only limit I’m aware of is the 30GB overall app memory limit (which must be specified with some value in the 'Resources Configuration section) on a NAS system with 32GB total RAM. It’s an exceptionally bad time to go out and buy more DDR5 on the chance it’ll fix it :slight_smile:

As you point out, I don’t expect the tone mapping to have such a huge memory requirement. That’s why I’m looking at the ffmpeg flags and vaapi/opencl drivers for any limits imposed there.

Here’s my config.

By what you’re saying, mine should not work but it does

I don’t know truenas as much as I probably should.
I know it at the OS/systems level

I’ll run down my config:

  1. TZ = New York

  2. Claim Token (previously supplied)

  3. Plex Official Image

  4. 10.0.0.0/8 – defined but not used

  5. 172.16.0.0/12 – defined but not used

  6. 192.168.0.0/16 – defined and used for my LAN

  7. UID=568

  8. GID=568

  9. Network = HOST

  10. – my media monunts –

  11. 4 CPUs

  12. 16 GB of RAM (of the 64 GB the host has)

More data pointing to my install being whack, OpenCL doesn’t seem to work even with simple cases. I SCP’d a short 960x400 HEVC encoded demo video into an accessible directory and ran the encoder with the simplest pass through vaapi-opencl-vaapi I can think of.

-vf "[0:0]hwupload[0];[0]hwmap=derive_device=opencl[2];[2]avgblur_opencl=1[3];[3]hwmap=derive_device=vaapi:reverse=1[4];[4]hwupload[5]"

→ [Parsed_avgblur_opencl_2 @ 0x7fde3c994a80] Failed to build program: -6.


I appreciate the help so far @ChuckPa. Now it’s time to do my due diligence, including a fresh install, trying to validate OpenCL on the host, testing additional formats, etc. If I did something stupid in TrueNAS, I don’t want to keep waste your time with it.

It looks like an incomplete install was at fault here. I’m not sure how it got into this state, as I had upgraded it through multiple versions and I don’t have the historical logs.

I managed to create a second instance in which OpenCL-accelerated transcoding works. When I did a recursive diff the Drivers/ sub-directory in the PMS config, I found some extra extra icr OpenCL libraries (libocloc.so, libopencl-clang.so.14) compared to the non-working case. I had assumed the functionality was bundled into some other library, and didn’t realize stuff was missing because I hadn’t dug into a ā€œworkingā€ install until now.


If anybody is reading this thread in the future, this is what it’s supposed to look like in the current version :

admin@NAS$ ls -1 Drivers/icr-8cc9b1b5bc2e41d30c62ae32-linux-x86_64/
libiga64.so
libiga64.so.1
libiga64.so.1.0.1
libigc.so
libigc.so.1
libigc.so.1.0.1
libigdfcl.so
libigdfcl.so.1
libigdfcl.so.1.0.1
libigdrcl.so
libocloc.so
libopencl-clang.so.14
1 Like

Thank you, after migrating my Plex instance to a new server I had the exact same problem with hardware transcoding not working correctly.

There were also missing files in the Drivers folder, to fix it I just deleted the icr-8cc9b1b5bc2e41d30c62ae32-linux-x86_64 folder and after a server restart the correct files were downloaded. :slight_smile: