LINUX.ORG.RU

Firefox VA-API/X11 (заброшен; смержили другую реализацию)

 , , ,


4

9

Проект по добавлению VA-API/X11 в Firefox. Заброшен.
Текущее состояние на 3 июля 2020: (комментарий).

Текст от 25 марта 2020:
Атипичная простуда в очередной раз всех напугала и напомнила, что люди не вечные, причём часто внезапно. Было бы жаль совсем потерять результаты работы, поэтому выкладываю текущий вариант патча к Firefox с поддержкой VA-API под иксами.

Это ещё не готовый к мержу патч, всё держится на честном слове. Из текущих проблем:

  • если не подкрутить настройки, ест больше ватт, чем полностью программное декодирование;
  • с WebRender видео не видно; возможно роняет контент-процесс;
  • с layers-opengl нет видео, если не включить gfx.use-glx-texture-from-pixmap;
  • истерично переаллоцирует X11-пиксмапы, если под layers-opengl переключиться на другую вкладку.

Чтобы под layers-basic экономия от декодирования вообще имела смысл, нужно включить gfx.xrender.enabled. Без XRender чтение картинки обратно в память CPU ест больше энергии, чем просто декодирование сразу на CPU.

До рабочего варианта ещё далеко. Но если кто-то захочет собрать и потестить, ссылка внизу. Патчсет базируется на 74.0. Оригинальный репозиторий был в Mercurial, и файлы .gitignore там где-то игнорят нужное для сборки, поэтому не факт, что код как есть соберётся. Если так оно и есть, должно помочь использование релизных исходников от 74.0 с последующим накладыванием патча.

Для VP9 Firefox предпочитает ffvpx, особую сборку ffmpeg, которую таскает с собой. Чтобы VP9 декодировать через системный ffmpeg с поддержкой VA-API, нужно выключить media.ffvpx.enabled.


https://github.com/i-rinat/firefox/compare/master...vaapi

★★★★★

Ответ на: комментарий от Andrew-R

насколько оно калиброванное

Это FX же? В стоке оно довольно неплохо работает. Но ЕМНИП, этот датчик перестает показывать что-то вменяемое при разгоне.

devl547 ★★★★★ ()
Ответ на: комментарий от Andrew-R

Вроде старые процы и GPU такое вообще не репортят?

Так ведь не на системах конечных пользователей же проверять. Там неподконтрольная система. Никто не знает, что там запущено параллельно, никакой воспроизводимости. Замеры мощности в лучшем случае будут делать на выделенных тестовых машинах, где известно, что запущено, и с какими параметрами.

i-rinat ★★★★★ ()

А как вообще в лисе посмотреть, чем играется видео? Вот в хроме есть chrome://media-internals, там сразу видно, какой декодер задействован при воспроизведении и на какой вкладке.

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

походу там пилить и пилить

по моим наблюдениям это пытается работать только если в системе есть вейланд, в сборке без вейланда оно не работает совсем. Ну и работает как-то странно - пару раз запускает аппаратное декодирование и CPU держится в районе 30%, а потом эта ветка отваливается и декодер переходит в софт возвращаясь на 100% CPU. В самом баге кто-то из АМД лагеря уже отписал что на AMD совсем не запускается…

Qui-Gon ()
Ответ на: походу там пилить и пилить от Qui-Gon

Ну да, я же говорил: «есть огрехи». :-D

Когда я проверял непосредственно после вливания, было вот так: https://bug1645673.bmoattachments.org/attachment.cgi?id=9161276. В начале видео вся область зелёная, то есть кадры потеряны, и вместо них нулевое изображение в YUV, оно как раз такого цвета. Во время воспроизведения тоже иногда мерцает зелёным. А через некоторое время стопорится совсем. Фолбека на CPU-декодирование я как-то не заметил. Да и в коде его не видно. Но почему-то в обсуждениях я часто видел, что фолбек должен быть. Хотя я так и не понял, как именно. Возможно, плеер Youtube сам рестартует декодирование? Но тогда это не совсем фолбек, а просто случайное стечение обстоятельств.

В коде межпроцессного взаимодействия какая-то жесть наворочена, с дополнительным каналом в обход уже существующего IPC. Я уже в багах отписывал, что это жуткие костыли, которые всё равно не решают проблем, ради которых они создавались. Смысла там дальше ныть нет.

i-rinat ★★★★★ ()

Ну раз они заявили что фиксед - то пойдут багрепорты

Багрепорты уже есть, некоторым уже скоро месяц как:

Три бага помечены «[Wayland]», но теперь эти баги и на X11 с EGL проявляются. У некоторых из этих багов уже и дубликаты есть. В общем, репортят.

i-rinat ★★★★★ ()

Я почитал обсуждение, как добавляли VA-API over X11. Там какой-то разработчик пишет, что это будет работать только на EGL, потому что с GLX конкретно на его машине проблемы. Я правильно понимаю, что у остальных всё работало, а также что фича недоступна для GLX из-за хотелки одного-единственного разработчика?

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

Я почитал обсуждение, как добавляли VA-API over X11. Там какой-то разработчик пишет, что это будет работать только на EGL, потому что с GLX конкретно на его машине проблемы.

Ты как-то неправильно читал. Во-первых, это не разработчик, он просто имеет мнение обо всём. Во-вторых, проблем с GLX у него нет, он просто кидает ссылки на комментарии, которые интерпретирует как «GLX — плохо».

фича недоступна для GLX из-за хотелки одного-единственного разработчика

Формально да, но всё не совсем так, как ты понял. Претензии были к тому, что фича добавлялась для Basic/XRender композитора. Со временем Basic стал фолбеком, который хотят оставить как чисто софтовый композитор, который работает, когда всякие аппаратно-ускоренные пути зафейлились.

i-rinat ★★★★★ ()

nvidia 450.57, скомпилил найтли 81, если запускать с webrender или opengl рендером и MOZ_X11_EGL=1 то вместо нормального окна браузера выводится полностью пустое. с basic рендером с окном все нормально, но и ускорения vaapi нету. wtf? у кого нибудь такое было?

Elmer_ ()
Ответ на: комментарий от Elmer_

nvidia 450.57, скомпилил найтли 81, если запускать с webrender или opengl рендером и MOZ_X11_EGL=1 то вместо нормального окна браузера выводится полностью пустое

[X11][EGL] Transparent window with proprietary Nvidia driver

и ускорения vaapi нету

На проприетарном драйвере и не будет. В реализации, которую вмержили, требуется экспорт кадров в dma-buf поверхности. У проприетарного драйвера по лицензионным причинам нет доступа к нужным символам ядра, потому что они помечены как GPL-only.

i-rinat ★★★★★ ()