Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Firefox/Netflix/Fedora 37 doesn't use video acceleration #1574

Open
Jamstah opened this issue Dec 12, 2022 · 17 comments
Open

[Bug]: Firefox/Netflix/Fedora 37 doesn't use video acceleration #1574

Jamstah opened this issue Dec 12, 2022 · 17 comments
Assignees
Labels
Need Info Need more information from submitter

Comments

@Jamstah
Copy link

Jamstah commented Dec 12, 2022

Which component impacted?

Decode

Is it regression? Good in old configuration?

This is a new configuration so I couldn't say

What happened?

  1. Installed intel-media-driver (rpmfusion)
  2. Disabled av1 in Firefox
  3. Play video in youtube
  4. Check intel_gpu_top and see video acceleration in use
  5. Play video in netflix
  6. Check intel_gpu_top and see no video acceleration in use

Raising here because it looks right in the firefox logs - both sites seem to successfully initialise the va-api decoder.

youtube:

[RDD 268046: MediaSupervisor #2]: D/PlatformDecoderModule FFVPX: FFmpegVideoDecoder::FFmpegVideoDecoder MIME video/vp9 Codec ID 167
[RDD 268046: MediaPDecoder #1]: D/PlatformDecoderModule FFVPX: Initialising VA-API FFmpeg decoder
[RDD 268046: MediaPDecoder #1]: D/PlatformDecoderModule FFVPX:   Format vp9 is accelerated
[RDD 268046: MediaPDecoder #1]: D/PlatformDecoderModule FFVPX:   codec vp9 : Google VP9
libva info: VA-API version 1.16.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_16
libva info: va_openDriver() returns 0
...
[AVHWDeviceContext @ 0x7f90abb36d80] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 22.5.4 ().
[AVHWDeviceContext @ 0x7f90abb36d80] Driver not found in known nonstandard list, using standard behaviour.
[RDD 268046: MediaPDecoder #1]: D/PlatformDecoderModule FFVPX:   VA-API FFmpeg init successful

netflix:

[RDD 268046: MediaSupervisor #4]: D/PlatformDecoderModule FFVPX: FFmpegVideoDecoder::FFmpegVideoDecoder MIME video/vp9 Codec ID 167
[RDD 268046: MediaPDecoder #1]: D/PlatformDecoderModule FFVPX: Initialising VA-API FFmpeg decoder
[RDD 268046: MediaPDecoder #1]: D/PlatformDecoderModule FFVPX:   Format vp9 is accelerated
[RDD 268046: MediaPDecoder #1]: D/PlatformDecoderModule FFVPX:   codec vp9 : Google VP9
libva info: VA-API version 1.16.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_16
libva info: va_openDriver() returns 0

[AVHWDeviceContext @ 0x7f90abb36e00] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 22.5.4 ().
[AVHWDeviceContext @ 0x7f90abb36e00] Driver not found in known nonstandard list, using standard behaviour.
[RDD 268046: MediaPDecoder #1]: D/PlatformDecoderModule FFVPX:   VA-API FFmpeg init successful

What's the usage scenario when you are seeing the problem?

Playback, Web browser

What impacted?

Video acceleration

Debug Information

jammy:~$ rpm -qa | grep libva
libva-2.16.0-1.fc37.x86_64
libva-utils-2.16.0-1.fc37.x86_64
libva-intel-driver-2.4.1-9.fc37.x86_64
jammy:~$ rpm -qa | grep intel-media-driver
intel-media-driver-22.5.4-1.fc37.x86_64
jammy:~$ ls /dev/dri
by-path  card0  card1  renderD128  renderD129
jammy:~$ vainfo
Trying display: wayland
libva info: VA-API version 1.16.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_16
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.16 (libva 2.16.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.5.4 ()
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
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointFEI
      VAProfileHEVCMain               :	VAEntrypointEncSliceLP
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointEncSliceLP
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile1            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD
      VAProfileVP9Profile3            :	VAEntrypointVLD
      VAProfileHEVCMain12             :	VAEntrypointVLD
      VAProfileHEVCMain12             :	VAEntrypointEncSlice
      VAProfileHEVCMain422_10         :	VAEntrypointVLD
      VAProfileHEVCMain422_10         :	VAEntrypointEncSlice
      VAProfileHEVCMain422_12         :	VAEntrypointVLD
      VAProfileHEVCMain422_12         :	VAEntrypointEncSlice
      VAProfileHEVCMain444            :	VAEntrypointVLD
      VAProfileHEVCMain444            :	VAEntrypointEncSliceLP
      VAProfileHEVCMain444_10         :	VAEntrypointVLD
      VAProfileHEVCMain444_10         :	VAEntrypointEncSliceLP
      VAProfileHEVCMain444_12         :	VAEntrypointVLD
      VAProfileHEVCSccMain            :	VAEntrypointVLD
      VAProfileHEVCSccMain            :	VAEntrypointEncSliceLP
      VAProfileHEVCSccMain10          :	VAEntrypointVLD
      VAProfileHEVCSccMain10          :	VAEntrypointEncSliceLP
      VAProfileHEVCSccMain444         :	VAEntrypointVLD
      VAProfileHEVCSccMain444         :	VAEntrypointEncSliceLP
      VAProfileAV1Profile0            :	VAEntrypointVLD
      VAProfileHEVCSccMain444_10      :	VAEntrypointVLD
      VAProfileHEVCSccMain444_10      :	VAEntrypointEncSliceLP

With trace - output for trying youtube or netflix is exactly the same:

jammy:tmp$ cat libva_trace.log.131346.thd-0x00043510 
[10506.639665][ctx       none]==========va_TraceInitialize
[10506.639668][ctx       none]=========vaInitialize ret = VA_STATUS_SUCCESS, success (no error) 
[10506.639672][ctx       none]=========vaQueryConfigProfiles ret = VA_STATUS_SUCCESS, success (no error) 
[10506.639674][ctx       none]=========vaQueryConfigEntrypoints ret = VA_STATUS_SUCCESS, success (no error) 
[10506.639676][ctx       none]==========va_TraceCreateConfig
[10506.639676][ctx       none]	profile = 6, VAProfileH264Main
[10506.639676][ctx       none]	entrypoint = 1, VAEntrypointVLD
[10506.639677][ctx       none]	num_attribs = 0
[10506.639682][ctx       none]=========vaCreateConfig ret = VA_STATUS_SUCCESS, success (no error) 
[10506.639682][ctx       none]==========va_TraceDestroyConfig
[10506.639682][ctx       none]	config = 0x00000000
[10506.639684][ctx       none]=========vaDestroyConfig ret = VA_STATUS_SUCCESS, success (no error) 
[10506.640028][ctx       none]==========va_TraceTerminate
[10506.640030][ctx       none]=========vaTerminate ret = VA_STATUS_SUCCESS, success (no error) 

Do you want to contribute a patch to fix the issue?

If I knew what I was doing I'd be happy to but I expect its beyond my knowledge :)

@eero-t
Copy link

eero-t commented Dec 19, 2022

On which HW this is on?

@Jamstah
Copy link
Author

Jamstah commented Dec 19, 2022

Lenovo P51 with Optimus. The Intel part is Intel Corporation TigerLake-H GT1

jammy:~$ sudo lspci
[sudo] password for jammy: 
00:00.0 Host bridge: Intel Corporation 11th Gen Core Processor Host Bridge/DRAM Registers (rev 05)
00:01.0 PCI bridge: Intel Corporation 11th Gen Core Processor PCIe Controller #1 (rev 05)
00:02.0 VGA compatible controller: Intel Corporation TigerLake-H GT1 [UHD Graphics] (rev 01)
00:04.0 Signal processing controller: Intel Corporation TigerLake-LP Dynamic Tuning Processor Participant (rev 05)
00:06.0 PCI bridge: Intel Corporation 11th Gen Core Processor PCIe Controller #0 (rev 05)
00:07.0 PCI bridge: Intel Corporation Tiger Lake-H Thunderbolt 4 PCI Express Root Port #0 (rev 05)
00:07.1 PCI bridge: Intel Corporation Tiger Lake-H Thunderbolt 4 PCI Express Root Port #1 (rev 05)
00:0d.0 USB controller: Intel Corporation Tiger Lake-H Thunderbolt 4 USB Controller (rev 05)
00:0d.2 USB controller: Intel Corporation Tiger Lake-H Thunderbolt 4 NHI #0 (rev 05)
00:14.0 USB controller: Intel Corporation Tiger Lake-H USB 3.2 Gen 2x1 xHCI Host Controller (rev 11)
00:14.2 RAM memory: Intel Corporation Tiger Lake-H Shared SRAM (rev 11)
00:16.0 Communication controller: Intel Corporation Tiger Lake-H Management Engine Interface (rev 11)
00:16.3 Serial controller: Intel Corporation Device 43e3 (rev 11)
00:1c.0 PCI bridge: Intel Corporation Device 43b8 (rev 11)
00:1c.4 PCI bridge: Intel Corporation Tiger Lake-H PCI Express Root Port #5 (rev 11)
00:1c.5 PCI bridge: Intel Corporation Device 43bd (rev 11)
00:1c.7 PCI bridge: Intel Corporation Device 43bf (rev 11)
00:1d.0 PCI bridge: Intel Corporation Tiger Lake-H PCI Express Root Port #9 (rev 11)
00:1f.0 ISA bridge: Intel Corporation Device 4389 (rev 11)
00:1f.3 Multimedia audio controller: Intel Corporation Tiger Lake-H HD Audio Controller (rev 11)
00:1f.4 SMBus: Intel Corporation Tiger Lake-H SMBus Controller (rev 11)
00:1f.5 Serial bus controller: Intel Corporation Tiger Lake-H SPI Controller (rev 11)
01:00.0 VGA compatible controller: NVIDIA Corporation TU117GLM [T1200 Laptop GPU] (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 10fa (rev a1)
04:00.0 Non-Volatile memory controller: Micron Technology Inc Device 5407
05:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
09:00.0 Network controller: Intel Corporation Wi-Fi 6 AX210/AX211/AX411 160MHz (rev 1a)
0a:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS525A PCI Express Card Reader (rev 01)
0b:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-LM (rev 03)

@eero-t
Copy link

eero-t commented Jan 18, 2023

Optimus part sounds suspicious. Maybe those applications are just using the wrong video driver, or maybe Fusion package is disabling support for whatever codec Netflix tries to use in browser?

I think you should file this bug against Fedora, and its Firefox (or Fusion driver) package.

@Jamstah
Copy link
Author

Jamstah commented Jan 18, 2023

Looking at the logs they are both using vp9 and both going through the same vaapi interface, which is why I raised it here.

Is there a way to trace what input the media-driver is getting? To raise the bug elsewhere I'd need some sort of evidence to show that media-driver is being driven differently (ie incorrectly) in one case or the other.

@eero-t
Copy link

eero-t commented Jan 18, 2023

Looking at the logs they are both using vp9 and both going through the same vaapi interface, which is why I raised it here.

Is there a way to trace what input the media-driver is getting? To raise the bug elsewhere I'd need some sort of evidence to show that media-driver is being driven differently (ie incorrectly) in one case or the other.

I'm not involved with media-driver development, but maybe @dvrogozh could help?

@XinfengZhang
Copy link
Contributor

LIBVA_TRACE could help to dump the input of media_driver. you could use this env variable.

@Jamstah
Copy link
Author

Jamstah commented Jan 18, 2023

I think that's what I used above, but I can see its not clear. When I get a chance I'll go again with a trace from youtube and a trace from netflix.

@Jamstah
Copy link
Author

Jamstah commented Jan 18, 2023

Trace output appears the same when I try netflix or youtube - does the example in the description look like the full trace data to you or am I missing some output somewhere?

@XinfengZhang XinfengZhang added the Need Info Need more information from submitter label May 6, 2023
@XinfengZhang
Copy link
Contributor

if you want more logs in media driver
please refer:
https://github.com/intel/media-driver/wiki/Video-Processing-Debug-Tool#how-to-dump-vp-hlt-log
you also could get parameters and dumps by
https://github.com/intel/media-driver/wiki/Decode-and-Encode-Debug-Tool-and-surface-dump

and from the log you attached:
[10506.639665][ctx none]==========va_TraceInitialize
[10506.639668][ctx none]=========vaInitialize ret = VA_STATUS_SUCCESS, success (no error)
[10506.639672][ctx none]=========vaQueryConfigProfiles ret = VA_STATUS_SUCCESS, success (no error)
[10506.639674][ctx none]=========vaQueryConfigEntrypoints ret = VA_STATUS_SUCCESS, success (no error)
[10506.639676][ctx none]==========va_TraceCreateConfig
[10506.639676][ctx none] profile = 6, VAProfileH264Main
[10506.639676][ctx none] entrypoint = 1, VAEntrypointVLD
[10506.639677][ctx none] num_attribs = 0
[10506.639682][ctx none]=========vaCreateConfig ret = VA_STATUS_SUCCESS, success (no error)
[10506.639682][ctx none]==========va_TraceDestroyConfig
[10506.639682][ctx none] config = 0x00000000
[10506.639684][ctx none]=========vaDestroyConfig ret = VA_STATUS_SUCCESS, success (no error)
[10506.640028][ctx none]==========va_TraceTerminate
[10506.640030][ctx none]=========vaTerminate ret = VA_STATUS_SUCCESS, success (no error)

it just create one H264 decode config, nothing valuable.

it is why I want full LIBVA log. because there are some negotiation process, and also real context creation.

@caniko
Copy link

caniko commented Jul 1, 2023

I can attest that I am also noticing this when watching videos on both Brave and Librewolf. I am on Arch Linux, with intel-media-driver-git. My GPU is A770 BiFrost from Acer with 16Gb (still waiting for fancurve support 👀).

image

@eero-t
Copy link

eero-t commented Jul 3, 2023

I can attest that I am also noticing this when watching videos on both Brave and Librewolf. I am on Arch Linux, with intel-media-driver-git. My GPU is A770 BiFrost from Acer with 16Gb (still waiting for fancurve support eyes).

In general "application A does not use video acceleration for codec X in distro Y", should be filed against corresponding distro and app, and it can depend on what config options you have enabled in the app. Can you link those tickets?

PS. As to video acceleration itself and how it shows in intel_gpu_top, that depends on what application requests from the video driver. HW accelerated encoding can go to GPU compute side (unless low power support is explicitly requested, and given parameters are such that it can be supported on the fixed video HW), which intel_gpu_top shows on client platforms as Render/3D usage. AFAIK decoding should be done with GPU video HW though, but I'm not the driver developer, so cannot say for sure.

@caniko
Copy link

caniko commented Jul 3, 2023

In general "application A does not use video acceleration for codec X in distro Y", should be filed against corresponding distro and app, and it can depend on what config options you have enabled in the app. Can you link those tickets?

@eero-t this take is completely wrong, please let the following be a lesson. Distros are relatively minor configurations to the underlying foundation of what is often the Linux kernel + systemd, the applications running on top aside from versions are the same across distributions. There are of course several exceptions/gotchas in this simplified view; moreover, those don't matter when it comes to the browser applications. In this case Librewolf and chromium will not use the Intel GPU decoder on several occasions even with the right drivers installed!

One of these occasions hit me, and I managed to solve it (sorry for not updating earlier). If you are on Intel Arc, check this out for firefox -> librewolf.

To say that I should refer to my distribution forum assumes that those that created the distro didn't install the necessary drivers, and it is, in my eyes, a very lazy comment. This is an Intel issue.

@eero-t
Copy link

eero-t commented Jul 3, 2023

To say that I should refer to my distribution forum assumes that those that created the distro didn't install the necessary drivers, and it is, in my eyes, a very lazy comment. This is an Intel issue.

There can be many reasons why app is not actually using the HW driver. Browsers are known to (occasionally) toggle support for different HW drivers from version to version [1], distros are known to (rarely) disable codecs in the driver, users can (sometimes) have stale configs that disable HW support [1], browsers can be sandboxed so that video device usage is prohibited (#1376 (comment)), env vars specifying the correct driver might not get through to these sandboxes etc.

Do you have some evidence that the application is trying to use Intel media driver, i.e. that your issue is related to this project?

(As your comment did not have that info, and did not list versions for of any of the related components, I was hoping that you could provide a link to something providing those.)

Then, more importantly, you would need to provide information on what exactly that application is requesting from the media driver, in that specific use-case. So that driver developers (i.e. not me) can actually look into it, try reproduce the issue etc.

A minimal test-case may also be needed, if issue cannot be replicated with an actual media CLI tool like FFmpeg. Not just to debug the issue, but to validate the fix before adding it to driver.

That can be quite a bit of work, so most users are "too lazy" to provide all these required details of what actually is failing. That's why it can often be better for users to file bugs / comment on application/distro bug trackers, so that their developers who actually know the required details, can file the driver bugs, and link them back to app bug(s).

EDIT: added minor clarifications + fine-tuned the text for readability.


[1] Brave seems to be Chromium based: https://en.wikipedia.org/wiki/Brave_(web_browser)

On quick look, Chromium has several flags affecting HW decoding support:

  • disable-accelerated-video-decode
  • use-out-of-process-video-decoding
  • use-mojo-video-decoder-for-pepper (apparently for Flash player plugin)
  • passthrough-yuv-rgb-conversion
  • use-multi-plane-format-for-hardware-video

And more flags affecting video encoding support.

See: chrome://flags/

@eero-t
Copy link

eero-t commented Jul 3, 2023

One of these occasions hit me, and I managed to solve it (sorry for not updating earlier). If you are on Intel Arc, check this out for firefox -> librewolf.

While it's nice for media-driver Wiki to document how to enforce applications to use HW acceleration, I don't think that's the place where most users would search for it. IMHO application options should be primarily documented in application's own documentation and / or distros offering them.

As you mentioned using Arch Linux, I checked its docs on browsers: https://wiki.archlinux.org/title/Category:Web_browser

It does not list Brave, but as Brave is Chromium based, I guess this can be used: https://wiki.archlinux.org/title/Chromium

Which states that "By default Chromium on Linux does not use any GPU acceleration".

@caniko
Copy link

caniko commented Jul 3, 2023

Do you have some evidence that the application is trying to use Intel media driver, i.e. that your issue is related to this project?

╰─λ brave --disable-gpu-driver-bug-workarounds --ignore-gpu-blocklist --enable-gpu-rasterization --enable-zero-copy --enable-features=VaapiVideoDecoder --disable-features=UseChromeOSDirectVideoDecoder
[745146:745146:0703/211052.442748:ERROR:chrome_browser_cloud_management_controller.cc(162)] Cloud management controller initialization aborted as CBCM is not enabled.
[745185:745185:0703/211057.868511:ERROR:vaapi_wrapper.cc(2827)] vaPutSurface failed, VA error: invalid parameter
[745185:745185:0703/211057.868687:ERROR:vaapi_video_decode_accelerator.cc(287)] Failed putting surface into pixmap

A minimal test-case may also be needed, if issue cannot be replicated with an actual media CLI tool like FFmpeg. Not just to debug the issue, but to validate the fix before adding it to driver.

When I run videos on VLC and ffmpeg, it uses the video decoder ASIC. I am not going to prove that here, it should be a given when I post my issue. And I should be ridiculed if someone asks me, and I check and see it not working.


To @eero-t:

Which states that "By default Chromium on Linux does not use any GPU acceleration".

This has nothing to do with the problem.

On quick look, Chromium has several flags affecting HW decoding support:

These flags don't work on Intel Arc, at least on my A770 16 Gb, and a bunch of other people in the community (reproduced three times so far). This is a bug on the Intel Arc side because the driver throws errors, or you could put the blame on chromium s the driver does say invalid parameters. Nonetheless, you are wasting our time and mind space with useless ideals on how things should be, when we can just get down to the problem.

Then, more importantly, you would need to provide information on what exactly that application is requesting from the media driver, in that specific use-case. So that driver developers (i.e. not me) can actually look into it, try reproduce the issue etc.

I don't need to do anything especially not what you think I should be doing.

That can be quite a bit of work, so most users are "too lazy" to provide all these required details of what actually is failing. That's why it can often be better for users to file bugs / comment on application/distro bug trackers, so that their developers who actually know the required details, can file the driver bugs, and link them back to app bug(s).

That is your self-righteous opinion, and while some do share it, I don't.

I must point out the fact that you are not only defending your initial post by building on previous arguments, but rather choosing to pivot to newer arguments, I have stooped to your level of auto-ego-boosting by replying to each question. For me it stops here, good luck. UwU. UwU.

@eero-t
Copy link

eero-t commented Jul 4, 2023

╰─λ brave --disable-gpu-driver-bug-workarounds --ignore-gpu-blocklist --enable-gpu-rasterization --enable-zero-copy --enable-features=VaapiVideoDecoder --disable-features=UseChromeOSDirectVideoDecoder
[745146:745146:0703/211052.442748:ERROR:chrome_browser_cloud_management_controller.cc(162)] Cloud management controller initialization aborted as CBCM is not enabled.
[745185:745185:0703/211057.868511:ERROR:vaapi_wrapper.cc(2827)] vaPutSurface failed, VA error: invalid parameter
[745185:745185:0703/211057.868687:ERROR:vaapi_video_decode_accelerator.cc(287)] Failed putting surface into pixmap

That is from Chromium: https://chromium.googlesource.com/chromium/src/+/refs/heads/main/media/gpu/vaapi/

Intel media driver does not have files named as such.

I.e. above tells just that Chromium failed to use VA-API. Even if the error came up from Intel media driver, it just tells that Chromium used it wrong, which seems more like Browser than driver issue.

A minimal test-case may also be needed, if issue cannot be replicated with an actual media CLI tool like FFmpeg. Not just to debug the issue, but to validate the fix before adding it to driver.

When I run videos on VLC and ffmpeg, it uses the video decoder ASIC. I am not going to prove that here, it should be a given when I post my issue.

I had assumed you had working drivers below Chromium, but it's good to get confirmation.

And I should be ridiculed if someone asks me, and I check and see it not working.

I do not know why you thought so. I just stated that you did not provide enough information.

(I tend to be to quite verbose / detailed, but that happens with everybody. My manager complains about it.)

On quick look, Chromium has several flags affecting HW decoding support:

These flags don't work on Intel Arc, at least on my A770 16 Gb, and a bunch of other people in the community (reproduced three times so far).

It would be nice if you could file bug(s) about that to Chromium project (and add links here).

This is a bug on the Intel Arc side because the driver throws errors, or you could put the blame on chromium s the driver does say invalid parameters. Nonetheless, you are wasting our time and mind space with useless ideals on how things should be, when we can just get down to the problem.

Media driver / HW supports only specific codecs, formats etc: https://github.com/intel/media-driver/blob/master/docs/media_features.md

I would assume VA-API to have query functions for what is supported. I.e. Chromium should either use the supported formats (preferred), convert the formats itself, or use SW fallbacks.

While media driver may be able to support additional image formats with (compute) shaders, the format specifics need to be identified first, and Browser needs to first verify that such usage is not a bug on their side.

(Just one Browser variant using some specific format just raises question why other Browser variants work fine without it.)

If you'd rather like to debug and provide those details yourself, instead of filing bug against Chromium, comment above has info on how to trace what apps request from the media driver.

PS. This bug was (originally) about Firefox on Fedora (which disables some things in drivers). Your issue is about Chromium/Arch issues. Separate bug report would have been better. :-/

@kwizart
Copy link

kwizart commented Feb 2, 2024

(fedora/rpmfusion libva/media-driver maintainer speaking)
As I understand, chromium might need a non-upstream serie to enable vaapi by default:
See also https://chromium-review.googlesource.com/c/chromium/src/+/3646633

For firefox, there is a dedicated page and some options might be needed (disabling sandboxing was needed some time ago)
Here is the reference page: https://fedoraproject.org/wiki/Firefox_Hardware_acceleration

Of course, testing that "mpv -hwdec" works is a preliminary step before looking at the browser support.
But as Fedora is concerned, please verify that you have rpmfusion-free ffmpeg-libs (as fedora provided ffmpeg has H264/H265 vaapi support disabled).

Also there might be case were the backend are not properly discovered (DRI3 with Xwayland on browsers) ?
See also intel/libva#727

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Need Info Need more information from submitter
Projects
None yet
Development

No branches or pull requests

7 participants