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

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

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

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

То есть:

  • OpenGL 2.1 - поддерживается программно;
  • OpenGL ES 2.0 (он же GLES2) - поддерживается аппаратно.
  • OpenGL ES 3.2 (он же GLES3) -НЕ поддерживается
  • Vulkan - НЕ поддерживается
  • WebGL 1 - поддерживается, но с плохой производительностью (хоть это и клон GLES2).
  • WebGL 2 - НЕ поддерживается (это клон GLES3)

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

Соответственно, ищите игры/приложения, в исходниках которых реализована поддержка 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 -DCMAKE_INSTALL_PREFIX=/usr

    cd build

    make -j4

    sudo make install

Но проще взять и установить готовый пакет.

ВАЖНО

gl4es нам понадобится ниже в главе “Аппаратное декодирование видео“, так что имеет смысл его скачать и поставить, даже если вы в игры не играете.

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

Аппаратное декодирование видео #

В версии прошивки от 18.04.2025 v1.1.0 разработчики что-то там пересобрали для аппаратного ускорения видео, но чтобы оно работало надо чуть-чуть донастроить, так как аппаратный декодер действительно проснулся и заработал, только на экран картинка без тормозов и багов выводиться не хочет из-за капризов GPU ARM Mali-450 MP4.

А именно:

  • стандартный плеер MPV лезет в настольный OpenGL 2.1, вместо родного для Mali-450 мобильного OpenGL ES 2.0, как итог - тормоза.
  • Если всё-таки заставить MPV выводить кадры из аппаратного декодера через OpenGL ES 2.0 (опцией --opengl-es=yes), то видео идет с хорошей производительностью, но мы наткнёмся на крайне неприятный баг - изображение залито красным цветом и смотреть его невозможно. Все попытки исправить цветовую палитру через разные команды приводят к транскодированию картинки силами CPU, а это сразу тормоза.

Решение - Настройка SMPlayer #

Здесь мы настроим плеер и будем запускать его через gl4es, чтобы картинка от декодера выводилась через быстрый OpenGL ES 2.0, но без бага с красным цветом.

  1. Скачиваем SMPlayer (если его нет): sudo apt install smplayer

  2. Открываем через gl4es (который вы скачали в предыдущей главе): LD_LIBRARY_PATH=/usr/lib/gl4es:$LD_LIBRARY_PATH smplayer

  3. Переходим в Параметры → Настройки → Основные → Вкладка “Основные“ и убеждаемся что в самом верху выбрано “другое: /usr/bin/mpv“

  4. Переходим в Параметры → Настройки → Основные → Вкладка “Видео“ → Устройство вывода ставим “gpu“, чуть ниже убрать все галочки, кроме “двойная буферизация“ и “подавить хранитель экрана“

  5. Переходим в Быстродействие → “Потоков декодирования…“ ставим 4 (число потоков CPU Репки), затем чуть ниже “Аппаратное декодирование“ ставим “Авто” (под капотом должен подхватиться DRM в качестве декодера. DRM в данном случае - это прослойка между аппаратным видеодекодером Allwinner H5 (он же VPU) и графическим чипом Mali-450 (он же GPU), которая гонит данные напрямую из VPU в GPU, не напрягая процессор).

  6. Переходим в Дополнительно → вкладка MPlayer/MPV → в “Параметры“ пишем:

    --opengl-es=no (это нужно для обхода бага с красным цветом, потому что конвертацию из GL 2.1 в GLES2 берет на себя gl4es), затем жмём “Применить“ и “ОК“.

Бесполезное наблюдение

Не смотря на то, что под капотом у SMPlayer работает MPV, почему-то видео воспроизводятся адекватнее (без багов и подёргиваний) именно через SMPlayer, а не через MPV напрямую.

Далее, для удобства, можем зайти /usr/share/applications и найти там smplayer.desktop - это ярлык в меню приложений слева-сверху экрана.

Откройте ярлык как обычный текстовый файл и найдите там строку Exec=smplayer %U и замените на Exec=env LD_LIBRARY_PATH=/usr/lib/gl4es:$LD_LIBRARY_PATH smplayer %U и сохраните файл.

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

К СВЕДЕНИЮ

А если SMPlayer сделать плеером по умолчанию (делается это почти как в windows, так что не будем тратить время на лишний текст), то можно будет открывать видео с нужными настройками просто двойным кликом по нему.

В итоге должно получиться как у меня, а именно, плавное воспроизведение и низкая нагрузка на CPU (около 25% на каждое ядро).

Все тестовые видео в 1080p (кодек h264), и почти все видео в 60 FPS (кроме последнего мультика, он в 24 FPS):

Описание видео с таймкодами и копирайтами

Использовался настроенный SMPlayer, который запущен через gl4es.

00:00:00 - Big Buck Bunny (1080p 60fps h264)

(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org Лицензия: CC BY 3.0 (https://creativecommons.org/licenses/by/3.0/)*

00:00:34 - моя тестовая запись геймплея TR: Legend (1080p 60fps h264)

00:01:36 - Sintel (1080p 24fps h264)

(c) copyright Blender Foundation | durian.blender.org Лицензия: CC BY 3.0 (https://creativecommons.org/licenses/by/3.0/)*

*В видеоролике использованы отдельные фрагменты оригинальных материалов для проведения технического теста.

Странный баг, но не мешает.

При перемотке видео, у меня нагрузка могла подскочить аж до 80% и не падать, но видео при этом всё равно не тормозило.

ПРЕДУПРЕЖДЕНИЕ

Если после нескольких просмотров видео подряд (или запуска 4К-видео) экран начал дико моргать и, если открывали плеер через терминал, посыпались ошибки “Cannot allocate memory“, то не переживайте. Просто закончился выделенный видеобуфер (он же CMA), которого очень мало и он не хочет сам очищаться.

Вот патч с инструкцией внутри, который сильно сглаживает эту проблему (протестировано на репке с 2 ГБ ОЗУ, как оно поведёт себя на репке с 1ГБ ОЗУ я не знаю).

Браузеры #

Кратко - забудьте.

Подробно:

Из современных версий Firefox и Chromium убрали поддержку GLES2, так что сами браузеры работают исключительно в программном режиме, но:

  • В Chromium (на данный момент это версии 151+) аппаратно не работает больше вообще ничего, даже WebGL 1.
  • Firefox сам работает программно, но WebGL 1 ещё как-то пытается запускать.
  • Про аппаратное декодирование видео при просмотре в браузере (то есть на VK Video, RUTUBE и так далее…) и речи быть не может. Это всё ложится на CPU с большими тормозами.

Так что, теперь это просто читалки/качалки для не слишком тяжелых текстовых сайтов/файлообменников.


0

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

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

Еще посты по теме

Наиболее интересные по мнению читателей



Темы

Навигация

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