Артемий Светлаков
Артемий Светлаков
949 просмотров0 комментариев

Заметка про аппаратное ускорение

Заметка от 25.01.2024 по поводу моей предыдущей статьи.

Потестировал немного и понял что драйвер в инструкции скорее изображает бурную деятельность, а толку никакого. Есть способ проще. Старую инструкцию оставил для истории (ну и если кто-то умеет программировать драйвера, можете попробовать оживить аппаратный декодер).

Обновленная инструкция

1) Настройка SMPlayer

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

  1. открываем SMPlayer
  2. Переходим в Параметры → Настройки → Быстродействие
  3. “Потоков декодирования…“ ставим 4 (число потоков CPU Репки).

Что касается видео в 1080p 60 FPS, то Репка хорошо воспроизводит видео, отформатированные кодеком mpeg2video (проверял на видео, которое можно скачать отсюда, в самом низу ролики Wooden Architecture).

В принципе видео в 60 FPS (что 720p, что 1080p) адекватно работают только с кодеком mpeg2video. Остальные кодеки только 30 FPS.

P.S: С помощью редактора OpenShot пережал в mpeg2/AVI (в среднем качестве, 24fps) мультфильм Sintel 4K (ссылка на оригинал) и он запустился без тормозов, но, поверьте, вы не захотите такое 4К.

2) Скачиваем браузер Chromium

Нам понадобится последняя актуальная версия (на момент написания статьи это версия 120), так как в старых версиях Google не даёт скачивать расширения из своего магазина. А также в данной версии аппаратное ускорение идет по умолчанию (почти. надо будет дополнительно включить webGL через параметры --use-gl=angle --use-angle=gl-egl, об этом ниже).

  1. Добываем Chromium. Я это делал через Snap, если вам Snap не нравится, то ищите где-нибудь еще, лишь бы версия была не слишком старая.

    sudo snap install chromium

  2. Для дальнейшего удобства создадим скрипт для запуска браузера с нужными параметрами. Для этого создайте на рабочем столе пустой текстовый файл с именем например chromium.sh и откройте его текстовым редактором. В файл добавьте следующие строки:

    #!/bin/bash

    chromium --no-sandbox --use-gl=angle --use-angle=gl-egl

  3. Сохраните файл и закройте текстовый редактор.

  4. Дадим нашему скрипту права на выполнение. Для этого по файлу кликните правой кнопкой мыши → Свойства → Права → поставить галочку “Разрешить выполнять как программу” → OK.

  5. Дважды кликаем по нашему файлу и откроется Chromium.

  6. Вводим в адресную строку chrome://gpu и жмём Enter, проверяем наличие аппаратного ускорения, большая часть функций в списке должна быть помечена как Hardware Accelerated.

  7. Устанавливаем расширение enhanced-h264ify

  8. Нажимаем на это расширение и проставляем галочки “Блокировать…“ везде, кроме h.264.

Таким способом можно будет спокойно посмотреть видео на YouTube в 720p30fps даже если те же самые видео без расширения были в 720p60fps (например вот это видео).

Если при раскрытии видео на полный экран всё начало дергаться/тормозить или аппаратное ускорение вовсе отключилось, то скорее всего произошла утечка памяти. Проблема видеоядра, как я понял. Решение: либо выйти из системы и перезайти, либо вовсе перезагрузиться.

3D-ускорение игр и приложений

В Репке присутствует аппаратное ускорение 3D из коробки. Вот только аппаратно поддерживается не OpenGL (настольный), а OpenGL ES (мобильный).

То есть:

  • OpenGL 2.1 - поддерживается программно;
  • OpenGL ES 2.0 (он же GLES2) - поддерживается аппаратно.
  • WebGL 1 - как-то поддерживается (производительность так себе, в Chromium 15-25 FPS в аквариуме в зависимости от настроек, количество рыб = 100, при частоте CPU Репки = 1368 МГц).
  • WebGL 2 - не поддерживается, хоть Chromium и пишет “Hardware Accelerated”

В основном игры на Репку добываются и собираются из исходников (как по мне - рекомендуемый способ), что-то есть в репозитории.

Соответственно, ищите игры/приложения, в исходниках которых реализована поддержка GLES1 или GLES2 (чаще встретите GLES2), разумеется если в игре/приложении в принципе используется аппаратное 3D ускорение.

Также если поддержки GLES2 не имеется, но требуется OpenGL не новее чем 2.1 и на Репке оно хоть как-то работает, то можно попробовать запустить с помощью библиотеки GL4ES (это такой “переходник“ из OpenGL 1.x в GLES1 / OpenGL 2.1 в GLES2). С помощью данной библиотеки можно получить заметный прирост к производительности.

Собрать и использовать GL4ES довольно просто:

  1. Открываем терминал и устанавливаем зависимости

    sudo apt install cmake libx11-dev

  2. Скачиваем с репозитория

    git clone https://github.com/ptitSeb/gl4es.git

  3. Переходим в папку

    cd gl4es

  4. Собираем и устанавливаем

    cmake -B build -DODROID=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo

    cd build

    make -j4

    sudo make install

Теперь чтобы запустить программу с использованием данной библиотеки просто введите в терминале: LD_LIBRARY_PATH=/usr/lib/gl4es:$LD_LIBRARY_PATH <название программы>

Или можно создать .sh-скрипт по аналогии с тем что делали выше для Chromium (часть 2, пункт 2), только строку с вызовом Chromium заменить на строку для запуска программы с подключенной библиотекой GL4ES.


Комментарии (0)

Для участия в обсуждении вы должны быть авторизованным пользователем

Навигация

ВойтиРегистрацияТемы