From 9bbc6d107188e4cb4b425933296d2e5a866fc71e Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Tue, 4 Apr 2017 09:34:45 -0700 Subject: [PATCH] Clean up FFmpeg extension instructions. Also add instructions for building arm64-v8a and x86. Issue: #2561 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=152141270 --- extensions/ffmpeg/README.md | 61 ++++++++++++++++------- extensions/ffmpeg/src/main/jni/Android.mk | 7 +-- 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/extensions/ffmpeg/README.md b/extensions/ffmpeg/README.md index beafcb6a96..c34b1b68e9 100644 --- a/extensions/ffmpeg/README.md +++ b/extensions/ffmpeg/README.md @@ -31,21 +31,12 @@ FFMPEG_EXT_PATH="${EXOPLAYER_ROOT}/extensions/ffmpeg/src/main" NDK_PATH="" ``` -* Fetch and build FFmpeg. For example, to fetch and build for armv7a: +* Fetch and build FFmpeg. For example, to fetch and build for armeabi-v7a, + arm64-v8a and x86 on Linux x86_64: ``` -cd "${FFMPEG_EXT_PATH}/jni" && \ -git clone git://source.ffmpeg.org/ffmpeg ffmpeg && cd ffmpeg && \ -./configure \ - --libdir=android-libs/armeabi-v7a \ - --arch=arm \ - --cpu=armv7-a \ - --cross-prefix="${NDK_PATH}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-" \ +COMMON_OPTIONS="\ --target-os=android \ - --sysroot="${NDK_PATH}/platforms/android-9/arch-arm/" \ - --extra-cflags="-march=armv7-a -mfloat-abi=softfp" \ - --extra-ldflags="-Wl,--fix-cortex-a8" \ - --extra-ldexeflags=-pie \ --disable-static \ --enable-shared \ --disable-doc \ @@ -57,22 +48,56 @@ git clone git://source.ffmpeg.org/ffmpeg ffmpeg && cd ffmpeg && \ --disable-postproc \ --disable-avfilter \ --disable-symver \ + --disable-swresample \ --enable-avresample \ --enable-decoder=vorbis \ --enable-decoder=opus \ --enable-decoder=flac \ - --enable-decoder=alac \ + " && \ +cd "${FFMPEG_EXT_PATH}/jni" && \ +git clone git://source.ffmpeg.org/ffmpeg ffmpeg && cd ffmpeg && \ +./configure \ + --libdir=android-libs/armeabi-v7a \ + --arch=arm \ + --cpu=armv7-a \ + --cross-prefix="${NDK_PATH}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-" \ + --sysroot="${NDK_PATH}/platforms/android-9/arch-arm/" \ + --extra-cflags="-march=armv7-a -mfloat-abi=softfp" \ + --extra-ldflags="-Wl,--fix-cortex-a8" \ + --extra-ldexeflags=-pie \ + ${COMMON_OPTIONS} \ && \ -make -j4 && \ -make install-libs +make -j4 && make install-libs && \ +make clean && ./configure \ + --libdir=android-libs/arm64-v8a \ + --arch=aarch64 \ + --cpu=armv8-a \ + --cross-prefix="${NDK_PATH}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-" \ + --sysroot="${NDK_PATH}/platforms/android-21/arch-arm64/" \ + --extra-ldexeflags=-pie \ + ${COMMON_OPTIONS} \ + && \ +make -j4 && make install-libs && \ +make clean && ./configure \ + --libdir=android-libs/x86 \ + --arch=x86 \ + --cpu=i686 \ + --cross-prefix="${NDK_PATH}/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-" \ + --sysroot="${NDK_PATH}/platforms/android-9/arch-x86/" \ + --extra-ldexeflags=-pie \ + --disable-asm \ + ${COMMON_OPTIONS} \ + && \ +make -j4 && make install-libs && \ +make clean ``` -* Build the JNI native libraries. Repeat this step for any other architectures - you need to support. +* Build the JNI native libraries, setting `APP_ABI` to include the architectures + built in the previous step. For example: ``` cd "${FFMPEG_EXT_PATH}"/jni && \ -${NDK_PATH}/ndk-build APP_ABI=armeabi-v7a -j4 +${NDK_PATH}/ndk-build APP_ABI="armeabi-v7a arm64-v8a x86" -j4 ``` * In your project, you can add a dependency on the extension by using a rule diff --git a/extensions/ffmpeg/src/main/jni/Android.mk b/extensions/ffmpeg/src/main/jni/Android.mk index f435ab7e98..046f90a5b2 100644 --- a/extensions/ffmpeg/src/main/jni/Android.mk +++ b/extensions/ffmpeg/src/main/jni/Android.mk @@ -31,15 +31,10 @@ LOCAL_MODULE := libavresample LOCAL_SRC_FILES := ffmpeg/android-libs/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE).so include $(PREBUILT_SHARED_LIBRARY) -include $(CLEAR_VARS) -LOCAL_MODULE := libswresample -LOCAL_SRC_FILES := ffmpeg/android-libs/$(TARGET_ARCH_ABI)/$(LOCAL_MODULE).so -include $(PREBUILT_SHARED_LIBRARY) - include $(CLEAR_VARS) LOCAL_MODULE := ffmpeg LOCAL_SRC_FILES := ffmpeg_jni.cc LOCAL_C_INCLUDES := ffmpeg -LOCAL_SHARED_LIBRARIES := libavcodec libavresample libavutil libswresample +LOCAL_SHARED_LIBRARIES := libavcodec libavresample libavutil LOCAL_LDLIBS := -Lffmpeg/android-libs/$(TARGET_ARCH_ABI) -llog include $(BUILD_SHARED_LIBRARY)