2022年12月30日 星期五

Intel DG2 ARC 顯卡 Kernel DRM patch。Vaapi hardware decode/encode

緣起

年中的時候入手了一片 Intel A380 顯卡,因為 Intel ARC 顯卡的多媒體支援程度高,也主打 AV1 encode/decode 高效能!對於常常在轉檔的我,是相當有吸引力的,加上目前顯卡價格居高不下,支援 av1 decode 的顯卡幾乎破萬,所以價格不到一半且有 av1 encode/decode 真的是讓人想早點擁有!

早點入手的壞處就是驅動不完善,軟體不支援!入手時的軟體環境是 Debian bookworm, Kernel-5.19, ffmpeg-5.1。重點是 Kernel drm 無法驅動這張顯卡,頂多用 1024x768 那種糊糊的解析度,更不用說 ffmpeg + mpv 的多媒體功能。

驅動經歷

既然 kernel-5.19 不行,所以就直接試用 kernel-6.0-rc1。

編譯了 kernel-6.0-rc1 後,能順利的進入桌面,但是執行 mpv 或 ffsogi 時,會有 internal error,加上 ffmpeg 還必須用 onevpl API 和 新版的 intel-media-va-driver-non-free + cartwheel-ffmpeg

簡單來講就是一連串的 compile + test 的無限循環。雖然最後將軟體層打通了,但是依舊會產生 Internal error。追蹤了 i915 kernel mailing list 後,問題還是在 drm 沒有驅動。

Intel 在 github 上有提供 intel backport driver 但是無法順利 merge 到 Debian 裡面,所以只好再等待。

曙光再現

沉寂了一段時間後,在閱讀 LKML 的時候,才發現 kernel-drm-tip 已經加入了 DG2 的支援了,也不用再加入 force_probe=0xNNNN 的字串強制啟動 DG2 顯卡,搭配上 Linux Firmware Git 就能支援 hardware encode/decode。

透過上述的 patch,加上 Debian Multimedia repo 也更新到最新的 oneVPL, ffmpeg, intel-media-va-driver-non-free 後,總算把 Intel A380 的任督二脈打通,可以順利地用 ffsogi_va 來轉檔了!

搭配的軟體版本如下:

  • ffmpeg                                      10:5.1.2-dmo2
  • intel-media-va-driver-non-free 22.6.4+ds1-1
  • libvpl2:amd64                           2023.1.0-dmo1

分享一下自已修改的 drm patch,適用於 kernel-6.1,相信能撐到 kernel-6.2 登場前能順順用。

Kernel-6.2 已經完整支援 DG2 了。詳見 News

decode 效能

想要測試顯卡 hardware decode 效能的朋友可以抓這個 mpv vo benchmark,抓下來後直接執行目錄內的 bench_start.sh,畫面就會撥放影片,OSD 會秀出 fps 的值,我的 A380 平均是 720 張,以 4K hevc 的檔案來說是很驚人的。

encode 效能

encode 效能測試的部份,我會以幾個 4K->1080p->720p 的方式,搭配 ffsogi 來呈現。

4K hevc -> 1080p hevc

ffsogi_va -i sample_3840x2160.hevc -o t.mp4 -s 1920 -c 24 --hw

Stream mapping:
  Stream #0:0 -> #0:0 (hevc (native) -> hevc (hevc_vaapi))
Output #0, mp4, to 't.mp4':
  Metadata:
    encoder         : Lavf59.27.100
  Stream #0:0: Video: hevc (Main) (hev1 / 0x31766568), vaapi(tv, progressive), 1920x1080, q=2-31, 23.98 fps, 24k tbn
    Metadata:
      encoder         : Lavc59.37.100 hevc_vaapi
frame=  677 fps=251 q=-0.0 Lsize=   66947kB time=00:00:28.15 bitrate=19480.1kbits/s speed=10.4x    

 

1080p hevc -> 720 hevc

ffsogi_va -i sample_1920x1080.hevc -o t.mp4 -s 1280 -c 24 --hw

Stream mapping:
  Stream #0:0 -> #0:0 (hevc (native) -> hevc (hevc_vaapi))
Output #0, mp4, to 't.mp4':
  Metadata:
    encoder         : Lavf59.27.100
  Stream #0:0: Video: hevc (Main) (hev1 / 0x31766568), vaapi(tv, progressive), 1280x720, q=2-31, 23.98 fps, 24k tbn
    Metadata:
      encoder         : Lavc59.37.100 hevc_vaapi
frame=  677 fps=0.0 q=-0.0 Lsize=   25642kB time=00:00:28.15 bitrate=7461.2kbits/s speed=33.2x
因為速度太快,所以 fps 顯示為 0,如果以原影片 23.98 * 33.2(speed) = 796,效能也是超級嚇人的。

這是 Intel A380 的測試結果,日後再入手最高階 A770 的話,再來測試一次,期待更驚人的表現了!

如果您也有多媒體剪輯轉檔的需求,很推薦這系列的 Intel 獨立顯卡。

備註

測試影片來源:https://filesamples.com/formats/hevc

沒有留言: