LINUX.ORG.RU

Ускорение видео в Firefox на AMD

 , , , ,


0

3

Запускаю Firefox на ноутбуке с AMD Athlon 300U и встроенной видеокартой Vega 3.

DE – Gnome 44 на Wayland.

В about:support:

Window Protocol: wayland

WebGPU Default Adapter: { "navigator.gpu": null }

WebGPU Fallback Adapter: { "navigator.gpu": null }

GPU #1
Active	Yes
Description	AMD Radeon Vega 3 Graphics (raven2, LLVM 15.0.7, DRM 3.49, 6.1.38)
Vendor ID	0x1002
Device ID	0x15d8
Driver Vendor	mesa/radeonsi
Driver Version	23.0.3.0
RAM	0

HARDWARE_VIDEO_DECODING	
default	available		
runtime	unavailable

То есть, по идее Firefox видит видеокарту и ускорение включено. Однако при включенном видео на Youtube нагрузка на процессор 25-40% постоянно. Если переключить вкладку и слушать в фоне, падает до 10%. С видео на паузе нагрузка до 4%.

Как можно форсировать аппаратное ускорение в Firefox на Wayland? Хромообразные, думаю, совсем не поддерживают ускорение.

Если что, OS – Nixos 23.05.

★★

Последнее исправление: the_real_kinik (всего исправлений: 1)

Однако при включенном видео на Youtube нагрузка на процессор 25-40% постоянно.

Смотри на утилизацию декодера в amdgpu_top. Ютуб какой-только хренью не занимается помимо воспроизведения видео

MagicMirror
()

Хромообразные полностью, полностью поддерживают аппаратное ускорение.

Без каких либо модуляций, rx560:

Graphics Feature Status
Canvas: Hardware accelerated
Canvas out-of-process rasterization: Enabled
Direct Rendering Display Compositor: Enabled
Compositing: Hardware accelerated
Multiple Raster Threads: Enabled
OpenGL: Enabled
Rasterization: Hardware accelerated
Raw Draw: Disabled
Skia Graphite: Disabled
Video Decode: Hardware accelerated
Video Encode: Software only. Hardware acceleration disabled
Vulkan: Enabled
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
WebGPU: Hardware accelerated
Rossiks
()
Последнее исправление: Rossiks (всего исправлений: 2)
Ответ на: комментарий от eternal_sorrow

media.ffmpeg.vaapi.enabled=true

В Firefox произошёл какой-то идиотизм, и теперь этот параметр не работает. По крайней мере, я вижу, что у меня он в значении по умолчанию, false, но при этом используется VA-API. Плохо себе представляю, как можно было додуматься сделать основной выключатель неработоспособным.

i-rinat ★★★★★
()
Ответ на: комментарий от Rossiks

Хромообразные полностью, полностью поддерживают аппаратное ускорение.

Video Decode: Hardware accelerated

Эта строчка — ложь. Chromium очень давно так врёт.

Прямо сейчас проверил 114.0.5735.198 на тестовой странице с видео. Видео играет, но intel_gpu_top показывает нулевую нагрузку на аппаратный декодер. Так что декодирование видео в Chromium программное.

В Chrome 114.0.5735.198 поведение аналогичное. Тоже пишет, что якобы использует декодер, но на самом деле не использует.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

В Firefox произошёл какой-то идиотизм, и теперь этот параметр не работает. По крайней мере, я вижу, что у меня он в значении по умолчанию, false, но при этом используется VA-API. Плохо себе представляю, как можно было додуматься сделать основной выключатель неработоспособным.

FFVPX просто теперь работает нормально и включено по дефолту, насколько я понимаю. media.ffvpx.enabled=false – и vaapi использоваться перестанет.

i586 ★★★★★
()
Ответ на: комментарий от i-rinat

В Firefox произошёл какой-то идиотизм, и теперь этот параметр не работает.

Наверно из-за этого:
Включено аппаратное ускорение декодирования видео (VA-API) в системах с графическим процессором Intel.
Firefox 115

krasnh ★★★
()

Хромообразные, думаю, совсем не поддерживают ускорение.

Если что, OS – Nixos 23.05.

Да ну:
Opera One(версия: 100.0.4815.54)

Graphics Feature Status
Canvas: Hardware accelerated
Canvas out-of-process rasterization: Enabled
Direct Rendering Display Compositor: Disabled
Compositing: Hardware accelerated
Multiple Raster Threads: Enabled
OpenGL: Enabled
Rasterization: Hardware accelerated
Raw Draw: Enabled
Video Decode: Hardware accelerated
Video Encode: Software only. Hardware acceleration disabled
Vulkan: Disabled
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
WebGPU: Disabled

Vendor: X.Org (0x1002)
Device: AMD CEDAR (DRM 2.50.0 / 6.4.3-1-liquorix-amd64, LLVM 15.0.7) (0x68e0)
Version: 22.2.5 Accelerated: yes

hbars ★★★★★
()
Последнее исправление: hbars (всего исправлений: 1)

Хромообразные, думаю, совсем не поддерживают ускорение. Если что, OS – Nixos 23.05.

Делаешь так и начинают уметь:

{ config, pkgs, lib, ... }:
{
  environment.systemPackages = [
    (
      pkgs.chromium.override {
        commandLineArgs = lib.concatStringsSep " " [
          "--enable-gpu-rasterization"
          "--enable-oop-rasterization"
          "--enable-gpu-compositing"
          "--enable-accelerated-2d-canvas"
          "--enable-zero-copy"
          "--canvas-oop-rasterization"
          "--disable-features=UseChromeOSDirectVideoDecoder"
          "--enable-accelerated-video-decode"
          "--enable-accelerated-video-encode"
          "--enable-features=VaapiVideoDecoder,VaapiVideoEncoder,VaapiIgnoreDriverChecks"
          "--enable-hardware-overlays"
          "--force-dark-mode"
        ];
      }
    )
  ];
}
Tsukasa
()
Последнее исправление: Tsukasa (всего исправлений: 1)

Хорошо известо, что аппаратное декодирование в браузерах непостижимая магия для линукс. Хотя в остальных ОС оно давно и тихо работает безо всяких заклинаний в конфигах.

ox55ff ★★★★★
()
Ответ на: комментарий от NonameKiriLL

Я не собираюсь всякое тащить, что бы что-то кому-то показать.

Писал выше, что с отключённом видео декором нагрузка на cpu 45-50%, c включенном макс 7-10%.

Для меня, это убеленный аргумент.Если для вас нет, это ваши проблемы.

Rossiks
()
Последнее исправление: Rossiks (всего исправлений: 2)
Ответ на: комментарий от i586

Оказывается, у меня уже media.ffvpx.enabled был установлен в false. Но декодер явно задействован, по выводу intel_gpu_top видно. К тому же я проверял на H.264, которого по лицензионным опасениям в ffvpx нет.

i-rinat ★★★★★
()
Ответ на: комментарий от krasnh

Наверно из-за этого

Включено

Я понимаю media.ffmpeg.vaapi.enabled, как и любые другие параметры с «enabled» в названии как некий глобальный рубильник, который выбирает, будет ли браузер вообще смотреть в сторону использования технологии. Если она в true, то значит можно пробовать. Если самой реализации технологии на платформе нет, то не получится. Если текущая конфигурация попадает в чёрные списки, то не получится. То есть enabled в true не означает пробовать во что бы то ни стало. Для принудительного включения в Firefox традиционно используют *.force-enabled. Но вот если .enabled в false, это означает даже не пробовать. Администратор системы решил, что вот это не включать, так что не нужно включать.

К примеру, есть настройка browser.search.suggest.enabled. Если она в true, Firefox ходит в поисковую систему и получает у неё подсказки для строки поиска. Но если она в false, он туда даже не посылает запрос. Выключено означает выключено.

А тут решили, что, мол, «выключено» это не для нас, мы выше этого. Мы сами за пользователя решим, поэтому выключатель нам не указ.

Я считаю, это проблема QA. Даже если разработчик ошибся, такое не стоило пропускать в релиз.

i-rinat ★★★★★
()
Ответ на: комментарий от Rossiks

Попробовал переместить драйвера VA-API так, чтобы libva их не находил. Сравнил загрузку CPU в обоих случаях, с доступными драйверами и без. В обоих случаях загрузка одинаковая, причём частоты CPU тоже одинаковые. Так что разницы нет.

У тебя просто эффект плацебо.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Фокс сейчас переходит на новую стратегию - вместо того чтобы включать это декодирование фокс пробует железо на поддержку кодеков и если результат пробы положительный - хардверный декодинг разрешается, если нет - то уходит в софт.

Причем делается это не по принципу разрешено-запрещено, а с каждым кодеком отдельно. Вот например картинка для моего 6800u и 116beta7 + еще один патчик который приземлится в beta8, потому как эта стратегия включения кодеков хоть и более идеологически правильная чем about:config но еще до конца не допилена. Особенно в Xorg

Codec Name Software Decoding Hardware Decoding

H264 Supported Supported

VP8 Supported Unsupported

VP9 Supported Supported

AV1 Supported Supported

Theora Supported Unsupported

AAC Supported Unsupported

FLAC Supported Unsupported

MP3 Supported Unsupported

Opus Supported Unsupported

Vorbis Supported Unsupported

Wave Supported Unsupported

Qui-Gon ★★★★★
()
Последнее исправление: Qui-Gon (всего исправлений: 1)
Ответ на: комментарий от Qui-Gon

Это всё понятно, но имеет смысл делать только если media.ffmpeg.vaapi.enabled установлено в true. Можно даже его по умолчанию поставить в true, чтобы не объяснять каждому пользователю, как включить. Но если эта настройка в false, это глобальное отключение без вопросов.

Может, у меня сбойный драйвер, который подвешивает систему намертво от отдельных видео? Должна быть настройка, которая говорит Firefox’у, мол, даже не пробуй. А её теперь нет. И это плохо.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Мне не нужно не чего перемещать, у меня видеокарта не умеет vp9. По этому я использую расширения для браузера h264ify. Так вот когда я его отключаю,нагрузка на процессор увеличивается на порядок.

У htop тоже эффект плацебо? Это у вас, какие то сектантский убеждения. И chrome://gpu врёт, и разница в нагрузки на CPU почти в 10 раз, это не аргумент.

Rossiks
()
Ответ на: комментарий от i-rinat

Как я понял, там есть несколько механизмов, основанных на vaapi. C использованием ffmpeg - один из них, довольно старый. Но в новых версиях firefox сделали другой механизм аппаратного ускорения, который не пользуется ffmpeg, но все равно основан на libva.

Khnazile ★★★★★
()
Ответ на: комментарий от Rossiks

видеокарта не умеет vp9. По этому я использую расширения для браузера h264ify

Программное декодирование H.264 заметно проще программного декодирования VP9. Вот эту разницу ты и видишь.

i-rinat ★★★★★
()
Ответ на: комментарий от Rossiks

Что я вижу? Какая разница проще или нет.

Видишь разницу в загрузке CPU. Для декодирования VP9 нужно сделать больше вычислений, чем для декодирования H.264. Для декодирования AV1 нужно производить ещё больше вычислений, чем для декодирования VP9. (Это обычно так. Конечно, при большом желании можно извернуться и найти такие параметры кодирования, что VP9 будет декодироваться быстрее H.264, но для этого нужно качество видео загрубить, так что никто в здравом уме так не делает.)

Расширение h264ify подменяет некоторые Javascript API, и сайты вместо VP9 и AV1 отдают тебе H.264. Все форматы видео декодируются программно, но скажем, для декодирования секунды H.264 видео нужно произвести одну единицу работы, для декодирования секунды VP9 — три единицы работы, а для декодирования AV1 — девять единиц работы. Поэтому без h264ify браузер декодирует AV1 и тратит девять единиц работы в секунду, а с h264ify браузер декодирует H.264 и тратит одну единицу работы в секунду. Так понятно?

Просто моя видеокарты, не поддерживает декодирования vp9 с завода.

И что? Даже если бы умела, Chromium это умение не использует, а использует библиотеку libvpx, декодируя на CPU.

i-rinat ★★★★★
()
Ответ на: комментарий от Khnazile

Но в новых версиях firefox сделали другой механизм аппаратного ускорения, который не пользуется ffmpeg, но все равно основан на libva.

Нет, это заблуждение.

Для декодирования через VA-API неизбежно придётся вызывать vaEndPicture(). Это часть основного цикла, без него никак. Ищем vaEndPicture в исходниках Firefox 115.0.2:

$ grep -R vaEndPicture
firefox-115.0.2/media/ffvpx/libavcodec/vaapi_decode.c:    vas = vaEndPicture(ctx->hwctx->display, ctx->va_context);
firefox-115.0.2/media/ffvpx/libavcodec/vaapi_decode.c:    vas = vaEndPicture(ctx->hwctx->display, ctx->va_context);
firefox-115.0.2/media/mozva/va/va.h: *     vaEndPicture(dpy, decode_context);
firefox-115.0.2/media/mozva/va/va.h: *     vaEndPicture(dpy, encode_context);
firefox-115.0.2/media/mozva/va/va.h: *  After association removed vaEndPicture will submit tasks, but not vaMFSubmit.
firefox-115.0.2/media/mozva/va/va.h:VAStatus vaEndPicture(
firefox-115.0.2/media/mozva/va/va.h: * through vaBeginPicture vaRenderPicture vaEndPicture call sequence.
firefox-115.0.2/media/mozva/mozva.c:static VAStatus (*vaEndPictureFn)(VADisplay dpy, VAContextID context);
firefox-115.0.2/media/mozva/mozva.c:    GET_FUNC(vaEndPicture, sVALib);
firefox-115.0.2/media/mozva/mozva.c:         IS_FUNC_LOADED(vaEndPicture) && IS_FUNC_LOADED(vaRenderPicture) &&
firefox-115.0.2/media/mozva/mozva.c:VAStatus vaEndPicture(VADisplay dpy, VAContextID context) {
firefox-115.0.2/media/mozva/mozva.c:    return vaEndPictureFn(dpy, context);
$ 

Ffvpx это просто переименованный FFmpeg. Mozva это такая статическая библиотека, которая подгружает libva.so и вызывает функции из неё.

Так что нет там отдельного механизма. Вся работа производится через FFmpeg.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Видеокарта RX 560 может декодировать видеокодеки H.264/AVC, VC-1, MPEG-2 и HEVC/H.265. Она также может поддерживать декодирование VP9 через программное обеспечение.

У вас каша в голове, кушайте её сами. А я устал от вас.

Rossiks
()
Ответ на: комментарий от i-rinat

Прямо сейчас проверил 114.0.5735.198 на тестовой странице с видео. Видео играет, но intel_gpu_top показывает нулевую нагрузку на аппаратный декодер. Так что декодирование видео в Chromium программное.

Вроде требуется принудительное включение, https://wiki.archlinux.org/title/Chromium#Force_GPU_acceleration:
По умолчанию Chromium в Linux не использует ускорение GPU. Чтобы принудительно ускорить GPU, добавьте следующие флаги в постоянную конфигурацию...

krasnh ★★★
()
Ответ на: комментарий от arax

Откуда такие фантазии?

Аппаратный декодер в Intel iGPU поддерживает показатели загрузки в регистрах, которые читаются программой intel_gpu_top и преобразуются в индикатор загрузки аппаратного декодера. Если intel_gpu_top показывает больше 0%, значит используется. Если нет, то не используется.

i-rinat ★★★★★
()
Ответ на: комментарий от krasnh

Вроде требуется принудительное включение

Да, получилось подобрать флаги так, чтобы заработало. Интересный экспириенс.

Пропустил тот момент, когда отношение команды Chromium сменилось. Раньше они были наотрез против возможности включения на настольном линуксе.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Поначитавшись хвалебных отзывов об классной поддержке новых дров amd, поставил rx 580, вместо старой gtx 1050! В итоге хромообразные вообще декодировать отказываются, хотя пишет что включено. А с фаерфоксом вообще жесть, декодирует аппаратно везде, кроме ютьюба! Arch. Поставил обратно нвидию! Хотя видимо поторопился, можно было попробовать пару настроек. Интересно, что с нвидией тоже отказывало, хотя все было пучком! Создал чистый профиль и все наладилось! С обычным vaapi работают хромообразные, но иногда лагает, и профилей поддерживает мало! На гитхабе человек elFarto ,разработал прослойку чисто для фокса и нвидии. Она работает напрямую с nvdec. Работает изумительно! Инструкции там прилагаются! Работает и на вэйланде и на Х11.

[sergey109@sergey109-arch ~]$ vainfo

Trying display: wayland

Trying display: x11

vainfo: VA-API version: 1.19 (libva 2.19.0)

vainfo: Driver version: VA-API NVDEC driver [direct backend]

vainfo: Supported profile and entrypoints

VAProfileMPEG2Simple : VAEntrypointVLD

VAProfileMPEG2Main : VAEntrypointVLD

VAProfileVC1Simple : VAEntrypointVLD

VAProfileVC1Main : VAEntrypointVLD

VAProfileVC1Advanced : VAEntrypointVLD

VAProfileH264Main : VAEntrypointVLD

VAProfileH264High : VAEntrypointVLD

VAProfileH264ConstrainedBaseline: VAEntrypointVLD

VAProfileHEVCMain : VAEntrypointVLD

VAProfileVP9Profile0 : VAEntrypointVLD

VAProfileHEVCMain10 : VAEntrypointVLD

VAProfileHEVCMain12 : VAEntrypointVLD

VAProfileVP9Profile2 : VAEntrypointVLD

GitHub В арче доступно в aur, для прочих собрать проблем не вызывает!

sergey109
()