[FFmpeg-user] init_hw_device qsv for hwaccel on Skylake iGPU + Nvidia GF GPU

Terje Hanssen terjejhanssen at gmail.com
Tue Sep 3 11:52:59 EEST 2024



Den 03.09.2024 03:56, skrev Andrew Randrianasulu:
>
>
> пн, 2 сент. 2024 г., 22:54 Terje Hanssen <terjejhanssen at gmail.com>:
>
>
>     Den 02.09.2024 15:58, skrev Wang, Fei W:
>     > On Mon, 2024-09-02 at 15:29 +0200, Terje J. Hanssen wrote:
>     >>
>     >>
>     >> 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(?)
>     >
>     > Yes, X stands for 8 or 9. To find the Intel device node if vainfo
>     > shows the correct message.
>     >
>     >>
>     >>     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
>     >> ---------------
>     >>
>     >>
>     >> 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?
>     >
>
>     > The command looks good. There are 2 run-time implementation
>     Media SDK
>     > and vpl-gpu-rt for libvpl(
>     > more details can be found on github of libvpl:
>     > https://github.com/intel/libvpl).
>     > While only Media SDK supported on Skylake. So you may check if you
>     > installed Meida SDK on your Skylake
>     > but not vpl-gpu-rt.
>     >
>     > Thanks
>     > Fei
>     >
>     >>
>
>     I only install and have installed related, pre-build distribution
>     packages for openSUSE Tumbleweed Slowroll. Here they are sorted in
>     two
>     lists, to get both the summary descriptions and version numbers,
>     in case
>     something clarify if Media SDK RT is among them(?)
>
>
> may be check also for libmfx?
>

Hi Andrew,
Yes, I also noticed libmfx. But to check that on Skylake, I have to wait 
until next week.
The triple boot menu on my XPS-13/9370 also died, so now I have only 
Ubuntu (from fabric) running and updated on it, as a base Thunderbird 
mail platform :)

Terje


>
>
>
>     zypper se -i nvidia vulkan mesa nouveau intel
>     Laster pakkebrønndata...
>     Leser installerte pakker...
>
>     S  | Name                           | Summary | Type
>     ---+--------------------------------+-------------------------------------------------------------------------+------
>     i+ | intel-gpu-tools                | Collection of tools for
>     development and testing of the Intel DRM driver | pakke
>     i+ | intel-media-driver             | Intel Media Driver for
>     VAAPI                                            | pakke
>     i  | kernel-firmware-intel          | Kernel firmware files for
>     Intel-platform device drivers                 | pakke
>     i  | kernel-firmware-nvidia         | Kernel firmware files for
>     Nvidia
>     Tegra and graphics drivers             | pakke
>     i  | libdrm_intel1                  | Userspace interface for
>     Kernel DRM
>     services for Intel chips             | pakke
>     i  | libdrm_nouveau2                | Userspace interface for
>     Kernel DRM
>     services for NVIDIA chips            | pakke
>     i  | libgstvulkan-1_0-0             | GStreamer Streaming-Media
>     Framework Plug-Ins                            | pakke
>     i  | libnvidia-egl-wayland1         | The EGLStream-based Wayland
>     external platform                           | pakke
>     i+ | libvdpau_nouveau               | VDPAU state tracker for
>     Nouveau                                         | pakke
>     i  | libvulkan1                     | The Vulkan 3D graphics and
>     compute
>     API                                  | pakke
>     i+ | libvulkan_intel                | Mesa vulkan driver for Intel
>     GPU                                        | pakke
>     i  | Mesa                           | System for rendering 3-D
>     graphics                                       | pakke
>     i  | Mesa-demo-x                    | GLX-based
>     demos                                                         | pakke
>     i  | Mesa-dri                       | DRI plug-ins for 3D
>     acceleration                                        | pakke
>     i  | Mesa-gallium                   | Mesa Gallium GPU
>     drivers                                                | pakke
>     i  | Mesa-libEGL1                   | EGL API
>     implementation                                                  |
>     pakke
>     i  | Mesa-libGL1                    | The GL/GLX runtime of the
>     Mesa 3D
>     graphics library                      | pakke
>     i  | Mesa-libglapi0                 | Free implementation of the GL
>     API                                       | pakke
>     i  | Mesa-libva                     | Mesa VA-API
>     implementation                                              | pakke
>     i  | Mesa-vulkan-device-select      | Vulkan layer to select Vulkan
>     devices provided by Mesa                  | pakke
>     i  | nvidia-compute-G06             | NVIDIA driver for computing
>     with
>     GPGPU                                  | pakke
>     i  | nvidia-compute-G06-32bit       | 32bit NVIDIA driver for
>     computing
>     with GPGPU                            | pakke
>     i+ | nvidia-driver-G06-kmp-default  | NVIDIA graphics driver kernel
>     module for GeForce 700 series and newer   | pakke
>     i  | nvidia-gl-G06                  | NVIDIA OpenGL libraries for
>     OpenGL
>     acceleration                         | pakke
>     i  | nvidia-gl-G06-32bit            | 32bit NVIDIA OpenGL
>     libraries for
>     OpenGL acceleration                   | pakke
>     i  | nvidia-video-G06               | NVIDIA graphics driver for
>     GeForce
>     700 series and newer                 | pakke
>     i  | nvidia-video-G06-32bit         | 32bit NVIDIA graphics driver
>     for
>     GeForce 700 series and newer           | pakke
>     i+ | openSUSE-repos-Slowroll-NVIDIA | openSUSE NVIDIA repository
>     definitions                                  | pakke
>     i+ | ucode-intel                    | Microcode Updates for Intel
>     x86/x86-64 CPUs                             | pakke
>     i+ | vulkan-tools                   | Diagnostic utilities for
>     Vulkan                                         | pakke
>
>
>     zypper se -is nvidia vulkan mesa nouveau intel
>     Laster pakkebrønndata...
>     Leser installerte pakker...
>
>     S  | Name                           | Type  | Version               |
>     Arch   | Repository
>     ---+--------------------------------+-------+-----------------------+--------+------------------------
>     i+ | intel-gpu-tools                | pakke | 1.28-3.4              |
>     x86_64 | repo-oss
>     i+ | intel-media-driver             | pakke | 24.1.5-1.1            |
>     x86_64 | repo-oss
>     i  | kernel-firmware-intel          | pakke | 20240809-1.1          |
>     noarch | update-slowroll
>     i  | kernel-firmware-nvidia         | pakke | 20240809-1.1          |
>     noarch | update-slowroll
>     i  | libdrm_intel1                  | pakke | 2.4.122-1.1           |
>     x86_64 | repo-oss
>     i  | libdrm_nouveau2                | pakke | 2.4.122-1.1           |
>     x86_64 | repo-oss
>     i  | libgstvulkan-1_0-0             | pakke | 1.24.6-1.1            |
>     x86_64 | repo-oss
>     i  | libnvidia-egl-wayland1         | pakke | 1.1.15-1.1            |
>     x86_64 | update-slowroll
>     i+ | libvdpau_nouveau               | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i+ | libvdpau_nouveau               | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | libvulkan1                     | pakke | 1.3.290-1.1           |
>     x86_64 | repo-oss
>     i+ | libvulkan_intel                | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i+ | libvulkan_intel                | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa                           | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa                           | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-demo-x                    | pakke | 9.0.0-3.3             |
>     x86_64 | repo-oss
>     i  | Mesa-dri                       | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-dri                       | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-gallium                   | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-gallium                   | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-libEGL1                   | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-libEGL1                   | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-libGL1                    | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-libGL1                    | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-libglapi0                 | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-libglapi0                 | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-libva                     | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-libva                     | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-vulkan-device-select      | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | Mesa-vulkan-device-select      | pakke | 24.1.5-1699.393.pm.1  |
>     x86_64 | Packman
>     i  | nvidia-compute-G06             | pakke | 550.100-25.1          |
>     x86_64 | repo-non-free
>     i  | nvidia-compute-G06             | pakke | 550.100-25.1          |
>     x86_64 | nVidia Graphics Drivers
>     i  | nvidia-compute-G06-32bit       | pakke | 550.100-25.1          |
>     x86_64 | repo-non-free
>     i  | nvidia-compute-G06-32bit       | pakke | 550.100-25.1          |
>     x86_64 | nVidia Graphics Drivers
>     i+ | nvidia-driver-G06-kmp-default  | pakke | 550.100_k6.9.7_1-25.1 |
>     x86_64 | repo-non-free
>     i+ | nvidia-driver-G06-kmp-default  | pakke | 550.100_k6.9.7_1-25.1 |
>     x86_64 | nVidia Graphics Drivers
>     i  | nvidia-gl-G06                  | pakke | 550.100-25.1          |
>     x86_64 | repo-non-free
>     i  | nvidia-gl-G06                  | pakke | 550.100-25.1          |
>     x86_64 | nVidia Graphics Drivers
>     i  | nvidia-gl-G06-32bit            | pakke | 550.100-25.1          |
>     x86_64 | repo-non-free
>     i  | nvidia-gl-G06-32bit            | pakke | 550.100-25.1          |
>     x86_64 | nVidia Graphics Drivers
>     i  | nvidia-video-G06               | pakke | 550.100-25.1          |
>     x86_64 | repo-non-free
>     i  | nvidia-video-G06               | pakke | 550.100-25.1          |
>     x86_64 | nVidia Graphics Drivers
>     i  | nvidia-video-G06-32bit         | pakke | 550.100-25.1          |
>     x86_64 | repo-non-free
>     i  | nvidia-video-G06-32bit         | pakke | 550.100-25.1          |
>     x86_64 | nVidia Graphics Drivers
>     i+ | openSUSE-repos-Slowroll-NVIDIA | pakke | 20240712.dd8c2eb-1.1  |
>     x86_64 | repo-oss
>     i+ | ucode-intel                    | pakke | 20240813-1.1          |
>     x86_64 | update-slowroll
>     i+ | vulkan-tools                   | pakke | 1.3.290-1.1           |
>     x86_64 | repo-oss
>
>     --------------
>
>
>     Beyond sdk/vainfo, I also preserved and add the following ffmpeg test
>     with Vulkan and Vulkan-info output, in case they throw more light
>     on the
>     issue:
>
>         Skylake (i7-6700K/Nvidia)
>         ffmpeg -hide_banner -init_hw_device "vulkan=vk:0" -hwaccel vulkan
>         -hwaccel_output_format vulkan -i h264_8bit_yuv420p.mp4 -f null -
>
>              Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe
>     (native))
>              Press [q] to stop, [?] for help
>              [h264 @ 0x55921d474200] Device does not support the
>         VK_KHR_video_decode_queue extension!
>              [h264 @ 0x55921d474200] Failed setup for format vulkan:
>     hwaccel
>         initialisation returned error.
>         frame= 1780 fps=430 q=-0.0 Lsize=N/A time=00:01:11.20 bitrate=N/A
>         speed=17.2x
>
>
>         vulkaninfo | egrep 'GPU|driver'
>              VK_LUNARG_direct_driver_loading : extension revision 1
>                  GPU id = 0 (Intel(R) HD Graphics 530 (SKL GT2))
>                  GPU id = 1 (NVIDIA GeForce GTX 960)
>                  GPU id = 0 (Intel(R) HD Graphics 530 (SKL GT2))
>                  GPU id = 1 (NVIDIA GeForce GTX 960)
>         GPU id : 0 (Intel(R) HD Graphics 530 (SKL GT2)):
>         GPU id : 1 (NVIDIA GeForce GTX 960):
>         GPU id : 0 (Intel(R) HD Graphics 530 (SKL GT2)):
>         GPU id : 1 (NVIDIA GeForce GTX 960):
>         GPU0:
>              driverVersion     = 24.1.5 (100667397)
>              deviceType        = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
>              driverUUID                        =
>         cc628f46-3d02-8624-0c8a-e98e0420c4f6
>         driverID                                             =
>         DRIVER_ID_INTEL_OPEN_SOURCE_MESA
>         driverName                                           = Intel
>         open-source Mesa driver
>         driverInfo                                           = Mesa 24.1.5
>         VK_KHR_driver_properties                      : extension
>     revision 1
>         GPU1:
>              driverVersion     = 550.100.0.0 (2308505600)
>              deviceType        = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
>              driverUUID                        =
>         63390c76-60ef-5529-a6ac-99167eb42a9c
>         driverID                                             =
>         DRIVER_ID_NVIDIA_PROPRIETARY
>         driverName                                           = NVIDIA
>         driverInfo                                           = 550.100
>         VK_KHR_driver_properties                      : extension
>     revision 1
>
>
>
>
>
>     >>
>     >>>
>     >>>> 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
>     >
>     _______________________________________________
>     ffmpeg-user mailing list
>     ffmpeg-user at ffmpeg.org
>     https://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
>     To unsubscribe, visit link above, or email
>     ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
>


More information about the ffmpeg-user mailing list