[Libav-user] Libavcodec D3D12 hevc_nvenc

Alex Cha alex-1er at hotmail.com
Wed Jul 9 19:30:45 EEST 2025


Thank you for your quick response!

Yes, that was the way we were going to investigate next, we already had a project using Nvenc directly, but the original implementation was for OpenGL.
We also saw there was D3D12 Video Encoding (D3D12 Video Encoding | DirectX-Specs<https://microsoft.github.io/DirectX-Specs/d3d/D3D12VideoEncoding.html>) that might also do something similar. Do you have any experience with the latter? Otherwise we'll most likely do as you say with the nvidia SDK.

I was contacting for low latency as that is currently the problem I was having, however the reason we wanted libavcodec initially is that a few of our clients cannot agree on a codec. So we wanted the broad range of codecs supported by FFmpeg, even if that meant a higher latency. I thought we could do a basic implementation, test the end-to-end latency and figure out from there if we needed a lower level implementation. It is only while doing the implementation that I found that even though d3d12va is supported, the hevc_nvenc doesn't list d3d12 as a pixel format supported.
________________________________
From: Libav-user <libav-user-bounces at ffmpeg.org> on behalf of Ben Harper <rogojin-at-gmail.com at ffmpeg.org>
Sent: July 9, 2025 11:19 AM
To: This list is about using libavcodec, libavformat, libavutil, libavdevice and libavfilter. <libav-user at ffmpeg.org>
Subject: Re: [Libav-user] Libavcodec D3D12 hevc_nvenc

Have you tried just using the nvidia SDK directly? Since you need low latency, I assume this is for some kind of realtime application, which implies you're streaming video packets. The raw video codec data is simpler than many people imagine. It's just a stream of packets - also called NALs, or NALUs. The nvidia encoder will likely spit these out, and I'm guessing this is what your decoding side needs. You'll want avcodec for packaging those up into a .mp4 file or some other container format. But if you're just streaming live video data, then I'm guessing you don't actually need a container file format, so the raw packets might be good enough.

On Wed, 9 Jul 2025 at 17:12, Alex Cha <alex-1er-at-hotmail.com at ffmpeg.org<mailto:alex-1er-at-hotmail.com at ffmpeg.org>> wrote:
Hi,

I was under the impression that there was hardware acceleration for D3D12 supported by ffmpeg.
Upon implementing the solution however, we had unsupported pixel format d3d12 by the hevc_nvenc.

Digging further in the nvenc.c code it seems d3d12 format is not supported directly. Was there a reason for this? Looking into the nvidia documentation the encoder should support D3D12, even if it is unclear to me what needs to be done.

For reference, we are trying to integrate hardware streaming using FFmpeg into a unreal engine 5 application which uses D3D12. We need a very low latency.
We have tried using the D3D11on12 interop without success, it is returning us "openencodesessionex failed no encode device(1)". The adapter seems to be using my RTX 4090 correctly but no success.

Anyway, this email is a long shot in case someone as already encountered these issues and is able encode without copying to CPU.

Thanks,
Alex
_______________________________________________
Libav-user mailing list
Libav-user at ffmpeg.org<mailto:Libav-user at ffmpeg.org>
https://ffmpeg.org/mailman/listinfo/libav-user

To unsubscribe, visit link above, or email
libav-user-request at ffmpeg.org<mailto:libav-user-request at ffmpeg.org> with subject "unsubscribe".
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20250709/14d8c773/attachment.htm>


More information about the Libav-user mailing list