#!/bin/bash
if [ ! $# == 1 ]; then
echo "Usage: $0 [0|1|2]"
exit 1
fi
# 使用环境变量中的输出目录
PREFIX="${FFMPEG_OUTPUT_DIR}"
# Toolchain setup
TOOLCHAIN=${NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=${TOOLCHAIN}/sysroot
# 确保输出目录存在
mkdir -p ${PREFIX}/lib
mkdir -p ${PREFIX}/include
# ABI configuration
case ${ARCH_ABI} in
armeabi-v7a)
TARGET=armv7a-linux-androideabi
CFLAGS="-march=armv7-a -mfpu=neon -D__ARM_ARCH_7A__ -O3 -fPIC -DANDROID"
LDFLAGS=""
TARGET_ARCH_OPTION="--arch=arm --enable-neon"
;;
arm64-v8a)
TARGET=aarch64-linux-android
CFLAGS="-march=armv8-a -D__ARM_ARCH_8A__ -O3 -fPIC -DANDROID"
LDFLAGS=""
TARGET_ARCH_OPTION="--arch=aarch64"
;;
*)
echo "Unsupported ABI: ${ARCH_ABI}"
exit 1
;;
esac
# 编译器路径设置
CC="${TOOLCHAIN}/bin/${TARGET}${ANDROID_API}-clang"
CXX="${TOOLCHAIN}/bin/${TARGET}${ANDROID_API}-clang++"
AR="${TOOLCHAIN}/bin/llvm-ar"
RANLIB="${TOOLCHAIN}/bin/llvm-ranlib"
STRIP="${TOOLCHAIN}/bin/llvm-strip"
# 导出环境变量
export CC CXX AR RANLIB STRIP
export CFLAGS LDFLAGS
echo "=================================================================="
echo "FFmpeg Version: ${FFMPEG_VERSION}"
echo "Output Directory: ${PREFIX}"
echo "CC=${CC}"
echo "CXX=${CXX}"
echo "AR=${AR}"
echo "RANLIB=${RANLIB}"
echo "STRIP=${STRIP}"
echo "CFLAGS=${CFLAGS}"
echo "LDFLAGS=${LDFLAGS}"
echo "PREFIX=${PREFIX}"
echo "=================================================================="
# Common configure options
COMMON_CONFIG="\
--prefix=${PREFIX} \
--enable-cross-compile \
--sysroot=${SYSROOT} \
--target-os=android \
${TARGET_ARCH_OPTION} \
--disable-everything \
--disable-programs \
--enable-pic \
--enable-gpl \
--enable-nonfree \
--enable-decoder=aac,aac_latm,h264 \
--enable-demuxer=aac,asf,ffmetadata,h264,mp3 \
--enable-muxer=adts,h264,mp4,pcm_s16le \
--enable-parser=aac,aac_latm,h264 \
--enable-protocol=file \
--disable-zlib \
--disable-debug \
--cc=${CC} \
--cxx=${CXX} \
--ar=${AR} \
--strip=${STRIP} \
--ranlib=${RANLIB}"
# Version-specific options
case ${FFMPEG_VERSION} in
"4.4.6")
EXTRA_CONFIG="--disable-vulkan --disable-mediacodec"
;;
"5.1.6"|"6.1.2"|"7.0.2")
EXTRA_CONFIG="--enable-jni --enable-mediacodec"
;;
esac
# 使用环境变量中的依赖库目录
export PKG_CONFIG_PATH="${DEPS_OUTPUT_DIR}/lib/pkgconfig"
case $1 in
"2")
echo "********support x264,fdk-aac encoder******"
./configure ${COMMON_CONFIG} \
--enable-libx264 \
--enable-libfdk-aac \
--enable-encoder=aac,libfdk_aac,libx264 \
--extra-cflags="-I${DEPS_OUTPUT_DIR}/include" \
--extra-ldflags="-L${DEPS_OUTPUT_DIR}/lib" \
${EXTRA_CONFIG} || exit $?
;;
"1")
echo "*******support h264,aac encoder******"
./configure ${COMMON_CONFIG} \
--enable-libx264 \
--enable-encoder=aac,libx264 \
--extra-cflags="-I${DEPS_OUTPUT_DIR}/include" \
--extra-ldflags="-L${DEPS_OUTPUT_DIR}/lib" \
${EXTRA_CONFIG} || exit $?
;;
"0")
echo "******no encoder support********"
./configure ${COMMON_CONFIG} \
--extra-cflags="-I${DEPS_OUTPUT_DIR}/include" \
--extra-ldflags="-L${DEPS_OUTPUT_DIR}/lib" \
${EXTRA_CONFIG} || exit $?
;;
*)
echo "Invalid parameter: $1"
exit 1
;;
esac
# 编译前清理
rm -f compat/strtod.o compat/strtod.d compat/msvcrt/snprintf.o compat/msvcrt/snprintf.d
make clean
make -j$THREAD_NUM
# 安装
make install