Merge pull request #867 from equeim:ndk-r26

PiperOrigin-RevId: 590142275
This commit is contained in:
Copybara-Service 2023-12-12 03:48:08 -08:00
commit 27f437b65a
3 changed files with 45 additions and 15 deletions

View File

@ -117,8 +117,9 @@
([#710](https://github.com/androidx/media/pull/710)). ([#710](https://github.com/androidx/media/pull/710)).
* MIDI: Fix issue where seeking forward skips the Program Change events * MIDI: Fix issue where seeking forward skips the Program Change events
([#704](https://github.com/androidx/media/issues/704). ([#704](https://github.com/androidx/media/issues/704).
* Migrate to FFmpeg 6.0 * Migrate to FFmpeg 6.0 and update supported NDK to `r26b`
([#707](https://github.com/androidx/media/pull/707)). ([#707](https://github.com/androidx/media/pull/707),
[#867](https://github.com/androidx/media/pull/867)).
* Leanback extension: * Leanback extension:
* Cast Extension: * Cast Extension:
* Sanitize creation of a `Timeline` to not crash the app when loading * Sanitize creation of a `Timeline` to not crash the app when loading

View File

@ -28,8 +28,8 @@ cd "<path to project checkout>"
FFMPEG_MODULE_PATH="$(pwd)/libraries/decoder_ffmpeg/src/main" FFMPEG_MODULE_PATH="$(pwd)/libraries/decoder_ffmpeg/src/main"
``` ```
* Download the [Android NDK][] and set its location in a shell variable. * Download the [Android NDK][] and set its location in a shell variable. This
This build configuration has been tested on NDK r21. build configuration has been tested on NDK r26b (r23c if ANDROID_ABI is 16).
``` ```
NDK_PATH="<path to Android NDK>" NDK_PATH="<path to Android NDK>"
@ -41,6 +41,13 @@ NDK_PATH="<path to Android NDK>"
HOST_PLATFORM="linux-x86_64" 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 * Fetch FFmpeg and checkout an appropriate branch. We cannot guarantee
compatibility with all versions of FFmpeg. We currently recommend version compatibility with all versions of FFmpeg. We currently recommend version
6.0: 6.0:
@ -74,7 +81,7 @@ ln -s "$FFMPEG_PATH" ffmpeg
``` ```
cd "${FFMPEG_MODULE_PATH}/jni" && \ cd "${FFMPEG_MODULE_PATH}/jni" && \
./build_ffmpeg.sh \ ./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) ## Build instructions (Windows)

View File

@ -16,11 +16,17 @@
# #
set -eu set -eu
FFMPEG_MODULE_PATH=$1 FFMPEG_MODULE_PATH="$1"
NDK_PATH=$2 echo "FFMPEG_MODULE_PATH is ${FFMPEG_MODULE_PATH}"
HOST_PLATFORM=$3 NDK_PATH="$2"
ENABLED_DECODERS=("${@:4}") echo "NDK path is ${NDK_PATH}"
JOBS=$(nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 4) 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" echo "Using $JOBS jobs for make"
COMMON_OPTIONS=" COMMON_OPTIONS="
--target-os=android --target-os=android
@ -45,12 +51,28 @@ for decoder in "${ENABLED_DECODERS[@]}"
do do
COMMON_OPTIONS="${COMMON_OPTIONS} --enable-decoder=${decoder}" COMMON_OPTIONS="${COMMON_OPTIONS} --enable-decoder=${decoder}"
done 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" cd "${FFMPEG_MODULE_PATH}/jni/ffmpeg"
./configure \ ./configure \
--libdir=android-libs/armeabi-v7a \ --libdir=android-libs/armeabi-v7a \
--arch=arm \ --arch=arm \
--cpu=armv7-a \ --cpu=armv7-a \
--cross-prefix="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi16-" \ --cross-prefix="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi${ANDROID_ABI}-" \
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \ --nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \ --ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \ --ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
@ -65,7 +87,7 @@ make clean
--libdir=android-libs/arm64-v8a \ --libdir=android-libs/arm64-v8a \
--arch=aarch64 \ --arch=aarch64 \
--cpu=armv8-a \ --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" \ --nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \ --ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \ --ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
@ -78,7 +100,7 @@ make clean
--libdir=android-libs/x86 \ --libdir=android-libs/x86 \
--arch=x86 \ --arch=x86 \
--cpu=i686 \ --cpu=i686 \
--cross-prefix="${TOOLCHAIN_PREFIX}/i686-linux-android16-" \ --cross-prefix="${TOOLCHAIN_PREFIX}/i686-linux-android${ANDROID_ABI}-" \
--nm="${TOOLCHAIN_PREFIX}/llvm-nm" \ --nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \ --ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \ --ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \
@ -91,8 +113,8 @@ make clean
./configure \ ./configure \
--libdir=android-libs/x86_64 \ --libdir=android-libs/x86_64 \
--arch=x86_64 \ --arch=x86_64 \
--cpu=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" \ --nm="${TOOLCHAIN_PREFIX}/llvm-nm" \
--ar="${TOOLCHAIN_PREFIX}/llvm-ar" \ --ar="${TOOLCHAIN_PREFIX}/llvm-ar" \
--ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \ --ranlib="${TOOLCHAIN_PREFIX}/llvm-ranlib" \