# Is VA-API supported on FreeBSD by nvidia drivers?



## sko (Mar 6, 2021)

I'm currently looking into options for HW-accelerated H.264/265 transcoding on a server at home (emby). As Xeon E5s don't have a GPU, Intel QuicSync isn't available.

The only viable (and low-cost) option seems to be something like a Nvidia Quadro P400. But as always, proper information about supported features is rather scarce or non-existent for anything but Windows or Linux.

I've found a thread in the emby forums [1], where VA-API was successfully used for transcoding with an integrated Intel GPU on FreeBSD, but for Nvidia Drivers I couldn't find any information about the VA-API support on FreeBSD.
Given FreeBSD now uses linux drm drivers, can I assume VA-API is also available on FreeBSD? (This doesn't make sense - I had drm-next mixed up as the new graphics driver system for *all* vendors)
[edit:] Can VA-API transcoding be used on FreeBSD with nvidia hardware/drivers?

I've never dealt much with graphics apart from normal desktop usage and especially never had anything to do with any video transcoding, so I'm sorry if this question is completely trivial.
My desktop workstation has an old GeForce GTX 960 which uses the old 390 driver package, not the drm-driver, so sadly I don't have any hardware at hand for testing and didn't want to spend cash on new hardware without doing some research first...


[1] https://emby.media/community/index.php?/topic/70699-enable-hardware-acceleration-on-freebsd/


----------



## shkhln (Mar 6, 2021)

Nvidia has nothing to do with Linux DRM drivers. The only transcoding API here is NVENC, which requires quite a bit of work to enable on FreeBSD.



sko said:


> My desktop workstation has an old GeForce GTX 960 which uses the old 390 driver package


FYI, it's still supported by the latest driver.


----------



## shkhln (Mar 6, 2021)

Also, keep in mind that if you don't need realtime transcoding you would get better quality and/or compression with CPU.


----------



## sko (Mar 6, 2021)

shkhln said:


> Nvidia has nothing to do with Linux DRM drivers. The only transcoding API here is NVENC, which requires quite a bit of work to enable on FreeBSD.


I somehow feared I mixed things up in the process... thanks for clarification.
So when using nvidia I _always_ have to rely on NVENC in the background (which isn't supported on FreeBSD for now), even if the transcoder (ffmpeg) is talking via VA-API?



> FYI, it's still supported by the latest driver.


I know it *should* be, but that particular card never worked with the 4xx branch of the closed-source either, so I never bothered trying the drm-next drivers. Might have to do with the fact that the card was one of the very first when the 9xx series came out, or it just has a crappy firmware...



shkhln said:


> Also, keep in mind that if you don't need realtime transcoding you would get better quality and/or compression with CPU.


As this is for local streaming from an emby server, realtime is necessary. It 'works' with CPU transcoding for now (2x E5-2630Lv3) but ~8 cores are completely hogged when transcoding 1080p/60fps material and skipping or fast forward on a client often causes massive hangs or delays, that's why I wanted to offload the transcoding to a GPU.


----------



## shkhln (Mar 6, 2021)

sko said:


> I somehow feared I mixed things up in the process... thanks for clarification.
> So when using nvidia I _always_ have to rely on NVENC in the background (which isn't supported on FreeBSD for now), even if the transcoder (ffmpeg) is talking via VA-API?


Again, NVENC. Anything talking VA-API can go transcode itself.



sko said:


> I know it *should* be, but that particular card never worked with the 4xx branch of the closed-source either, so I never bothered trying the drm-next drivers.


DRM what? What AMDGPU, radeonkms and i915 have to do with Nvidia anyway?



sko said:


> Might have to do with the fact that the card was one of the very first when the 9xx series came out


Nothing.


----------



## sko (Mar 6, 2021)

shkhln said:


> DRM what? What AMDGPU, radeonkms and i915 have to do with Nvidia anyway?


Nothing, sorry, I completely mixed that up. Haven't had anything but Intel GPUs except the Nvidia in this workstation for years. So I somehow had that mixed up as 'drm-next provides new drivers for all GPU vendors'.
I corrected the thread title and first post to make more sense.



> Anything talking VA-API can go transcode itself.


So if emby supports VA-API, it should work out of the box if the hardware and/or driver supports it?


----------



## Snurg (Mar 6, 2021)

No idea whether the nvidia-* ports contain the README.txt file of the upstream driver.
There is a lot of information in it about VDPAU.
No idea though whether it is enabled/implemented on FreeBSD, but as far as I can see, it looks like it is.
I'd appreciate if other people find out for me ( *ducking_away_quickly* ).
See also this thread.


----------



## sko (Mar 6, 2021)

The hint to the driver Readme was golden, thanks Snurg:


			Appendix F. VDPAU Support
		


This section is even present in the legacy drivers down to the 304 Version, so it should 'just work'™ with any supported chipset.

vdpau is disabled for the ffmpeg version that comes with the emby-server package. But the chorus in their support forums seems to be "if ffmpeg supports it, it should work" - ffmpeg from packages has vdpau (and a lot more options) enabled, so maybe just exchanging them could already do the trick.


I also just found out there is a emby fork without proprietary/locked features called jellyfin. I'm currently installing it in a jail on my workstation so I can test if VDPAU actually will work for this without having to pay for the emby premium subscription.


----------



## shkhln (Mar 7, 2021)

D in VDPAU stands for decoding, that's all it does.


----------

