Заметка от 25.01.2024 по поводу моей предыдущей статьи.
Потестировал немного и понял что драйвер в инструкции скорее изображает бурную деятельность, а толку никакого. Есть способ проще. Старую инструкцию оставил для истории (ну и если кто-то умеет программировать драйвера, можете попробовать оживить аппаратный декодер).
Обновленная инструкция #
1) Настройка SMPlayer #
Так как аппаратный декодер лишь притворяется рабочим, у нас есть возможность помочь программным декодерам, для этого надо просто включить многопоточность.
- открываем SMPlayer
- Переходим в Параметры → Настройки → Быстродействие
- “Потоков декодирования…“ ставим 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
, об этом ниже).
-
Добываем Chromium. Я это делал через Snap, если вам Snap не нравится, то ищите где-нибудь еще, лишь бы версия была не слишком старая.
sudo snap install chromium
-
Для дальнейшего удобства создадим скрипт для запуска браузера с нужными параметрами. Для этого создайте на рабочем столе пустой текстовый файл с именем например
chromium.sh
и откройте его текстовым редактором. В файл добавьте следующие строки:#!/bin/bash
chromium --no-sandbox --use-gl=angle --use-angle=gl-egl
-
Сохраните файл и закройте текстовый редактор.
-
Дадим нашему скрипту права на выполнение. Для этого по файлу кликните правой кнопкой мыши → Свойства → Права → поставить галочку “Разрешить выполнять как программу” → OK.
-
Дважды кликаем по нашему файлу и откроется Chromium.
-
Вводим в адресную строку
chrome://gpu
и жмём Enter, проверяем наличие аппаратного ускорения, большая часть функций в списке должна быть помечена как Hardware Accelerated. -
Устанавливаем расширение enhanced-h264ify
-
Нажимаем на это расширение и проставляем галочки “Блокировать…“ везде, кроме 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 довольно просто:
-
Открываем терминал и устанавливаем зависимости
sudo apt install cmake libx11-dev
-
Скачиваем с репозитория
git clone https://github.com/ptitSeb/gl4es.git
-
Переходим в папку
cd gl4es
-
Собираем и устанавливаем
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.