[FFmpeg-user] init_hw_device qsv for hwaccel on Skylake iGPU + Nvidia GF GPU
Terje J. Hanssen
terjejhanssen at gmail.com
Mon Sep 2 16:29:18 EEST 2024
On 9/2/24 07:01, Wang, Fei W wrote:
> On Sun, 2024-09-01 at 10:53 +0200, Terje J. Hanssen wrote:
>> I have not succeeded yet to configure ffmpeg QSV access to an enabled
>> iGPU onboard an Intel Core i7-6700K (Skylake). This is a legacy,
>> rebuilt workstation with additional, discrete Nvidia GeForce GTX 960
>> GPU
>> on a MSI-Z170-A Pro mobo.
>>
>> Any suggestions how to solve this?
> You can use vainfo to find the Intel gpu device correctly:
> "vainfo --display drm --device /dev/dri/renderD12X"
>
> Then specify device in ffmpeg cmdline with "-qsv_device
> /dev/dri/renderD12X"
>
> BTW, for legacy platforms, suggest to use libvpl with Media SDK for the
> runtime implementation:
> https://github.com/intel/libvpl
> https://github.com/Intel-Media-SDK/MediaSDK
>
> Thanks
> Fei
>
@Fei, thanks for your suggestion that hopefully will probe me in the
right direction.
Right now, I will be absent from my Skylake workstation a week or two,
before I can test more directly on it. But I did preserve some more
output I will add and refer to below.
In the meantime I also can do a bit indirectly tests on my available
Kaby Lake XPS-13 with UHD 620 iGPU and a similar system installation:
vainfo --display drm --device /dev/dri/renderD12X
Trying display: drm
Failed to open the given device!
As this don't find any device on Kaby Lake, I expect I rather have to
put in a number "8" instead of "X" as found on Kaby Lake(?)
ls /dev/dri
by-path card1 renderD128
When I try
vainfo --display drm --device /dev/dri/renderD12*
or
vainfo --display drm --device /dev/dri/renderD128
This simingly output just the same as "vainfo" alone on KabyLake.
And I have the latter preserved also from Skylake as follows:
vainfo
Trying display: wayland
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_21
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics -
24.1.5 ()
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
VAProfileVP8Version0_3 : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointFEI
---------------
In addition also also preserved output on Skylake from two other tools,
"drmdevice" and "drm_info" as follows.
drmdevice
--- Checking the number of DRM device available ---
--- Devices reported 2 ---
--- Retrieving devices information (PCI device revision is ignored) ---
device[0]
+-> available_nodes 0x05
+-> nodes
| +-> nodes[0] /dev/dri/card1
| +-> nodes[2] /dev/dri/renderD128
+-> bustype 0000
| +-> pci
| +-> domain 0000
| +-> bus 01
| +-> dev 00
| +-> func 0
+-> deviceinfo
+-> pci
+-> vendor_id 10de
+-> device_id 1401
+-> subvendor_id 1462
+-> subdevice_id 3201
+-> revision_id IGNORED
--- Opening device node /dev/dri/card1 ---
--- Retrieving device info, for node /dev/dri/card1 ---
device[0]
+-> available_nodes 0x05
+-> nodes
| +-> nodes[0] /dev/dri/card1
| +-> nodes[2] /dev/dri/renderD128
+-> bustype 0000
| +-> pci
| +-> domain 0000
| +-> bus 01
| +-> dev 00
| +-> func 0
+-> deviceinfo
+-> pci
+-> vendor_id 10de
+-> device_id 1401
+-> subvendor_id 1462
+-> subdevice_id 3201
+-> revision_id a1
--- Opening device node /dev/dri/renderD128 ---
--- Retrieving device info, for node /dev/dri/renderD128 ---
device[0]
+-> available_nodes 0x05
+-> nodes
| +-> nodes[0] /dev/dri/card1
| +-> nodes[2] /dev/dri/renderD128
+-> bustype 0000
| +-> pci
| +-> domain 0000
| +-> bus 01
| +-> dev 00
| +-> func 0
+-> deviceinfo
+-> pci
+-> vendor_id 10de
+-> device_id 1401
+-> subvendor_id 1462
+-> subdevice_id 3201
+-> revision_id a1
device[1]
+-> available_nodes 0x05
+-> nodes
| +-> nodes[0] /dev/dri/card2
| +-> nodes[2] /dev/dri/renderD129
+-> bustype 0000
| +-> pci
| +-> domain 0000
| +-> bus 00
| +-> dev 02
| +-> func 0
+-> deviceinfo
+-> pci
+-> vendor_id 8086
+-> device_id 1912
+-> subvendor_id 1462
+-> subdevice_id 7971
+-> revision_id IGNORED
--- Opening device node /dev/dri/card2 ---
--- Retrieving device info, for node /dev/dri/card2 ---
device[1]
+-> available_nodes 0x05
+-> nodes
| +-> nodes[0] /dev/dri/card2
| +-> nodes[2] /dev/dri/renderD129
+-> bustype 0000
| +-> pci
| +-> domain 0000
| +-> bus 00
| +-> dev 02
| +-> func 0
+-> deviceinfo
+-> pci
+-> vendor_id 8086
+-> device_id 1912
+-> subvendor_id 1462
+-> subdevice_id 7971
+-> revision_id 06
--- Opening device node /dev/dri/renderD129 ---
--- Retrieving device info, for node /dev/dri/renderD129 ---
device[1]
+-> available_nodes 0x05
+-> nodes
| +-> nodes[0] /dev/dri/card2
| +-> nodes[2] /dev/dri/renderD129
+-> bustype 0000
| +-> pci
| +-> domain 0000
| +-> bus 00
| +-> dev 02
| +-> func 0
+-> deviceinfo
+-> pci
+-> vendor_id 8086
+-> device_id 1912
+-> subvendor_id 1462
+-> subdevice_id 7971
+-> revision_id 06
=====================================
drm_info | grep Driver
├───Driver: nvidia-drm (NVIDIA DRM driver) version 0.0.0 (20160202)
├───Driver: i915 (Intel Graphics) version 1.6.0 (20230929)
If /dev/dri/card2 and /dev/dri/renderD129 refer to the Skylake HD 530 iGPU
(and /dev/dri/card1 and /dev/dri/renderD128 refer to the Nvidia GPU),
I cannot understand why the initial, second ffmpeg command in section 2)
below did report errors?
Possibly syntax error or something else?
>> My tested ffmpeg code lines and system information below.
>>
>> 1) Tested first this simple ffmpeg decode bencmark code line from
>> https://trac.ffmpeg.org/wiki/Hardware/QuickSync#Decode-only
>> This works fine on single GPU Caby Lake/UHD 620 and on Alder Lake/Arc
>> A750, but on Skylake with dual iGPU HD 530 and a Nvidia GeForce GTX
>> 960
>> card, these errors are reported:
>>
>> ffmpeg -hide_banner -hwaccel qsv -hwaccel_output_format qsv -i
>> h264_8bit_yuv420p.mp4 -f null -
>> ....
>> [AVHWDeviceContext @ 0x55bed1a7c500] Error creating a MFX
>> session: -9.
>> Device creation failed: -1313558101.
>> [vist#0:0/h264 @ 0x55bed1a656c0] [dec:h264_qsv @ 0x55bed1a64300]
>> No
>> device available for decoder: device type qsv needed for codec
>> h264_qsv.
>> [vist#0:0/h264 @ 0x55bed1a656c0] [dec:h264_qsv @ 0x55bed1a64300]
>> Hardware device setup failed for decoder: Unknown error occurred
>> [vost#0:0/wrapped_avframe @ 0x55bed1a63740] Error initializing a
>> simple filtergraph
>> Error opening output file -.
>> Error opening output files: Unknown error occurred
>> bench: maxrss=59076KiB
>>
>>
>> 2) Additional tests where I experimented to apply suggestions from
>> https://trac.ffmpeg.org/wiki/Hardware/QuickSync#Transcode
>>
>> -qsv_device is an qsv customized option can be used to specify
>> a
>> hardware device and avoid the default device initialization
>> failure
>> when multiple devices usable (eg: an Intel integrated GPU and an
>> AMD/Nvidia discrete graphics card).
>>
>>
>> ffmpeg -hide_banner -hwaccel qsv -qsv_device /dev/dri/renderD128
>> -i
>> h264_8bit_yuv420p.mp4 -f null -
>> DRM_IOCTL_VERSION, unsupported drm device by media driver: nvid
>> DRM_IOCTL_VERSION, unsupported drm device by media driver: nvid
>> [AVHWDeviceContext @ 0x56330da80dc0] libva:
>> /usr/lib64/dri/iHD_drv_video.so init failed
>> [AVHWDeviceContext @ 0x56330da80dc0] Failed to initialise VAAPI
>> connection: 18 (invalid parameter).
>> Device creation failed: -5.
>> Failed to set value '/dev/dri/renderD128' for option
>> 'qsv_device':
>> Input/output error
>> Error parsing global options: Input/output error
>>
>>
>> ffmpeg -hide_banner -hwaccel qsv -qsv_device /dev/dri/renderD129
>> -i
>> h264_8bit_yuv420p.mp4 -f null -
>> [AVHWDeviceContext @ 0x55deafcbcec0] Error creating a MFX
>> session: -9.
>> Device creation failed: -1313558101.
>> Failed to set value '/dev/dri/renderD129' for option
>> 'qsv_device':
>> Unknown error occurred
>> Error parsing global options: Unknown error occurred
>>
>>
>> ffmpeg -hide_banner -init_hw_device qsv=hw -filter_hw_device hw
>> -hwaccel_output_format qsv -hwaccel qsv -qsv_device
>> /dev/dri/renderD128 -i h264_8bit_yuv420p.mp4 -f null -
>> [AVHWDeviceContext @ 0x563f568e7e00] Error creating a MFX
>> session: -9.
>> Device creation failed: -1313558101.
>> Failed to set value 'qsv=hw' for option 'init_hw_device': Unknown
>> error occurred
>> Error parsing global options: Unknown error occurred
>>
>>
>>
More information about the ffmpeg-user
mailing list