FFmpeg hardware transcoding
jbeich at FreeBSD.org
Wed Feb 27 11:32:01 UTC 2019
<driesm.michiels at gmail.com> writes:
> Hi Multimedia mailing list,
> Here I am again with a follow-up question to this.
> I was wondering if hardware acceleration is possible even if I am building
> all ports with X11 unset (off).
X11=off is generally untested territory. Please, make sure VAAPI works in your
environment (e.g., headless) before fiddling with port options.
> I noticed that when building ports related to hardware acceleration, more
> specifically, libva-utils to check if driver etc is detected with vainfo, it
> fails with this;
> [~]$ vainfo
> ld-elf.so.1: Shared object "libva-x11.so.2" not found, required by "vainfo"
After disabling X11 or WAYLAND in libva make sure to rebuild all direct consumers e.g.,
libva-utils, libva-intel-driver, ffmpeg. poudriere should have done that for you.
If you're building manually or via portmaster don't expect handholding.
> This fails because I build libva without X11 support. Is vainfo only
> supported to work on platforms that are running an X11 server?
Dependency on X11 libraries doesn't imply dependency on a running X11 server.
I don't maintain libva-utils, so no clue if X11 can be disabled at compile time.
> When I reinstall libva with X11 support vainfo works, although it does say
> its not detecting X11 server (which I'm not interested in).
> I am interested however in the capabilities of the detected driver and if it
> is detected at all.
> Output of vainfo:
> [~]$ vainfo
> error: XDG_RUNTIME_DIR not set in the environment.
XDG_RUNTIME_DIR is only required when running in Wayland compositor.
It's a result of WAYLAND option enabled by default and is safe to ignore.
> error: can't connect to X server!
> vainfo: VA-API version: 1.4 (libva 2.4.0)
> vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 2.3.0
I'm on Skylake as well, so what works for me is very likely to work for you. ;)
> vainfo: Supported profile and entrypoints
> VAProfileMPEG2Simple : VAEntrypointVLD
> VAProfileMPEG2Simple : VAEntrypointEncSlice
> VAProfileMPEG2Main : VAEntrypointVLD
> VAProfileMPEG2Main : VAEntrypointEncSlice
> VAProfileH264ConstrainedBaseline: VAEntrypointVLD
> VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
> VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
> VAProfileH264ConstrainedBaseline: VAEntrypointFEI
> VAProfileH264ConstrainedBaseline: VAEntrypointStats
> VAProfileH264Main : VAEntrypointVLD
> VAProfileH264Main : VAEntrypointEncSlice
> VAProfileH264Main : VAEntrypointEncSliceLP
> VAProfileH264Main : VAEntrypointFEI
> VAProfileH264Main : VAEntrypointStats
> VAProfileH264High : VAEntrypointVLD
> VAProfileH264High : VAEntrypointEncSlice
> VAProfileH264High : VAEntrypointEncSliceLP
> VAProfileH264High : VAEntrypointFEI
> VAProfileH264High : VAEntrypointStats
> VAProfileH264MultiviewHigh : VAEntrypointVLD
> VAProfileH264MultiviewHigh : VAEntrypointEncSlice
> VAProfileH264StereoHigh : VAEntrypointVLD
> VAProfileH264StereoHigh : VAEntrypointEncSlice
> VAProfileVC1Simple : VAEntrypointVLD
> VAProfileVC1Main : VAEntrypointVLD
> VAProfileVC1Advanced : VAEntrypointVLD
> VAProfileNone : VAEntrypointVideoProc
> VAProfileJPEGBaseline : VAEntrypointVLD
> VAProfileJPEGBaseline : VAEntrypointEncPicture
> VAProfileVP8Version0_3 : VAEntrypointVLD
> VAProfileVP8Version0_3 : VAEntrypointEncSlice
libva-intel-driver can be built with partial VP9 (8bit) decoding support.
Maybe useful for transcoding 4K videos obtained from YouTube.
> VAProfileHEVCMain : VAEntrypointVLD
> VAProfileHEVCMain : VAEntrypointEncSlice
Compared to H264 encoder HEVC requires more GPU power. Check GPU usage
via intel_gpu_top (not in ports) if you need to achieve certain speed.
> Possible solution (although I'm really just guessing here and are probably
> not correct in many ways);
> - Try build vainfo without linking against libva-x11.so
> - Remove X11 option from libva and always enable it (only a few extra
> libraries that get pulled in by this)
- Don't install libva-utils
More information about the freebsd-multimedia