'How to build ffmpeg with hardware decoding support for raspberry pi? (cross compilation if possible)

Is it possible to build ffmpeg with decoding support for Raspberry Pi? I've read that mmal can do hardware accelerated decoding on the Raspberry Pi.

I've tried on debian 10 x86_64:

./configure \
    --prefix=${BUILD_DIR}/desktop/${FFMPEG_ARCH_FLAG} \
    --disable-doc \
    --enable-cross-compile \
    --cross-prefix=${CROSS_PREFIX} \
    --target-os=linux \
    --arch=${FFMPEG_ARCH_FLAG} \
    --extra-cflags="-O3 -fPIC $EXTRA_CFLAGS" \
    --enable-mmal \
    --enable-omx \
    --enable-omx-rpi \
    --enable-shared \
    --disable-debug \
    --disable-runtime-cpudetect \
    --disable-programs \
    --disable-muxers \
    --disable-encoders \
    --disable-bsfs \
    --disable-pthreads \
    --disable-avdevice \
    --disable-network \
    --disable-postproc 

where CROSS_PREFIX=aarch64-linux-gnu- and FFMPEG_ARCH_FLAG=aarch64 but obviously I get ERROR: mmal not found. I couldn't find MMAL to compile and install.



Solution 1:[1]

This is possible. You can use this build script, which you will need to run on the Raspberry Pi itself. The part you probably care most about is towards the end:

git clone --depth 1 https://github.com/FFmpeg/FFmpeg.git ~/FFmpeg \
  && cd ~/FFmpeg \
  && ./configure \
    --extra-cflags="-I/usr/local/include" \
    --extra-ldflags="-L/usr/local/lib" \
    --extra-libs="-lpthread -lm -latomic" \
    --arch=armel \
    --enable-gmp \
    --enable-gpl \
    --enable-libaom \
    --enable-libass \
    --enable-libdav1d \
    --enable-libfdk-aac \
    --enable-libfreetype \
    --enable-libkvazaar \
    --enable-libmp3lame \
    --enable-libopencore-amrnb \
    --enable-libopencore-amrwb \
    --enable-libopus \
    --enable-librtmp \
    --enable-libsnappy \
    --enable-libsoxr \
    --enable-libssh \
    --enable-libvorbis \
    --enable-libvpx \
    --enable-libzimg \
    --enable-libwebp \
    --enable-libx264 \
    --enable-libx265 \
    --enable-libxml2 \
    --enable-mmal \
    --enable-nonfree \
    --enable-omx \
    --enable-omx-rpi \
    --enable-version3 \
    --target-os=linux \
    --enable-pthreads \
    --enable-openssl \
    --enable-hardcoded-tables \
  && make -j$(nproc) \
  && sudo make install

Note this caveat from RaspberryPi.org:

MMAL is a Broadcom-specific API used only on VideoCore 4 systems

This makes me think the chances of cross-compiling are low, but you can always give it a shot with this script.

Solution 2:[2]

To build ffmpeg with mmal support you need to install the raspberry userland which provides the mmal interface. Note that mmal is not supported on 64bit userland systems (See https://github.com/raspberrypi/userland/issues/688)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 kebs00n