1
0
mirror of https://github.com/jellyfin/jellyfin-ffmpeg.git synced 2025-04-18 20:24:05 +03:00

Enable chromaprint in ffmpeg

This commit is contained in:
nyanmisaka 2022-05-27 03:36:12 +08:00
parent e71a9b1f7d
commit 86be6b56ca
6 changed files with 162 additions and 43 deletions

View File

@ -14,7 +14,7 @@ ENV DPKG_INSTALL_LIST=${SOURCE_DIR}/debian/jellyfin-ffmpeg5.install
ENV PATH=${TARGET_DIR}/bin:${PATH}
ENV PKG_CONFIG_PATH=${TARGET_DIR}/lib/pkgconfig:${PKG_CONFIG_PATH}
ENV LD_LIBRARY_PATH=${TARGET_DIR}/lib:${TARGET_DIR}/lib/mfx:${TARGET_DIR}/lib/xorg:${LD_LIBRARY_PATH}
ENV LDFLAGS=-Wl,-rpath=${TARGET_DIR}/lib
ENV LDFLAGS="-Wl,-rpath=${TARGET_DIR}/lib -L${TARGET_DIR}/lib"
ENV CXXFLAGS="-I${TARGET_DIR}/include $CXXFLAGS"
ENV CPPFLAGS="-I${TARGET_DIR}/include $CPPFLAGS"
ENV CFLAGS="-I${TARGET_DIR}/include $CFLAGS"

2
debian/rules vendored
View File

@ -12,6 +12,7 @@ PACKAGEVERSION := "$(ORIG_VERSION)-$(VERSION_SUFFIX)"
CONFIG := --prefix=${TARGET_DIR} \
--target-os=linux \
--extra-libs='-lfftw3' \
--extra-version=Jellyfin \
--disable-doc \
--disable-ffplay \
@ -26,6 +27,7 @@ CONFIG := --prefix=${TARGET_DIR} \
--enable-static \
--enable-gmp \
--enable-gnutls \
--enable-chromaprint \
--enable-libdrm \
--enable-libass \
--enable-libfreetype \

View File

@ -121,6 +121,48 @@ make install
popd
popd
# FFTW3
mkdir fftw3
pushd fftw3
fftw3_ver="3.3.10"
fftw3_link="https://fftw.org/fftw-${fftw3_ver}.tar.gz"
wget ${fftw3_link} -O fftw3.tar.gz
tar xaf fftw3.tar.gz
pushd fftw-${fftw3_ver}
./configure \
--prefix=${FF_DEPS_PREFIX} \
--host=${FF_TOOLCHAIN} \
--disable-{shared,doc} \
--enable-{static,threads,fortran} \
--enable-{sse2,avx,avx-128-fma,avx2,avx512} \
--with-our-malloc \
--with-combined-threads \
--with-incoming-stack-boundary=2
make -j$(nproc)
make install
popd
popd
# CHROMAPRINT
git clone --depth=1 https://github.com/acoustid/chromaprint.git
pushd chromaprint
mkdir build
pushd build
cmake \
-DCMAKE_TOOLCHAIN_FILE=${FF_CMAKE_TOOLCHAIN} \
-DCMAKE_INSTALL_PREFIX=${FF_DEPS_PREFIX} \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_{TOOLS,TESTS}=OFF \
-DFFT_LIB=fftw3 \
..
make -j$(nproc)
make install
FF_EXTRA_LIBS="-lfftw3 -lstdc++${FF_EXTRA_LIBS}"
FF_EXTRA_CFLAGS="-DCHROMAPRINT_NODLL${FF_EXTRA_CFLAGS}"
popd
popd
# LZMA
mkdir xz
pushd xz
@ -508,6 +550,8 @@ fi
./configure \
--prefix=${FF_PREFIX} \
${FF_TARGET_FLAGS} \
--extra-libs="${FF_EXTRA_LIBS}" \
--extra-cflags="${FF_EXTRA_CFLAGS}" \
--extra-version=Jellyfin \
--disable-ffplay \
--disable-debug \
@ -526,6 +570,7 @@ fi
--enable-zlib \
--enable-lzma \
--enable-gmp \
--enable-chromaprint \
--enable-libfreetype \
--enable-libfribidi \
--enable-libfontconfig \

View File

@ -10,21 +10,77 @@ PORTS_ADDR=http://ports.ubuntu.com/
# Prepare common extra libs for amd64, armhf and arm64
prepare_extra_common() {
case ${ARCH} in
'amd64')
CROSS_OPT=""
CMAKE_TOOLCHAIN_OPT=""
MESON_CROSS_OPT=""
;;
'armhf')
CROSS_OPT="--host=armv7-linux-gnueabihf CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++"
CMAKE_TOOLCHAIN_OPT="-DCMAKE_TOOLCHAIN_FILE=${SOURCE_DIR}/toolchain-${ARCH}.cmake"
MESON_CROSS_OPT="--cross-file=${SOURCE_DIR}/cross-${ARCH}.meson"
;;
'arm64')
CROSS_OPT="--host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++"
CMAKE_TOOLCHAIN_OPT="-DCMAKE_TOOLCHAIN_FILE=${SOURCE_DIR}/toolchain-${ARCH}.cmake"
MESON_CROSS_OPT="--cross-file=${SOURCE_DIR}/cross-${ARCH}.meson"
;;
esac
# FFTW3
pushd ${SOURCE_DIR}
mkdir fftw3
pushd fftw3
fftw3_ver="3.3.10"
fftw3_link="https://fftw.org/fftw-${fftw3_ver}.tar.gz"
wget ${fftw3_link} -O fftw3.tar.gz
tar xaf fftw3.tar.gz
pushd fftw-${fftw3_ver}
if [ "${ARCH}" = "amd64" ]; then
fftw3_optimizations="--enable-sse2 --enable-avx --enable-avx-128-fma --enable-avx2 --enable-avx512"
else
fftw3_optimizations=""
fi
./configure \
${CROSS_OPT} \
--prefix=${TARGET_DIR} \
--disable-{static,doc} \
--enable-{shared,threads,fortran} \
$fftw3_optimizations \
--with-our-malloc \
--with-combined-threads \
--with-incoming-stack-boundary=2
make -j$(nproc) && make install && make install DESTDIR=${SOURCE_DIR}/fftw3
echo "fftw3${TARGET_DIR}/lib/libfftw3.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST}
popd
popd
popd
# CHROMAPRINT
pushd ${SOURCE_DIR}
git clone --depth=1 https://github.com/acoustid/chromaprint.git
pushd chromaprint
mkdir build
pushd build
cmake \
${CMAKE_TOOLCHAIN_OPT} \
-DCMAKE_INSTALL_PREFIX=${TARGET_DIR} \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_{TOOLS,TESTS}=OFF \
-DFFT_LIB=fftw3 \
..
make -j$(nproc) && make install && make install DESTDIR=${SOURCE_DIR}/chromaprint
echo "chromaprint${TARGET_DIR}/lib/libchromaprint.so* usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST}
popd
popd
popd
# ZIMG
pushd ${SOURCE_DIR}
git clone --depth=1 https://github.com/sekrit-twc/zimg
pushd zimg
case ${ARCH} in
'amd64')
CROSS_OPT=""
;;
'armhf')
CROSS_OPT="--host=armv7-linux-gnueabihf CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++"
;;
'arm64')
CROSS_OPT="--host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++"
;;
esac
./autogen.sh
./configure --prefix=${TARGET_DIR} ${CROSS_OPT}
make -j $(nproc) && make install && make install DESTDIR=${SOURCE_DIR}/zimg
@ -35,39 +91,29 @@ prepare_extra_common() {
# DAV1D
pushd ${SOURCE_DIR}
git clone -b 1.0.0 --depth=1 https://code.videolan.org/videolan/dav1d.git
nasmver="$(nasm -v | cut -d ' ' -f3)"
nasmminver="2.14.0"
if [ "$(printf '%s\n' "$nasmminver" "$nasmver" | sort -V | head -n1)" = "$nasmminver" ]; then
x86asm=true
else
x86asm=false
fi
if [ "${ARCH}" = "amd64" ]; then
meson setup dav1d dav1d_build \
--prefix=${TARGET_DIR} \
--libdir=lib \
-Ddefault_library=shared \
-Denable_asm=$x86asm \
-Denable_{tools,tests,examples}=false
meson configure dav1d_build
ninja -C dav1d_build install
cp ${TARGET_DIR}/lib/libdav1d.so* ${SOURCE_DIR}/dav1d
echo "dav1d/libdav1d.so* /usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST}
fi
if [ "${ARCH}" = "armhf" ] || [ "${ARCH}" = "arm64" ]; then
meson setup dav1d dav1d_build \
--cross-file=${SOURCE_DIR}/cross-${ARCH}.meson \
--prefix=${TARGET_DIR} \
--libdir=lib \
--buildtype=release \
-Ddefault_library=shared \
-Denable_asm=true \
-Denable_{tools,tests,examples}=false
meson configure dav1d_build
ninja -C dav1d_build install
cp ${TARGET_DIR}/lib/libdav1d.so* ${SOURCE_DIR}/dav1d
echo "dav1d/libdav1d.so* /usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST}
nasmver="$(nasm -v | cut -d ' ' -f3)"
nasmminver="2.14.0"
if [ "$(printf '%s\n' "$nasmminver" "$nasmver" | sort -V | head -n1)" = "$nasmminver" ]; then
dav1d_asm=true
else
dav1d_asm=false
fi
else
dav1d_asm=true
fi
meson setup dav1d dav1d_build \
${MESON_CROSS_OPT} \
--prefix=${TARGET_DIR} \
--libdir=lib \
--buildtype=release \
-Ddefault_library=shared \
-Denable_asm=$dav1d_asm \
-Denable_{tools,tests,examples}=false
meson configure dav1d_build
ninja -C dav1d_build install
cp ${TARGET_DIR}/lib/libdav1d.so* ${SOURCE_DIR}/dav1d
echo "dav1d/libdav1d.so* /usr/lib/jellyfin-ffmpeg/lib" >> ${DPKG_INSTALL_LIST}
popd
# FDK-AAC-STRIPPED

13
toolchain-arm64.cmake Normal file
View File

@ -0,0 +1,13 @@
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_RANLIB aarch64-linux-gnu-ranlib)
set(CMAKE_AR aarch64-linux-gnu-ar)
set(CMAKE_FIND_ROOT_PATH /usr/bin /usr/lib/jellyfin-ffmpeg /usr/aarch64-linux-gnu)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

13
toolchain-armhf.cmake Normal file
View File

@ -0,0 +1,13 @@
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR armv7)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_RANLIB arm-linux-gnueabihf-ranlib)
set(CMAKE_AR arm-linux-gnueabihf-ar)
set(CMAKE_FIND_ROOT_PATH /usr/bin /usr/lib/jellyfin-ffmpeg /usr/arm-linux-gnueabihf)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)