ffmpeg: add support of specifying Android ABI version when building FFmpeg
Also add proper error message when using NDK that doesn't support requested ABI version.
This commit is contained in:
parent
90a0cbdf3d
commit
6874cc80cf
@ -29,7 +29,7 @@ FFMPEG_MODULE_PATH="$(pwd)/libraries/decoder_ffmpeg/src/main"
|
||||
```
|
||||
|
||||
* Download the [Android NDK][] and set its location in a shell variable.
|
||||
This build configuration has been tested on NDK r21.
|
||||
This build configuration has been tested on NDK r26b (r23c if ANDROID_ABI is 16).
|
||||
|
||||
```
|
||||
NDK_PATH="<path to Android NDK>"
|
||||
@ -41,6 +41,12 @@ NDK_PATH="<path to Android NDK>"
|
||||
HOST_PLATFORM="linux-x86_64"
|
||||
```
|
||||
|
||||
* Set the ABI version for native code (typically it's equal to minSdk and must not exceed it):
|
||||
|
||||
```
|
||||
ANDROID_ABI=16
|
||||
```
|
||||
|
||||
* Fetch FFmpeg and checkout an appropriate branch. We cannot guarantee
|
||||
compatibility with all versions of FFmpeg. We currently recommend version
|
||||
6.0:
|
||||
@ -74,7 +80,7 @@ ln -s "$FFMPEG_PATH" ffmpeg
|
||||
```
|
||||
cd "${FFMPEG_MODULE_PATH}/jni" && \
|
||||
./build_ffmpeg.sh \
|
||||
"${FFMPEG_MODULE_PATH}" "${NDK_PATH}" "${HOST_PLATFORM}" "${ENABLED_DECODERS[@]}"
|
||||
"${FFMPEG_MODULE_PATH}" "${NDK_PATH}" "${HOST_PLATFORM}" "${ANDROID_ABI}" "${ENABLED_DECODERS[@]}"
|
||||
```
|
||||
|
||||
## Build instructions (Windows)
|
||||
|
@ -16,11 +16,17 @@
|
||||
#
|
||||
set -eu
|
||||
|
||||
FFMPEG_MODULE_PATH=$1
|
||||
NDK_PATH=$2
|
||||
HOST_PLATFORM=$3
|
||||
ENABLED_DECODERS=("${@:4}")
|
||||
JOBS=$(nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 4)
|
||||
FFMPEG_MODULE_PATH="$1"
|
||||
echo "FFMPEG_MODULE_PATH is ${FFMPEG_MODULE_PATH}"
|
||||
NDK_PATH="$2"
|
||||
echo "NDK path is ${NDK_PATH}"
|
||||
HOST_PLATFORM="$3"
|
||||
echo "Host platform is ${HOST_PLATFORM}"
|
||||
ANDROID_ABI="$4"
|
||||
echo "ANDROID_ABI is ${ANDROID_ABI}"
|
||||
ENABLED_DECODERS=("${@:5}")
|
||||
echo "Enabled decoders are ${ENABLED_DECODERS[@]}"
|
||||
JOBS="$(nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 4)"
|
||||
echo "Using $JOBS jobs for make"
|
||||
COMMON_OPTIONS="
|
||||
--target-os=android
|
||||
@ -45,12 +51,28 @@ for decoder in "${ENABLED_DECODERS[@]}"
|
||||
do
|
||||
COMMON_OPTIONS="${COMMON_OPTIONS} --enable-decoder=${decoder}"
|
||||
done
|
||||
|
||||
ARMV7_CLANG="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi${ANDROID_ABI}-clang"
|
||||
if [[ -e "${TOOLCHAIN_PREFIX}" && ! -e "$ARMV7_CLANG" ]]
|
||||
then
|
||||
echo "AVMv7 Clang compiler with path $ARMV7_CLANG does not exist"
|
||||
echo "It's likely your NDK version doesn't support ANDROID_ABI $ANDROID_ABI"
|
||||
echo "Either use older version of NDK or raise ANDROID_ABI (be aware that ANDROID_ABI must not be greater than your application's minSdk)"
|
||||
exit 1
|
||||
fi
|
||||
ANDROID_ABI_64BIT="$ANDROID_ABI"
|
||||
if [[ "$ANDROID_ABI_64BIT" -lt 21 ]]
|
||||
then
|
||||
echo "Using ANDROID_ABI 21 for 64-bit architectures"
|
||||
ANDROID_ABI_64BIT=21
|
||||
fi
|
||||
|
||||
cd "${FFMPEG_MODULE_PATH}/jni/ffmpeg"
|
||||
./configure \
|
||||
--libdir=android-libs/armeabi-v7a \
|
||||
--arch=arm \
|
||||
--cpu=armv7-a \
|
||||
--cross-prefix="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi16-" \
|
||||
--cross-prefix="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi${ANDROID_ABI}-" \
|
||||
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
|
||||
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
|
||||
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
|
||||
@ -65,7 +87,7 @@ make clean
|
||||
--libdir=android-libs/arm64-v8a \
|
||||
--arch=aarch64 \
|
||||
--cpu=armv8-a \
|
||||
--cross-prefix="${TOOLCHAIN_PREFIX}/aarch64-linux-android21-" \
|
||||
--cross-prefix="${TOOLCHAIN_PREFIX}/aarch64-linux-android${ANDROID_ABI_64BIT}-" \
|
||||
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
|
||||
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
|
||||
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
|
||||
@ -78,7 +100,7 @@ make clean
|
||||
--libdir=android-libs/x86 \
|
||||
--arch=x86 \
|
||||
--cpu=i686 \
|
||||
--cross-prefix="${TOOLCHAIN_PREFIX}/i686-linux-android16-" \
|
||||
--cross-prefix="${TOOLCHAIN_PREFIX}/i686-linux-android${ANDROID_ABI}-" \
|
||||
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
|
||||
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
|
||||
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
|
||||
@ -92,7 +114,7 @@ make clean
|
||||
--libdir=android-libs/x86_64 \
|
||||
--arch=x86_64 \
|
||||
--cpu=x86_64 \
|
||||
--cross-prefix="${TOOLCHAIN_PREFIX}/x86_64-linux-android21-" \
|
||||
--cross-prefix="${TOOLCHAIN_PREFIX}/x86_64-linux-android${ANDROID_ABI_64BIT}-" \
|
||||
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
|
||||
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
|
||||
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
|
||||
|
Loading…
x
Reference in New Issue
Block a user