Stream For Cheap With RK3399 #2 - Compile FFMPEG
In part one of this series, I tried the installed ffmpeg version on the OrangePi RK3399, and made a few assumptions. Now, let’s try to compile ffmpeg on this very machine, if that could ever help us getting hardware acceleration.
As I’m french, better setup the keyboard before doing anything else.
sudo dpkg-reconfigure keyboard-configuration
Now, let’s download the whole Internet on this poor machine before trying to compile anything:
Let’s add a backport repo in order to get more recent packages. By the way, which Debian version are we running?
cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Let’s edit /etc/apt/sources.list
and add this line:
deb https://deb.debian.org/debian stretch-backports main
Once it’s done, let’s issue a :
sudo apt update
sudo aptitude -t stretch-backports dist-upgrade
Now that the machine is up to date, let’s download and install what’s missing:
sudo apt -t stretch-backports install -y autoconf automake autotools-dev build-essential ccache checkinstall cleancss cmake debhelper dh-exec doxygen flite1-dev frei0r-plugins-dev git gnutls-bin graphviz ladspa-sdk libarchive-dev libass-dev libavc1394-dev libavcodec-dev libavcodec-extra libavdevice58 libavfilter7 libavformat-dev libavformat58 libbluray-dev libbs2b-dev libbz2-dev libc6 libcaca-dev libcdio-paranoia-dev libchromaprint-dev libcodec2-dev libcunit1-dev libcurl4-openssl-dev libdc1394-22-dev libdrm-dev libfdk-aac-dev libgl1-mesa-dev libglew-dev libglfw3-dev libgme-dev libgmp-dev libgnutls28-dev libgsm1-dev libgtest-dev libiec61883-dev libjack-jackd2-dev libjpeg-dev libjsoncpp-dev liblensfun-dev liblilv-0-0 liblilv-dev libmodplug-dev libmp3lame-dev libnss-mdns libogg-dev libomxil-bellagio-dev libopenal-dev libopencore-amrnb-dev libopencore-amrwb-dev libopenjp2-7-dev libopenmpt-dev libopus-dev libpciaccess-dev libpciaccess0 libperl-dev libpulse-dev librsvg2-dev librtmp-dev librubberband-dev libsctp-dev libsdl2-dev libshine-dev libsnappy-dev libsoxr-dev libspeex-dev libssh-dev libswresample-dev libtheora-dev libtool libtwolame-dev libuv1-dev libv4l-dev libva-dev libvdpau-dev libvo-amrwbenc-dev libvorbis-dev libvpx-dev libwavpack-dev libwebp-dev libx11-dev libx264-dev libx265-dev libxvidcore-dev libzmq3-dev libzvbi-dev mercurial nasm node-less pkg-config po4a python3-docutils python3-sphinx software-properties-common texinfo tree vainfo vdpau-va-driver xorg-dev yasm zlib1g-dev
I’m not so sure we need all of that, but I lost track of what I installed day to day, so this is a concatenation of everything I think we could ever need. As you can see, we have a few packages missing, so we will have to build them by ourselves. First of all is libmysofa, which we will get directly from Debian Sid:
cd ~/ffmpeg_sources
wget http://deb.debian.org/debian/pool/main/libm/libmysofa/libmysofa_0.8~dfsg0.orig.tar.xz
xz -d libmysofa_0.8~dfsg0.orig.tar.xz && tar -xvf libmysofa_0.8~dfsg0.orig.tar && rm libmysofa_0.8~dfsg0.orig.tar
cd libmysofa-0.8/ && wget http://deb.debian.org/debian/pool/main/libm/libmysofa/libmysofa_0.8~dfsg0-1.debian.tar.xz
xz -d libmysofa_0.8~dfsg0-1.debian.tar.xz && tar -xvf libmysofa_0.8~dfsg0-1.debian.tar && rm libmysofa_0.8~dfsg0-1.debian.tar
sudo apt -t stretch-backports install dh-exec cmake libcunit1-dev
wget http://deb.debian.org/debian/pool/main/libm/libmysofa/libmysofa_0.8~dfsg0.orig.tar.xz && mv libmysofa_0.8~dfsg0.orig.tar.xz ..
sudo -E dpkg-buildpackage -us -uc
find .. -name "*sofa*deb" -exec sudo dpkg -i {} \; -print
echo "Great!"
Now, regarding libncurses, libncurses5-dev could be the answer, so
sudo apt -t stretch-backports install libncurses5-dev
should do the trick.
Now for libvidstab:
cd ~/ffmpeg_sources
wget http://deb.debian.org/debian/pool/main/libv/libvidstab/libvidstab_1.1.0.orig.tar.gz
tar -xvzf libvidstab_1.1.0.orig.tar.gz
cd vid.stab-1.1.0/ && wget http://deb.debian.org/debian/pool/main/libv/libvidstab/libvidstab_1.1.0-2.debian.tar.xz
xz -d libvidstab_1.1.0-2.debian.tar.xz && tar -xvf libvidstab_1.1.0-2.debian.tar && rm libvidstab_1.1.0-2.debian.tar
sudo -E dpkg-buildpackage -us -uc
find .. -name "*vid*stab*deb" -exec sudo dpkg -i {} \; -print
cd ~/ffmpeg_sources
wget http://www.nasm.us/pub/nasm/releasebuilds/2.14rc0/nasm-2.14rc0.tar.gz
tar xzvf nasm-2.14rc0.tar.gz
cd nasm-2.14rc0
./configure --prefix="$HOME/bin" --bindir="$HOME/bin"
make -j$(nproc) VERBOSE=1
make -j$(nproc) install
make -j$(nproc) distclean
Now, let’s build x264
cd ~/ffmpeg_sources
git clone http://git.videolan.org/git/x264.git -b stable
cd x264/
export CFLAGS="-mfpu=neon"
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/bin" --bindir="$HOME/bin" --enable-pic --enable-static --disable-cli --disable-asm --host=arm-linux --disable-opencl
PATH="$HOME/bin:$PATH" make -j$(nproc) VERBOSE=1
make -j$(nproc) install VERBOSE=1
make -j$(nproc) distclean
I had to disable ASM
and to add the mfpu
cflag for it to work, see this issue.
Now, let’s compile fdk-aac
cd ~/ffmpeg_sources
wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --prefix="$HOME/bin" --disable-shared
make -j$(nproc)
make -j$(nproc) install
make -j$(nproc) distclean
Let’s have a look at libvpx:
cd ~/ffmpeg_sources
git clone https://chromium.googlesource.com/webm/libvpx
cd libvpx
./configure
make -j${nproc}
sudo make install
g++: internal compiler error: Killed (program cc1plus)
As you can see, I got some strange errors saying that the compiler had an internal error… Google told me later on that it could be linked to not having enough memory.
I checked during the build with htop, and that was the case. Of course, I was using the 6 cores, so that was not the best thing to do with memory hungry compiler instances.
But anyway, as I already had a SSD plugged into this machine, let’s make use of it.
dd if=/dev/zero of=/media/linaro/0E9ACA2339F586E/swap.img bs=1024k count=10000 # Ten Gigs should be enough
sudo su -
free
mkswap /media/linaro/0E9ACA2339F586E5/swap.img
swapon /media/linaro/0E9ACA2339F586E5/swap.img
free
Up to now, everything looks ok, now let’s configure and compile FFmpeg with fewer options before going too far, if ever there was a BIG blocking point somewhere:
cd ~/ffmpeg_sources/FFmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig" ./configure --pkg-config-flags="--static" --prefix="$HOME/bin" --extra-cflags="-I$HOME/bin/include" --extra-ldflags="-L$HOME/bin/lib" --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" --bindir="$HOME/bin" --enable-debug=3 --enable-vaapi --enable-libvorbis --enable-libvpx --disable-debug --enable-gpl --cpu=native --enable-opengl --enable-libfdk-aac --enable-libx264 --enable-libx265 --extra-libs=-lpthread --enable-nonfree --arch=arm
[insert gif ffmpeg-compilation-1]
PATH="$HOME/bin:$PATH" make -j$(nproc)
make -j$(nproc) install
make -j$(nproc) distclean
hash -r
It worked, that’s cool.
Now, let’s have a look at libmysofa, as it has not been found by configure
.
cd ~/ffmpeg_sources/
git clone https://github.com/hoene/libmysofa.git
cd libmysofa/
cd build/
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j${nproc} all
sudo make install
Oh well, forget it…
A last try with configure, to see if we have everything available:
cd ~/ffmpeg_sources/FFmpeg/
./configure --enable-gpl --enable-version3 --disable-static --enable-shared --enable-small --enable-avisynth --enable-chromaprint --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-libdrm --enable-nonfree --enable-libfdk-aac --enable-libbluray --enable-hwaccel='h264_vaapi,hevc_vaapi,vp9_vaapi' --enable-decoder='vp8,vp9' --extra-libs='-lnettle -lhogweed -lgmp' --arch=arm
Pretty encouraging. Let’s compile everything and see what we can do
Let’s go with x265 now:
cd ~/ffmpeg_sources
wget http://deb.debian.org/debian/pool/main/x/x265/x265_3.2.orig.tar.gz
tar -xvzf x265_3.2.orig.tar.gz
cd x265_3.2/
wget http://deb.debian.org/debian/pool/main/x/x265/x265_3.2-2.debian.tar.xz
xz -d x265_3.2-2.debian.tar.xz && tar -xvf x265_3.2-2.debian.tar && rm x265_3.2-2.debian.tar
sudo apt -t stretch-backports install python3-sphinx
sudo -E dpkg-buildpackage -us -uc
sudo dpkg -i ../libx265-dev_3.2-2_armhf.deb ../libx265-179-dbgsym_3.2-2_armhf.deb ../libx265-179_3.2-2_armhf.deb ../libx265-doc_3.2-2_all.deb
Once the dependencies were installed, I downloaded the master branch of FFmpeg:
mkdir ffmpeg_sources
cd ffmpeg_sources
git clone https://github.com/FFmpeg/FFmpeg -b master
cd FFmpeg/
I then launched the configure command with the hope if would find everything…
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig" ./configure --enable-gpl --enable-version3 --disable-static --enable-shared --enable-small --enable-avisynth --enable-chromaprint --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opengl --enable-libdrm --enable-nonfree --enable-libfdk-aac --enable-libbluray --enable-hwaccel='h264_vaapi,hevc_vaapi,vp9_vaapi' --enable-decoder='vp8,vp9' --extra-libs='-lnettle -lhogweed -lgmp'
I got: ERROR: x265 not found using pkg-config
.
which is strange, because
pkg-config --list-all|grep x265
x265 x265 - H.265/HEVC video encoder
says x265 is there... and pkg-config --debug 2>&1|grep x265
File 'x265.pc' appears to be a .pc file
Will find package 'x265' in file '/usr/lib/arm-linux-gnueabihf/pkgconfig/x265.pc'
As seen there, I may need libnuma, so:
sudo apt -t stretch-backports install libnuma-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libnuma-dev is already the newest version (2.0.12-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n]
Setting up x265-dbgsym (3.2-2) ...
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig" ./configure --enable-gpl --enable-version3 --disable-static --enable-shared --enable-small --enable-avisynth --enable-chromaprint --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opengl --enable-libdrm --enable-nonfree --enable-libfdk-aac --enable-libbluray --enable-hwaccel='h264_vaapi,hevc_vaapi,vp9_vaapi' --enable-decoder='vp8,vp9' --extra-libs='-lnettle -lhogweed -lgmp'
Still got ERROR: x265 not found using pkg-config
.
So, we’ll try another way. Let’s compile the standard x265 static version, and make it available to ffmpeg:
cd ~/ffmpeg_sources
hg clone https://bitbucket.org/multicoreware/x265
cd ~/ffmpeg_sources/x265/build/linux
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/bin" -DENABLE_SHARED:bool=off --prefix="$HOME/ffmpeg_build" ../../source
make -j$(nproc) VERBOSE=1
make -j$(nproc) install VERBOSE=1
make -j$(nproc) clean VERBOSE=
Let’s try with extending
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig" ./configure --enable-gpl --enable-version3 --disable-static --enable-shared --enable-small --enable-avisynth --enable-chromaprint --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opengl --enable-libdrm --enable-nonfree --enable-libfdk-aac --enable-libbluray --enable-hwaccel='h264_vaapi,hevc_vaapi,vp9_vaapi' --enable-decoder='vp8,vp9' --extra-libs='-lnettle -lhogweed -lgmp' --pkg-config-flags="--static"
ERROR: librsvg-2.0 not found using pkg-config
It worked for x265. Now, let’s tackle with librsvg:
cd ~/ffmpeg_sources
wget http://deb.debian.org/debian/pool/main/libr/librsvg/librsvg_2.44.15.orig.tar.xz
xz -d librsvg_2.44.15.orig.tar.xz && tar -xvf librsvg_2.44.15.orig.tar && rm librsvg_2.44.15.orig.tar
cd librsvg-2.44.15/
sudo apt -t stretch-backports install cargo
./configure
configure: error: librsvg needs at rustc version at least 1.27
sudo apt -t stretch-backports install rustc
Reading package lists... Done
Building dependency tree
Reading state information... Done
rustc is already the newest version (1.24.1+dfsg1-1~deb9u4).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
You know what? Let’s just forget about librsvg for the time being…
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig" ./configure --enable-gpl --enable-version3 --disable-static --enable-shared --enable-small --enable-avisynth --enable-chromaprint --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opengl --enable-libdrm --enable-nonfree --enable-libfdk-aac --enable-libbluray --enable-hwaccel='h264_vaapi,hevc_vaapi,vp9_vaapi' --enable-decoder='vp8,vp9' --extra-libs='-lnettle -lhogweed -lgmp -lpthread -lm -lz' --pkg-config-flags="--static" --extra-ldexeflags="-static"
ERROR: chromaprint not found
Hmmm, let’s have a look at it:
cd ~/ffmpeg_sources
wget http://deb.debian.org/debian/pool/main/c/chromaprint/chromaprint_1.4.2.orig.tar.gz
tar -xvzf chromaprint_1.4.2.orig.tar.gz
cd chromaprint-1.4.2/
wget http://deb.debian.org/debian/pool/main/c/chromaprint/chromaprint_1.4.2-1.debian.tar.xz
xz -d chromaprint_1.4.2-1.debian.tar.xz
tar -xvf chromaprint_1.4.2-1.debian.tar
rm chromaprint_1.4.2-1.debian.tar
export DEB_DH_SHLIBDEPS_ARGS_ALL=--dpkg-shlibdeps-params=--ignore-missing-info
sudo -E dpkg-buildpackage -us -uc
Unfortunately, we had some packages missing, and apt was not able to help us. Let’s switch back to aptitude, so that it can propose us some solutions
sudo aptitude -t stretch-backports install libavcodec-dev libavformat-dev libswresample-dev
I chose this solution
The following actions will resolve these dependencies:
Remove the following packages:
1) libavresample-dev [7:4.1.4-1 (now)]
2) libpostproc-dev [7:4.1.4-1 (now)]
3) libswscale-dev [7:4.1.4-1 (now)]
Downgrade the following packages:
4) libavutil-dev [7:4.1.4-1 (now) -> 7:3.2.14-1~deb9u1 (oldstable)]
sudo -E dpkg-buildpackage -us -uc
sudo dpkg -i ../libchromaprint-dev_1.4.2-1_armhf.deb ../libchromaprint-tools_1.4.2-1_armhf.deb ../libchromaprint1_1.4.2-1_armhf.deb
sudo ldconfig
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig" ./configure --enable-gpl --enable-version3 --enable-shared --enable-small --enable-avisynth --enable-chromaprint --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opengl --enable-libdrm --enable-nonfree --enable-libfdk-aac --enable-libbluray --enable-hwaccel='h264_vaapi,hevc_vaapi,vp9_vaapi' --enable-decoder='vp8,vp9' --extra-libs='-lnettle -lhogweed -lgmp -lpthread -lm -lz' --pkg-config="pkg-config --static" --extra-ldexeflags="-static"
Did it help? Not at all. ERROR: chromaprint not found
Let’s try to build chromaprint from its repo.
cd ~/ffmpeg_sources
git clone https://github.com/acoustid/chromaprint.git
cd chromaprint
export CMAKE_ARGS="-DCMAKE_INSTALL_PREFIX=$BASE_DIR/chromaprint-$OS-$ARCH -DCMAKE_BUILD_TYPE=Release -DBUILD_TOOLS=ON -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS='-static -static-libgcc -static-libstdc++' -DCMAKE_CXX_FLAGS='-static -static-libgcc -static-libstdc++'"
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TOOLS=ON .
make -j$(nproc)
sudo make install
sudo ldconfig
You know what? I got once again ERROR: chromaprint not found
Damn… Ok, let’s forget chromaprint for the time being…
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/ffmpeg_build/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig" ./configure --enable-gpl --enable-version3 --enable-shared --enable-small --enable-avisynth --enable-frei0r --enable-gmp --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opengl --enable-libdrm --enable-nonfree --enable-libfdk-aac --enable-libbluray --enable-hwaccel='h264_vaapi,hevc_vaapi,vp9_vaapi' --enable-decoder='vp8,vp9' --extra-libs='-lnettle -lhogweed -lgmp -lpthread -lm -lz' --pkg-config="pkg-config --static" --extra-ldexeflags="-static"
ERROR: gnutls not found using pkg-config
Ok, let’s forget gnutls for the time being…
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/ffmpeg_build/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig" ./configure --enable-gpl --enable-version3 --enable-shared --enable-small --enable-avisynth --enable-frei0r --enable-gmp --enable-ladspa --enable-libaom --enable-libass --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librtmp --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-libmysofa --enable-openal --enable-opengl --enable-libdrm --enable-nonfree --enable-libfdk-aac --enable-libbluray --enable-hwaccel='h264_vaapi,hevc_vaapi,vp9_vaapi' --enable-decoder='vp8,vp9' --extra-libs='-lnettle -lhogweed -lgmp -lpthread -lm -lz' --pkg-config="pkg-config --static" --extra-ldexeflags="-static"
ERROR: aom >= 1.0.0 not found using pkg-config
As aom has not been found, we will have to build it… But before building it, let’s download, build and install its dependencies and other libs we want to build. Unfortunately, a few libraries which are available through apt are too old to be used as is, so we have to download and compile them… Let’s download the source
cd ~/ffmpeg_sources
git clone https://aomedia.googlesource.com/aom
cd aom
And launch cmake/make with the right options (found there).
cd ~/ffmpeg_sources/aom
cmake . -DCMAKE_C_FLAGS="-mfpu=vfp -mfloat-abi=hard"
rm -rf CMakeCache.txt CMakeFiles
mkdir -p ../aom_build
cd ../aom_build
cmake ../aom -DCMAKE_C_FLAGS="-mfpu=vfp -mfloat-abi=hard"
Then edit CMakeCache.txt
and change
ENABLE_NEON:BOOL=OFF
Let’s build it for real now
[insert gif build-aom-2]
CMakeFiles/aom_rtcd.dir/build.make:75: recipe for target 'CMakeFiles/aom_rtcd.dir/aom_dsp/aom_dsp_rtcd.c.o' failed
I think I will have to investigate more on that… So for now, let’s just cheat a little bit, and use a Debian source package:
cd ~/ffmpeg_sources
wget http://deb.debian.org/debian/pool/main/a/aom/aom_1.0.0.errata1.orig.tar.xz
xz -d aom_1.0.0.errata1.orig.tar.xz && tar -xvf aom_1.0.0.errata1.orig.tar && rm aom_1.0.0.errata1.orig.tar
cd aom-1.0.0.errata1
wget http://deb.debian.org/debian/pool/main/a/aom/aom_1.0.0.errata1-2.debian.tar.xz
xz -d aom_1.0.0.errata1-2.debian.tar.xz && tar -xvf aom_1.0.0.errata1-2.debian.tar && rm aom_1.0.0.errata1-2.debian.tar
wget http://deb.debian.org/debian/pool/main/a/aom/aom_1.0.0.errata1.orig.tar.xz;cd -
sudo -E dpkg-buildpackage -us -uc
sudo dpkg -i ../libaom-dev_1.0.0.errata1-2_armhf.deb ../aom-tools_1.0.0.errata1-2_armhf.deb ../libaom0_1.0.0.errata1-2_armhf.deb ../libaom-doc_1.0.0.errata1-2_all.deb
Another launch of configure does not work either… It does have the same problem of not finding aom. You know what? I have already managed to configure and compile, so I will have to investigate later on…
So… Why not trying directly the ffmpeg source package from Sid?
cd ~/ffmpeg_sources
wget http://deb.debian.org/debian/pool/main/f/ffmpeg/ffmpeg_4.1.4.orig.tar.xz
xz -d ffmpeg_4.1.4.orig.tar.xz && tar -xvf ffmpeg_4.1.4.orig.tar && rm ffmpeg_4.1.4.orig.tar
cd ffmpeg-4.1.4/ && wget http://deb.debian.org/debian/pool/main/f/ffmpeg/ffmpeg_4.1.4-1.debian.tar.xz
xz -d ffmpeg_4.1.4-1.debian.tar.xz && tar -xvf ffmpeg_4.1.4-1.debian.tar && rm ffmpeg_4.1.4-1.debian.tar
wget http://deb.debian.org/debian/pool/main/f/ffmpeg/ffmpeg_4.1.4.orig.tar.xz && mv ffmpeg_4.1.4.orig.tar.xz ..
sudo -E dpkg-buildpackage -us -uc
sudo dpkg -i libavutil56_4.1.4-1_armhf.deb libswresample-dev_4.1.4-1_armhf.deb libswscale5_4.1.4-1_armhf.deb libavformat58_4.1.4-1_armhf.deb libswscale-dev_4.1.4-1_armhf.deb libavutil-dev_4.1.4-1_armhf.deb libpostproc55_4.1.4-1_armhf.deb libavfilter7_4.1.4-1_armhf.deb libpostproc-dev_4.1.4-1_armhf.deb ffmpeg_4.1.4-1_armhf.deb libavfilter-extra7_4.1.4-1_armhf.deb libavformat-dev_4.1.4-1_armhf.deb libavresample4_4.1.4-1_armhf.deb libavresample-dev_4.1.4-1_armhf.deb libavcodec-extra_4.1.4-1_all.deb libavfilter-extra_4.1.4-1_all.deb libavfilter-dev_4.1.4-1_armhf.deb ffmpeg-doc_4.1.4-1_all.deb libavcodec-dev_4.1.4-1_armhf.deb libavdevice58_4.1.4-1_armhf.deb libavdevice-dev_4.1.4-1_armhf.deb libavcodec58_4.1.4-1_armhf.deb libavcodec-extra58_4.1.4-1_armhf.deb
Let’ now test ffmpeg available hardware accelerators. First of all, let’s download a classic video:
wget http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_30fps_normal.mp4
mv bbb_sunflower_1080p_30fps_normal.mp4 /media/linaro/0E9ACA2339F586E5/
cd /media/linaro/0E9ACA2339F586E5/
ffmpeg -hwaccels
rm /tmp/*.ts
ffmpeg -hwaccel vdpau -i bbb_sunflower_1080p_30fps_normal.mp4 /tmp/vdpau.ts
ffmpeg -hwaccel vaapi -i bbb_sunflower_1080p_30fps_normal.mp4 /tmp/vaapi.ts
ffmpeg -hwaccel drm -i bbb_sunflower_1080p_30fps_normal.mp4 /tmp/drm.ts
Looks pretty bad. Of course, these accelerators, despite having been compiled and being available can’t work on this machine. To drive home this point, let’s issue a few commands:
vainfo
vdpauinfo
Now, we’re sure this won’t work. So what shall we do? Well, with that version of ffmpeg, or even the most recent one, there is not much hope. Fortunately, we can use a fork of ffmpeg that has been done by RockChip, and see if that could help us getting hardware acceleration with RK3399. Stay tuned.
[insert gif ffmpeg-hwaccels] ajouter des options, puis lancer hwaccels puis fermer. Suite au prochain �pisode.
Essayer les options trouv�es l�: https://www.raspberrypi.org/forums/viewtopic.php?t=199775
280 sudo apt install libx264-dev 281 cd ~/ffmpeg_sources 282 git clone https://github.com/FFmpeg/FFmpeg -b master 283 cd FFmpeg 284 PATH=”$HOME/bin:$PATH” PKG_CONFIG_PATH=”$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig” ./configure –pkg-config-flags=”–static” –prefix=”$HOME/bin” –extra-cflags=”-I$HOME/bin/include” –extra-ldflags=”-L$HOME/bin/lib” –extra-cflags=”-I/usr/local/include” –extra-ldflags=”-L/usr/local/lib” –bindir=”$HOME/bin” –enable-debug=3 –enable-vaapi –enable-libvorbis –enable-libvpx –disable-debug –enable-gpl –cpu=native –enable-opengl –enable-libfdk-aac –enable-libx264 –enable-libx265 –extra-libs=-lpthread –enable-nonfree 285 PATH=”$HOME/bin:$PATH” make -j$(nproc) 286 make -j$(nproc) install 287 make -j$(nproc) distclean 288 hash -r 289 cd ~/ffmpeg_sources 290 git clone http://git.videolan.org/git/x264.git -b stable 291 cd x264/ 292 PATH=”$HOME/bin:$PATH” ./configure –prefix=”$HOME/bin” –bindir=”$HOME/bin” –enable-static –disable-opencl 293 PATH=”$HOME/bin:$PATH” make -j$(nproc) VERBOSE=1 294 make -j$(nproc) install VERBOSE=1 295 sudo apt install nasm 296 no NEON support, try adding -mfpu=neon to CFLAGS come on! 297 PATH=”$HOME/bin:$PATH” ./configure –prefix=”$HOME/bin” –bindir=”$HOME/bin” –enable-static –disable-opencl 298 sudo apt install yasm 299 PATH=”$HOME/bin:$PATH” ./configure –prefix=”$HOME/bin” –bindir=”$HOME/bin” –enable-static –disable-opencl 300 PATH=”$HOME/bin:$PATH” ./configure –prefix=”$HOME/bin” –bindir=”$HOME/bin” –enable-static –disable-opencl –host=arm-linux –enable-pic 301 PATH=”$HOME/bin:$PATH” make -j$(nproc) VERBOSE=1 302 make -j$(nproc) install VERBOSE=1 303 make -j$(nproc) distclean 304 cd ~/ffmpeg_sources 305 git clone https://github.com/FFmpeg/FFmpeg -b master 306 cd FFmpeg 307 PATH=”$HOME/bin:$PATH” PKG_CONFIG_PATH=”$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig” ./configure –pkg-config-flags=”–static” –prefix=”$HOME/bin” –extra-cflags=”-I$HOME/bin/include” –extra-ldflags=”-L$HOME/bin/lib” –extra-cflags=”-I/usr/local/include” –extra-ldflags=”-L/usr/local/lib” –bindir=”$HOME/bin” –enable-debug=3 –enable-vaapi –enable-libvorbis –enable-libvpx –disable-debug –enable-gpl –cpu=native –enable-opengl –enable-libfdk-aac –enable-libx264 –enable-libx265 –extra-libs=-lpthread –enable-nonfree 308 PATH=”$HOME/bin:$PATH” make -j$(nproc) 309 make -j$(nproc) install 310 make -j$(nproc) distclean 311 sudo apt install libopengl-dev 312 sudo apt-cache search opengl 313 sudo apt-cache search opengl|grep dev 314 sudo apt-cache search opengl|grep dev|grep lib 315 sudo apt install libglew-dev libglfw3-dev 316 cd ~/ffmpeg_sources 317 git clone https://github.com/FFmpeg/FFmpeg -b master 318 cd FFmpeg 319 PATH=”$HOME/bin:$PATH” PKG_CONFIG_PATH=”$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig” ./configure –pkg-config-flags=”–static” –prefix=”$HOME/bin” –extra-cflags=”-I$HOME/bin/include” –extra-ldflags=”-L$HOME/bin/lib” –extra-cflags=”-I/usr/local/include” –extra-ldflags=”-L/usr/local/lib” –bindir=”$HOME/bin” –enable-debug=3 –enable-vaapi –enable-libvorbis –enable-libvpx –disable-debug –enable-gpl –cpu=native –enable-opengl –enable-libfdk-aac –enable-libx264 –enable-libx265 –extra-libs=-lpthread –enable-nonfree 320 PATH=”$HOME/bin:$PATH” make -j$(nproc) 321 make -j$(nproc) install 322 make -j$(nproc) distclean 323 hash -r 324 sudo apt-get -y install autoconf automake build-essential libass-dev libtool pkg-config texinfo zlib1g-dev libva-dev cmake mercurial libdrm-dev libvorbis-dev libogg-dev git libx11-dev libperl-dev libpciaccess-dev libpciaccess0 xorg-dev 325 sudo add-apt-repository ppa:oibaf/graphics-drivers 326 sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade 327 sudo apt-get install software-properties-common 328 sudo add-apt-repository ppa:oibaf/graphics-drivers 329 export CFLAGS=”-mfpu=neon” 330 export https_proxy=http://10.24.219.17:3128 331 export http_proxy=http://10.24.219.17:3128 332 sudo add-apt-repository ppa:oibaf/graphics-drivers 333 sudo -E su 334 ./youtube-main-camera.sh 335 vi ./youtube-main-camera.sh 336 ./youtube-main-camera.sh 337 lsusb 338 ./youtube-main-camera.sh 339 ffmpeg -hwaccels 340 ll 341 ll mkv 342 cd /media/linaro/0E9ACA2339F586E5/ 343 ll 344 cd camera-rushes/ 345 ll 346 vainfo 347 sudo apt-cache search vainfo 348 sudo apt install vainfo 349 vainfo 350 sudo apt-get install vdpau-va-driver 351 ls /usr/lib/arm-linux-gnueabihf/dri/ 352 wget https://github.com/rockchip-linux/rk-rootfs-build/blob/master/packages/armhf/libmali/libmali-rk-utgard-450-r7p0_1.6-1_armhf.deb 353 export http_proxy=http://10.24.219.17:3128 354 exports http_proxy=http://10.24.219.17:3128 355 export https_proxy=http://10.24.219.17:3128 356 wget https://github.com/rockchip-linux/rk-rootfs-build/blob/master/packages/armhf/libmali/libmali-rk-utgard-450-r7p0_1.6-1_armhf.deb 357 wget https://github.com/rockchip-linux/rk-rootfs-build/blob/master/packages/armhf/libmali/ 358 cat index.html 359 wget https://github.com/rockchip-linux/rk-rootfs-build/blob/master/packages/armhf/libmali/libmali-rk-dev_1.7-1_armhf.deb 360 sudo dpkg -i libmali-rk-dev_1.7-1_armhf.deb 361 cd 362 git clone rockchip_drv_video.so 363 git clone https://github.com/hizukiayaka/rockchip-video-driver.git 364 cd rockchip-video-driver/ 365 ll 366 make 367 autoreconf 368 aclocal 369 ./configure 370 cat CMakeLists.txt 371 cmake 372 cmake . 373 ll 374 make 375 sudo make install 376 sudo ln -s /usr/local/lib/dri/rockchip_drv_video.so /usr/lib/arm-linux-gnueabihf/dri/rockchip_drv_video.so 377 cd 378 git clone -b release https://github.com/rockchip-linux/mpp.git 379 cd mpp/ 380 cmake -DRKPLATFORM=ON -DHAVE_DRM=ON && make -j {nproc} 381 cmake -DRKPLATFORM=ON -DHAVE_DRM=ON && make -j (nproc( 382 cmake -DRKPLATFORM=ON -DHAVE_DRM=ON && make -j (nproc) 383 cmake -DRKPLATFORM=ON -DHAVE_DRM=ON && make -j$(nproc) 384 sudo make install 385 ll /usr/local/lib/librockchip_ 386 ffmpeg -hide_banner -f lavfi -i nullsrc -c:v libx264 -preset help -f mp4 - 387 cd /media/linaro/0E9ACA2339F586E5/ 388 ll 389 cd camera-rushes/ 390 ll 391 ffmpeg -i 1562251002.mkv -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv 392 ffmpeg -i 1562251002.mkv -c:v libxh264_rkmpp -preset slow -crf 22 -c:a copy output.mkv 393 cat ~/youtube-main-camera.sh 394 ffmpeg -vcodec h264_rkmpp -i rtmp://192.168.1.210:1935/live/stream15 -s 320x240 /tmp/test.avi 395 ffmpeg -hwaccel drm -hwaccel_device /dev/dri/card0 -c:v h264_rkmpp -i rtmp://192.168.1.210:1935/live/stream15 -f null - -benchmark 396 history >~/history1.txt
git clone https://gitlab.freedesktop.org/mesa/drm.git sudo apt install meson
PATH=”$HOME/bin:$PATH” PKG_CONFIG_PATH=”/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/ffmpeg_build/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib/arm-linux-gnueabihf/pkgconfig:$HOME/bin/lib/pkgconfig:/usr/local/lib/pkgconfig” ./configure –enable-gpl –enable-version3 –enable-shared –enable-small –enable-avisynth –enable-frei0r –enable-gmp –enable-ladspa –enable-libcaca –enable-libcdio –enable-libfontconfig –enable-libfreetype –enable-libfribidi –enable-libgme –enable-libgsm –enable-libjack –enable-libmodplug –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libopencore-amrwb –enable-libopenjpeg –enable-libopenmpt –enable-libopus –enable-libpulse –enable-librubberband –enable-librtmp –enable-libshine –enable-libsnappy –enable-libsoxr –enable-libspeex –enable-libssh –enable-libtheora –enable-libtwolame –enable-libv4l2 –enable-libvo-amrwbenc –enable-libvorbis –enable-libvpx –enable-libwavpack –enable-libwebp –enable-libx264 –enable-libx265 –enable-libxvid –enable-libxml2 –enable-libzmq –enable-libzvbi –enable-libmysofa –enable-openal –enable-opengl –enable-nonfree –enable-libfdk-aac –enable-hwaccel=’h264_vaapi,hevc_vaapi,vp9_vaapi’ –enable-decoder=’vp8,vp9’ –extra-libs=’-lnettle -lhogweed -lgmp -lpthread -lm -lz’ –pkg-config=”pkg-config –static” –extra-ldexeflags=”-static”