FreeBSD と vaapi であそぶ。

ということで、いつの間にか Intel QSV が vaapi 経由で使えるようになっていた。 作ってくれた方々、ありがとうございます。

さっそくインストール。

>sudo pkg install libva-intel-driver libva-intel-media-driver libva-utils drm-kmod
ということで、さっくりパッケージ入れる。
> vainfo error: XDG_RUNTIME_DIR not set in the environment. libva info: VA-API version 1.6.0 libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null) vaInitialize failed with error code -1 (unknown libva error),exit
あれ?kldstat してもちゃんと入っているけどな、と思っていたら、サーバ機なのでヘッドレスということを忘れてた。 とりあえず、VGAケーブル繋ぎなおしてリブート。この機会についでに freebsd-update もしておこう。

ふたたび立ち上がってきたのでもう一回 vainfo

> vainfo error: XDG_RUNTIME_DIR not set in the environment. libva info: VA-API version 1.8.0 libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null) vaInitialize failed with error code -1 (unknown libva error),exit
あれれ?もしかして?
> sudo vainfo Password: error: XDG_RUNTIME_DIR not set in the environment. MobaXterm X11 proxy: Unsupported authorisation protocol error: can't connect to X server! libva info: VA-API version 1.8.0 libva info: Trying to open /usr/local/lib/dri/iHD_drv_video.so libva info: Found init function __vaDriverInit_1_8 libva info: va_openDriver() returns 0 vainfo: VA-API version: 1.8 (libva 2.8.0) vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 20.2.0 (intel-media-20.2.0) vainfo: Supported profile and entrypoints VAProfileNone : VAEntrypointVideoProc VAProfileNone : VAEntrypointStats VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Simple : VAEntrypointEncSlice VAProfileMPEG2Main : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointEncSlice VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264Main : VAEntrypointFEI VAProfileH264Main : VAEntrypointEncSliceLP VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileH264High : VAEntrypointFEI VAProfileH264High : VAEntrypointEncSliceLP VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD VAProfileJPEGBaseline : VAEntrypointVLD VAProfileJPEGBaseline : VAEntrypointEncPicture VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice VAProfileH264ConstrainedBaseline: VAEntrypointFEI VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP VAProfileVP8Version0_3 : VAEntrypointVLD VAProfileHEVCMain : VAEntrypointVLD VAProfileHEVCMain : VAEntrypointEncSlice VAProfileHEVCMain : VAEntrypointFEI
やったぜ!

ということで、次は ffmpeg で動けばいろいろ捗るぞ。

> ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/card0 -hwaccel_output_format vaapi \ -i test.ts -vf 'hwupload,deinterlace_vaapi' -qp 23 -c:v h264_vaapi -c:a copy -absf aac_adtstoasc \ -f mp4 test.mp4
動きました。hevc_vaapi でも動いてばっちりです。あとは適当にパラメータ調整しよう。

とりあえず、ブートの際にモニタつなげばいけたので、モニタは外しちゃったけど、再起動で動かなくなりそうなので、VGAのダミープラグを発注しよう。

追記: jail の中で動かすには、 /etc/devfs.rules に新たにルール追加して dri* と drm* を見せてあげれば動きました。やったぜ。

タグ: FreeBSD QSV Qjail