From bf21e3c690cfbab6cdbb76b3dd6e353f7221b3f1 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Wed, 25 Nov 2020 17:18:02 +0000 Subject: [PATCH] Make libffmpeg_jni link statically against ffmpeg Also make compilation automatically determine the number of threads to use during compilation. PiperOrigin-RevId: 344264761 --- .../exoplayer2/ext/ffmpeg/FfmpegLibrary.java | 3 +-- extensions/ffmpeg/src/main/jni/CMakeLists.txt | 6 ++--- .../ffmpeg/src/main/jni/build_ffmpeg.sh | 24 +++++++++++++------ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegLibrary.java b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegLibrary.java index 71912aea2f..5bc225baa2 100644 --- a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegLibrary.java +++ b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegLibrary.java @@ -34,8 +34,7 @@ public final class FfmpegLibrary { private static final String TAG = "FfmpegLibrary"; - private static final LibraryLoader LOADER = - new LibraryLoader("avutil", "swresample", "avcodec", "ffmpeg_jni"); + private static final LibraryLoader LOADER = new LibraryLoader("ffmpeg_jni"); private static @MonotonicNonNull String version; private static int inputBufferPaddingSize = C.LENGTH_UNSET; diff --git a/extensions/ffmpeg/src/main/jni/CMakeLists.txt b/extensions/ffmpeg/src/main/jni/CMakeLists.txt index b60af4fa18..bc1009e131 100644 --- a/extensions/ffmpeg/src/main/jni/CMakeLists.txt +++ b/extensions/ffmpeg/src/main/jni/CMakeLists.txt @@ -9,11 +9,11 @@ set(ffmpeg_location "${CMAKE_CURRENT_SOURCE_DIR}/ffmpeg") set(ffmpeg_binaries "${ffmpeg_location}/android-libs/${ANDROID_ABI}") foreach(ffmpeg_lib avutil swresample avcodec) - set(ffmpeg_lib_filename lib${ffmpeg_lib}.so) + set(ffmpeg_lib_filename lib${ffmpeg_lib}.a) set(ffmpeg_lib_file_path ${ffmpeg_binaries}/${ffmpeg_lib_filename}) add_library( ${ffmpeg_lib} - SHARED + STATIC IMPORTED) set_target_properties( ${ffmpeg_lib} PROPERTIES @@ -30,7 +30,7 @@ add_library(ffmpeg_jni target_link_libraries(ffmpeg_jni PRIVATE android - PRIVATE avutil PRIVATE swresample PRIVATE avcodec + PRIVATE avutil PRIVATE ${android_log_lib}) diff --git a/extensions/ffmpeg/src/main/jni/build_ffmpeg.sh b/extensions/ffmpeg/src/main/jni/build_ffmpeg.sh index 4660669a33..ab3c85d376 100755 --- a/extensions/ffmpeg/src/main/jni/build_ffmpeg.sh +++ b/extensions/ffmpeg/src/main/jni/build_ffmpeg.sh @@ -19,10 +19,12 @@ FFMPEG_EXT_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) +echo "Using $JOBS jobs for make" COMMON_OPTIONS=" --target-os=android - --disable-static - --enable-shared + --enable-static + --disable-shared --disable-doc --disable-programs --disable-everything @@ -48,11 +50,13 @@ cd "${FFMPEG_EXT_PATH}/jni/ffmpeg" --cpu=armv7-a \ --cross-prefix="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi16-" \ --nm="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-nm" \ - --strip="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-strip" \ + --ar="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-ar" \ + --ranlib="${TOOLCHAIN_PREFIX}/arm-linux-androideabi-ranlib" \ + --strip="${TOOLCHAIN_PREFIX}/armv7a-linux-androideabi-strip" \ --extra-cflags="-march=armv7-a -mfloat-abi=softfp" \ --extra-ldflags="-Wl,--fix-cortex-a8" \ ${COMMON_OPTIONS} -make -j4 +make -j$JOBS make install-libs make clean ./configure \ @@ -61,9 +65,11 @@ make clean --cpu=armv8-a \ --cross-prefix="${TOOLCHAIN_PREFIX}/aarch64-linux-android21-" \ --nm="${TOOLCHAIN_PREFIX}/aarch64-linux-android-nm" \ + --ar="${TOOLCHAIN_PREFIX}/aarch64-linux-android-ar" \ + --ranlib="${TOOLCHAIN_PREFIX}/aarch64-linux-android-ranlib" \ --strip="${TOOLCHAIN_PREFIX}/aarch64-linux-android-strip" \ ${COMMON_OPTIONS} -make -j4 +make -j$JOBS make install-libs make clean ./configure \ @@ -72,10 +78,12 @@ make clean --cpu=i686 \ --cross-prefix="${TOOLCHAIN_PREFIX}/i686-linux-android16-" \ --nm="${TOOLCHAIN_PREFIX}/i686-linux-android-nm" \ + --ar="${TOOLCHAIN_PREFIX}/i686-linux-android-ar" \ + --ranlib="${TOOLCHAIN_PREFIX}/i686-linux-android-ranlib" \ --strip="${TOOLCHAIN_PREFIX}/i686-linux-android-strip" \ --disable-asm \ ${COMMON_OPTIONS} -make -j4 +make -j$JOBS make install-libs make clean ./configure \ @@ -84,9 +92,11 @@ make clean --cpu=x86_64 \ --cross-prefix="${TOOLCHAIN_PREFIX}/x86_64-linux-android21-" \ --nm="${TOOLCHAIN_PREFIX}/x86_64-linux-android-nm" \ + --ar="${TOOLCHAIN_PREFIX}/x86_64-linux-android-ar" \ + --ranlib="${TOOLCHAIN_PREFIX}/x86_64-linux-android-ranlib" \ --strip="${TOOLCHAIN_PREFIX}/x86_64-linux-android-strip" \ --disable-asm \ ${COMMON_OPTIONS} -make -j4 +make -j$JOBS make install-libs make clean