VAAAPIの使用をIntel謹製のMedia Driverに切り替えてQSVエンコードをUbuntuで実現する

2019年11月20日DTV・ffmpegLinux,DTV,Ubuntu,ffmpeg,エンコード

 

これまで、Ubuntu(Linux)でエンコードをする際には、標準で存在しているVAAPI用のドライバ(i965-va-driver)を使用していたのだが、Intelより公式に配布されているVAAPI用のドライバ(Intel Media Driver for VAAPI)を用いることも出来る。今回はこのIntel公式のドライバへと入れかえていくこととしたい。

なお、入れ替えを行ったあとにffmpegをインストールすることで、ffmpegでよりオプションを多く利用することが出来るQSVエンコード(h264_qsv)をしたいという目論見があるのだが、そこまでたどり着けるかどうか。

Libraのインストール

Intel Media Driver for VAAPIをインストールするためには、いくつかの依存関係を解消する必要がある。具体的には、LibraとGmmLibをインストールしなくてはならない。

インストールはGitHubから。

なお、一部の情報では少し古くっており、autogenを実行しない方法が記載されているが、Libraのメジャーアップデートに伴いこの手順が必須となっている。

$ git clone https://github.com/intel/libva$cd libva$ ./autogen.sh$ make$ sudo make install

Libva-Utilsのインストール

標準で入っているLibra-Utilsがあまりにも古すぎて動作しないため、こちらもインストール。

$ git clone https://github.com/intel/libva-utils$cd libva-utils$ ./autogen.sh$ make$ sudo make install

GmmLibのインストール

これも、インストールはGitHubから。
workspaceというディレクトリをわざわざ用意するのは、後続するmedia-driverのインストールにインスパイヤされたため。

$ mkdir workspace$cd workspace$ git clone https://github.com/intel/gmmlib$ mkdir build$cd build$ cmake -DCMAKE_BUILD_TYPE= Release -DARCH=64 ../gmmlib$ make $ sudo make install

これにて依存関係はOK。

Media-Driver(Intel Media Driver for VAAPI)のインストール

基本的には、以下のサイトに記載されている内容をそのままおこなっていく形である。

$ sudo apt install autoconf libtool libdrm-dev xorg xorg-dev openbox libx11-dev libgl1-mesa-glx libgl1-mesa-dev$pwd
/media/ffmpeg/intel/workspace
$ git clone https://github.com/intel/media-driver$ mkdir build_media$cd build_media$ cmake ../media-driver$ make -j"$(nproc)"$ sudo make install

一番最後にこのような表示が出ていれば、無事ドライバがインストールされている。

Install the project...
-- Install configuration: ""
-- Installing: /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so

VAAPIで使用するドライバを変更する

最後に、VAAPIでは引き続きi965-va-driverを使う設定になっているため、これを今回インストールしたiHDドライバに変更をする。

$export LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri$export LIBVA_DRIVER_NAME=iHD

vainfoを使って情報を確認する

i965-va-driverの場合

i965-va-driverの際は、次のような形で表示されていた。

$vainfolibvainfo:VA-APIversion0.39.4libvainfo:va_getDriverName()returns0libvainfo:Userrequesteddriver'i965'libvainfo:Tryingtoopen/usr/lib/x86_64-linux-gnu/dri/i965_drv_video.solibvainfo:Foundinitfunction__vaDriverInit_0_39libvainfo:va_openDriver()returns0vainfo:VA-APIversion:0.39(libva1.7.3)vainfo:Driverversion:Inteli965driverforIntel(R)Kabylake-1.7.3

media-driverを利用した場合

こんな形の表示に変わる。

$vainfoerror:XDG_RUNTIME_DIRnotsetintheenvironment.error:can'tconnecttoXserver!libvainfo:VA-APIversion1.6.0libvainfo:va_getDriverName()returns0libvainfo:Userrequesteddriver'iHD'libvainfo:Tryingtoopen/usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.solibvainfo:Foundinitfunction__vaDriverInit_1_6libvainfo:va_openDriver()returns0vainfo:VA-APIversion:1.6(libva2.6.0.pre1)vainfo:Driverversion:InteliHDdriver-2.0.0

ffmpegでVAAPIを用いたエンコード

ffmpegでVAAPIを用いたエンコード方式は、以下をご参照頂きたい。

これでIntelのドライバを使用したVAAPIはできるようになっているのだが、本命はffmpegのh264_qsvを使うところ。ここから先は以下の記事で述べることとしよう。

Posted by webnetforce