Linux MINT and ubuntu LTS でVDPAU(ハードウェア再生支援)を有効にする
HW再生支援をめぐって最近変った気分と自分なりのベストプラクティス
相変わらずRADEONです。最近の気分をまとめます。- hw支援なし(CPU)> vaapi >vdpau が今の環境ではベストプラクティス
- hw支援ありのほうが微妙なトラブルに遭遇する可能性あり
- 十分速い環境なら、HWアクセルを効かさないほうがよい結果
- mpv であれば vo=gpu と hwdec=no がマイベストチョイス
自分の中では特別な事情でもなければ、hwアクセルを効かせる必要はないというかんじになりました。基本CPUが速ければ大抵のことは解決するってことかな、と。
これまでHW支援についてどう考えていたのか
さらに追記:2018/09/13HW支援についてManjaro は標準導入されていますが、MINTはユーザーが追加しないといけませんので、この記事の通りでよろしいかと思います。
VDPAUが効かないのでおかしいなと思って確認したら、MintではMESAなどが入ってません。
数年追いかけているわけですが、現在のMESAのできはみなさんのおかげでかなり品位が向上していると思いますので、どんどん使っていけばよろしいかと思います。
さらに追記;2017/02/10
本日付のGPUドライバの刷新で、動作が非常によくなりました。VDPAUなどは有効にしています。
追記の追記:2017/01
もどしました。
当方の今日の環境:AMD RADEON R7 360 ➡ Advanced Micro Devices [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590]
末尾参照。VA-APIとの比較::現在ではvaapi がオススメ
(以下、過去稿、記録のため削除せず)
試した範囲でいえば、VDPAU>VA-APIです。後者は厳しい処理で目視でわかる程度にコマ落ちします。したがって、当面、mesa-vdpau ドライバを導入します。HW支援が選べるアプリケーションでは、VDPAUを明示的に指定して用いることにしました。追記:削除しました。テストしている範囲ではうまくいっていました。
mint 18で試して、メインのubuntu16.04にも導入し、 メインから結局削除。mint18には残しておきます。
当方の環境ではデフォルト状態がベストということなのかなと。悔しくなんかないんだからね。テストしたのはmpvのみです。多少のCPU負荷に目をつぶれば、HWアクセラレーションを効かせない設定にしておけばいいだけともいいますね。
これまで通り、HW支援を効かせたい場合はデフォルトでVA-APIを選択することにしました。実験環境のmint18の方ではVDPAUでしばらく試行錯誤しながら様子をみてみることにしました。よくよく考えてみれば、VDPAUの必要性はとりあえずないので、デフォルトの状態が一番なのかな、と。
ただし、ffmpegでは「Supported hwaccels: vdpau」なのが少々。
mesaドライバを導入します。
新規にターミナル(端末)を開きます。CTRL+ALT+T
sudo apt-get install mesa-vdpau-drivers vdpauinfo
再起動
※ドライバの削除は次のコマンドでよいと思います(私は結局削除しました)
sudo apt remove mesa-vdpau-drivers vdpau-driver-all vdpauinfo
再起動
※ドライバの削除は次のコマンドでよいと思います(私は結局削除しました)
sudo apt remove mesa-vdpau-drivers vdpau-driver-all vdpauinfo
テストします。ターミナルから直にコマンド発行
vo=opengl は、vo=gpu 仕様変更されています。ご注意を。
mpv --vo=vaapi *OP*
mpv --vo=vdpau *OP*
mpv --vo=opengl *OP*
mpv --vo=opengl-hq *OP*
mpv --vo=xv *OP*
*OP*というのは、x264ファイルです。数秒動画だとCPU負荷がわからないので1分以上のファイルを選んだほうがいいですね。いろいろな種類のファイルも試したほうがいいかもしれません。コンテナ、コーデックなど変えてみたりしながら。
mpvのconfigの設定は済ませていることが前提です。リンク先サンプルはHW支援をオフにしています。hwdec=vdpauなどに書き換えて使ってみてください。mpv --vo=vdpau *OP*
mpv --vo=opengl *OP*
mpv --vo=opengl-hq *OP*
mpv --vo=xv *OP*
*OP*というのは、x264ファイルです。数秒動画だとCPU負荷がわからないので1分以上のファイルを選んだほうがいいですね。いろいろな種類のファイルも試したほうがいいかもしれません。コンテナ、コーデックなど変えてみたりしながら。
定義ファイル作成がうざったいなら、コマンドラインで指定してテストでもよいです。こんなかんじ。1行です。
mpv --vo=opengl --hwdec=vdpau --hwdec-codecs=h264,vc1,wmv3,mpeg1video,mpeg2video *OP*
H.264のテストなので、以下がシンプルで等価。
mpv --vo=opengl --hwdec=vdpau --hwdec-codecs=h264 *OP*
H.264のテストなので、以下がシンプルで等価。
mpv --vo=opengl --hwdec=vdpau --hwdec-codecs=h264 *OP*
テストします。 (configに設定を書いています)
mpv *OP*
cplayer: Auto-loading profile 'vo.opengl-hq'
cplayer: Playing: DOPx264.mp4
cplayer: (+) Video --vid=1 (*) (h264)
cplayer: (+) Audio --aid=1 --alang=jpn (*) (flac)
cplayer: AO: [alsa] 48000Hz stereo 2ch s32
vd: Using hardware decoding (vdpau).
cplayer: VO: [opengl-hq] 1920x1080 vdpau
term-msg: FPS: 23.976
statusline: AV: 00:01:31.000 / 00:01:31.009 (99%) A-V: 0.000 Cache: 0s+0KB
[-----------------------------------------------------------------------------------------------+-]
cplayer:
cplayer:
cplayer: Exiting... (End of file)
目視レベルで、支援なしと比較して、CPU稼働率はけっこう少なくなります。効果あり。いまのところ安定しています。
cplayer: Auto-loading profile 'vo.opengl-hq'
cplayer: Playing: DOPx264.mp4
cplayer: (+) Video --vid=1 (*) (h264)
cplayer: (+) Audio --aid=1 --alang=jpn (*) (flac)
cplayer: AO: [alsa] 48000Hz stereo 2ch s32
vd: Using hardware decoding (vdpau).
cplayer: VO: [opengl-hq] 1920x1080 vdpau
term-msg: FPS: 23.976
statusline: AV: 00:01:31.000 / 00:01:31.009 (99%) A-V: 0.000 Cache: 0s+0KB
[-----------------------------------------------------------------------------------------------+-]
cplayer:
cplayer:
cplayer: Exiting... (End of file)
目視レベルで、支援なしと比較して、CPU稼働率はけっこう少なくなります。効果あり。いまのところ安定しています。
サポートされているコーデックをいまさら確認。
グラフィックカードにも依存します。以前のubuntuであればもう少し設定がめんどうでした。サポートdecodeerが表示されている=vdpauが有効。(有効でない場合は、数行のエラーメッセージで終わりです。昔と違って何も設定はいらないのでしょう。
vdpauinfo
display: :0 screen: 0
API version: 1
Information string: G3DVL VDPAU Driver Shared Library version 1.0
Video surface:
name width height types
-------------------------------------------
420 16384 16384 NV12 YV12
422 16384 16384 UYVY YUYV
444 16384 16384 Y8U8V8A8 V8U8Y8A8
Decoder capabilities:
name level macbs width height
----------------------------------------------------
MPEG1 --- not supported ---
MPEG2_SIMPLE 3 9216 2048 1152
MPEG2_MAIN 3 9216 2048 1152
H264_BASELINE 41 9216 2048 1152
H264_MAIN 41 9216 2048 1152
H264_HIGH 41 9216 2048 1152
VC1_SIMPLE 1 9216 2048 1152
VC1_MAIN 2 9216 2048 1152
VC1_ADVANCED 4 9216 2048 1152
MPEG4_PART2_SP 3 9216 2048 1152
MPEG4_PART2_ASP 5 9216 2048 1152
DIVX4_QMOBILE --- not supported ---
DIVX4_MOBILE --- not supported ---
DIVX4_HOME_THEATER --- not supported ---
DIVX4_HD_1080P --- not supported ---
DIVX5_QMOBILE --- not supported ---
DIVX5_MOBILE --- not supported ---
DIVX5_HOME_THEATER --- not supported ---
DIVX5_HD_1080P --- not supported ---
H264_CONSTRAINED_BASELINE --- not supported ---
H264_EXTENDED --- not supported ---
H264_PROGRESSIVE_HIGH --- not supported ---
H264_CONSTRAINED_HIGH --- not supported ---
H264_HIGH_444_PREDICTIVE --- not supported ---
HEVC_MAIN --- not supported ---
HEVC_MAIN_10 --- not supported ---
HEVC_MAIN_STILL --- not supported ---
HEVC_MAIN_12 --- not supported ---
HEVC_MAIN_444 --- not supported ---
Output surface:
name width height nat types
----------------------------------------------------
B8G8R8A8 16384 16384 y NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
R8G8B8A8 16384 16384 y NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
R10G10B10A2 16384 16384 y NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
B10G10R10A2 16384 16384 y NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
Bitmap surface:
name width height
------------------------------
B8G8R8A8 16384 16384
R8G8B8A8 16384 16384
R10G10B10A2 16384 16384
B10G10R10A2 16384 16384
A8 16384 16384
Video mixer:
feature name sup
------------------------------------
DEINTERLACE_TEMPORAL y
DEINTERLACE_TEMPORAL_SPATIAL -
INVERSE_TELECINE -
NOISE_REDUCTION y
SHARPNESS y
LUMA_KEY -
HIGH QUALITY SCALING - L1 -
HIGH QUALITY SCALING - L2 -
HIGH QUALITY SCALING - L3 -
HIGH QUALITY SCALING - L4 -
HIGH QUALITY SCALING - L5 -
HIGH QUALITY SCALING - L6 -
HIGH QUALITY SCALING - L7 -
HIGH QUALITY SCALING - L8 -
HIGH QUALITY SCALING - L9 -
parameter name sup min max
-----------------------------------------------------
VIDEO_SURFACE_WIDTH y 48 2048
VIDEO_SURFACE_HEIGHT y 48 1152
CHROMA_TYPE y
LAYERS y 0 4
attribute name sup min max
-----------------------------------------------------
BACKGROUND_COLOR y
CSC_MATRIX y
NOISE_REDUCTION_LEVEL y 0.00 1.00
SHARPNESS_LEVEL y -1.00 1.00
LUMA_KEY_MIN_LUMA y
LUMA_KEY_MAX_LUMA y
display: :0 screen: 0
API version: 1
Information string: G3DVL VDPAU Driver Shared Library version 1.0
Video surface:
name width height types
-------------------------------------------
420 16384 16384 NV12 YV12
422 16384 16384 UYVY YUYV
444 16384 16384 Y8U8V8A8 V8U8Y8A8
Decoder capabilities:
name level macbs width height
----------------------------------------------------
MPEG1 --- not supported ---
MPEG2_SIMPLE 3 9216 2048 1152
MPEG2_MAIN 3 9216 2048 1152
H264_BASELINE 41 9216 2048 1152
H264_MAIN 41 9216 2048 1152
H264_HIGH 41 9216 2048 1152
VC1_SIMPLE 1 9216 2048 1152
VC1_MAIN 2 9216 2048 1152
VC1_ADVANCED 4 9216 2048 1152
MPEG4_PART2_SP 3 9216 2048 1152
MPEG4_PART2_ASP 5 9216 2048 1152
DIVX4_QMOBILE --- not supported ---
DIVX4_MOBILE --- not supported ---
DIVX4_HOME_THEATER --- not supported ---
DIVX4_HD_1080P --- not supported ---
DIVX5_QMOBILE --- not supported ---
DIVX5_MOBILE --- not supported ---
DIVX5_HOME_THEATER --- not supported ---
DIVX5_HD_1080P --- not supported ---
H264_CONSTRAINED_BASELINE --- not supported ---
H264_EXTENDED --- not supported ---
H264_PROGRESSIVE_HIGH --- not supported ---
H264_CONSTRAINED_HIGH --- not supported ---
H264_HIGH_444_PREDICTIVE --- not supported ---
HEVC_MAIN --- not supported ---
HEVC_MAIN_10 --- not supported ---
HEVC_MAIN_STILL --- not supported ---
HEVC_MAIN_12 --- not supported ---
HEVC_MAIN_444 --- not supported ---
Output surface:
name width height nat types
----------------------------------------------------
B8G8R8A8 16384 16384 y NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
R8G8B8A8 16384 16384 y NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
R10G10B10A2 16384 16384 y NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
B10G10R10A2 16384 16384 y NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8
Bitmap surface:
name width height
------------------------------
B8G8R8A8 16384 16384
R8G8B8A8 16384 16384
R10G10B10A2 16384 16384
B10G10R10A2 16384 16384
A8 16384 16384
Video mixer:
feature name sup
------------------------------------
DEINTERLACE_TEMPORAL y
DEINTERLACE_TEMPORAL_SPATIAL -
INVERSE_TELECINE -
NOISE_REDUCTION y
SHARPNESS y
LUMA_KEY -
HIGH QUALITY SCALING - L1 -
HIGH QUALITY SCALING - L2 -
HIGH QUALITY SCALING - L3 -
HIGH QUALITY SCALING - L4 -
HIGH QUALITY SCALING - L5 -
HIGH QUALITY SCALING - L6 -
HIGH QUALITY SCALING - L7 -
HIGH QUALITY SCALING - L8 -
HIGH QUALITY SCALING - L9 -
parameter name sup min max
-----------------------------------------------------
VIDEO_SURFACE_WIDTH y 48 2048
VIDEO_SURFACE_HEIGHT y 48 1152
CHROMA_TYPE y
LAYERS y 0 4
attribute name sup min max
-----------------------------------------------------
BACKGROUND_COLOR y
CSC_MATRIX y
NOISE_REDUCTION_LEVEL y 0.00 1.00
SHARPNESS_LEVEL y -1.00 1.00
LUMA_KEY_MIN_LUMA y
LUMA_KEY_MAX_LUMA y
AMD RADEON R7 360
(2016-06-01)。今回のドライバ(VDPAU MESA)を組み込まないデフォルト状態では、次のようになっていました。VA-APIです。ubuntu16.04LTSです。 mint18がリリースされる前ですから、厳密な比較ではありません。
libva info: VA-API version 0.39.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
cplayer: AO: [pulse] 48000Hz 5.1 6ch s32
vd: Using hardware decoding (vaapi).
cplayer: VO: [opengl-hq] 1920x1080 vaapi
term-msg: FPS: 23.976
VDPAU関連を組み込まない状態:VAAPIが有効でHWアクセルが効いているかんじがします。ffmpegでは効かない(ffmpegはvdpau必須)。libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
cplayer: AO: [pulse] 48000Hz 5.1 6ch s32
vd: Using hardware decoding (vaapi).
cplayer: VO: [opengl-hq] 1920x1080 vaapi
term-msg: FPS: 23.976
sudo apt install libvdpau-va-gl1