Аппаратное ускорение RPI4 FFmpeg - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь заставить работать аппаратное ускорение на моем Raspberry pi 4-64. Я использую FFmpeg и AFAIK hwaccel может быть достигнут с помощью OpenMAX или V4L2-M2M. После «--enable-omx» и «enable-omx-rpi» для FFmpeg сборка завершается с ошибкой: «OMX_Core.h not found». Если я предоставлю заголовки omx вручную, то он скомпилируется, но кодировка FFmpeg не будет выполнена из-за отсутствующих библиотек: bcm_host.so и libopenmaxil.so

Я попытался вернуться в пользовательское пространство с помощью DISABLE_VC4GRAPHICS = "1", это произвело bcm_host.so, но не libopenmaxil.so. Я пробовал разные комбинации виртуальных провайдеров и графических настроек, но безуспешно. Можно ли получить доступ к аппаратному ускорению omx на RPI4-64?

Шаги для воспроизведения проблемы:

1.Загрузить последний дистрибутив Poky, meta-openembedded, meta-raspberrypi

2.Enable omx, поддержка omx-rpi для FFmpeg

3.Ссылки на заголовки для FFmpeg

4.Сборка и попытка использовать h264_omx

Как получить отсутствующую библиотеку libopenmaxil.so и все потребности я для hwaccel

1016 * убогая мастер: совершить 5d47cdf448b6cff5bb7cc5b0ba0426b8235ec478 1018 * мета-OpenEmbedded мастер: совершать daa50331352c1f75da3a8ef6458ae3ddf94ef863 1020 * мета-raspberrypi мастер: совершать 8d163dd

Кстати, используя V4L2-M2M, я получаю зеленые тени на получающемся видео. Может быть, кто-то может указать мне правильное направление?

1 Ответ

0 голосов
/ 10 апреля 2020

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

Это то, что я использовал для кросс-компиляции ffmpeg для AArxh64:

./configure \
    --arch="${HOST_ARCH}" \
    --target-os="linux" \
    --prefix="/usr/local" \
    --sysroot="${RPI_SYSROOT}" \
    --enable-cross-compile \
    --cross-prefix="${HOST_TRIPLE}-" \
    --toolchain=hardened \
    --enable-gpl --enable-nonfree \
    --enable-avresample \
    --enable-libvpx --enable-libx264 --enable-libxvid \
    --enable-omx --enable-omx-rpi --enable-mmal --enable-neon \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --extra-cflags="$(pkg-config --cflags mmal) \
                    -I${RPI_SYSROOT}/usr/local/include \
                    -I${RPI_SYSROOT}/opt/vc/include/IL" \
    --extra-ldflags="$(pkg-config --libs-only-L mmal) \
                     -Wl,-rpath-link,${RPI_SYSROOT}/opt/vc/lib \
                     -Wl,-rpath,/opt/vc/lib"

Обратите внимание, что pkg-config также настроен для кросс-компиляции, он выглядит в Raspberry Pi sys root, а не в машине для сборки root. Это делается путем установки правильных переменных среды здесь .

Флаги -I указывают пути включения, а флаги -L, возвращаемые pkg-config --libs-only-L, являются путями библиотеки. -Wl передает список разделенных запятыми аргументов компоновщику. -rpath-link используется для поиска общих библиотек, необходимых для других общих библиотек во время соединения, -rpath используется для поиска библиотек во время выполнения. Это необходимо, потому что пользовательские библиотеки находятся в нестандартном месте, ld не будет искать в /opt/vc/lib по умолчанию.

Вы можете найти наборы инструментов, файлы Docker и сценарии установки, которые я использовал на моем GitHub: https://github.com/tttapa/RPi-Cpp-Toolchain/tree/master/toolchain/docker/rpi3/aarch64/aarch64-cross-build

Сценарий пользователя здесь: https://github.com/tttapa/RPi-Cpp-Toolchain/blob/76ac03741bc7b7da106ae89884c7bada96768a07/toolchain/docker/rpi3/aarch64/aarch64-cross-build/install-scripts/userland.sh
А скрипт ffmpeg здесь: https://github.com/tttapa/RPi-Cpp-Toolchain/blob/76ac03741bc7b7da106ae89884c7bada96768a07/toolchain/docker/rpi3/aarch64/aarch64-cross-build/install-scripts/ffmpeg.sh

Еще немного документации о процессе компиляции и файлах, используемых в репозитории здесь (хотя это не относится к ffmpeg).

...