Skip to content

Commit

Permalink
[TF][JNI][UPDATE] FFmpeg 4.2.4 from source
Browse files Browse the repository at this point in the history
  • Loading branch information
thermatk committed Aug 16, 2020
1 parent 19c8a39 commit 74feeac
Show file tree
Hide file tree
Showing 5 changed files with 423 additions and 22 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
@@ -1,3 +1,6 @@
[submodule "TMessagesProj/jni/libwebp"]
path = TMessagesProj/jni/libwebp
url = https://github.com/webmproject/libwebp
[submodule "TMessagesProj/jni/ffmpeg"]
path = TMessagesProj/jni/ffmpeg
url = https://github.com/FFmpeg/FFmpeg
64 changes: 42 additions & 22 deletions TMessagesProj/jni/Android.mk 100755 → 100644
Expand Up @@ -4,13 +4,17 @@ LOCAL_PATH := $(MY_LOCAL_PATH)
LOCAL_MODULE := avutil

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SRC_FILES := ./ffmpeg/armv7-a/libavutil.a
FFMPEG_INCLUDE_PATH := $(LOCAL_PATH)/ffmpeg/build/armv7-a/include
LOCAL_SRC_FILES := ./ffmpeg/build/armv7-a/lib/libavutil.a
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES := ./ffmpeg/arm64/libavutil.a
FFMPEG_INCLUDE_PATH := $(LOCAL_PATH)/ffmpeg/build/arm64-v8a/include
LOCAL_SRC_FILES := ./ffmpeg/build/arm64-v8a/lib/libavutil.a
else ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_SRC_FILES := ./ffmpeg/i686/libavutil.a
FFMPEG_INCLUDE_PATH := $(LOCAL_PATH)/ffmpeg/build/i686/include
LOCAL_SRC_FILES := ./ffmpeg/build/i686/lib/libavutil.a
else ifeq ($(TARGET_ARCH_ABI),x86_64)
LOCAL_SRC_FILES := ./ffmpeg/x86_64/libavutil.a
FFMPEG_INCLUDE_PATH := $(LOCAL_PATH)/ffmpeg/build/x86_64/include
LOCAL_SRC_FILES := ./ffmpeg/build/x86_64/lib/libavutil.a
endif

include $(PREBUILT_STATIC_LIBRARY)
Expand All @@ -20,13 +24,13 @@ include $(CLEAR_VARS)
LOCAL_MODULE := avformat

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SRC_FILES := ./ffmpeg/armv7-a/libavformat.a
LOCAL_SRC_FILES := ./ffmpeg/build/armv7-a/lib/libavformat.a
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES := ./ffmpeg/arm64/libavformat.a
LOCAL_SRC_FILES := ./ffmpeg/build/arm64-v8a/lib/libavformat.a
else ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_SRC_FILES := ./ffmpeg/i686/libavformat.a
LOCAL_SRC_FILES := ./ffmpeg/build/i686/lib/libavformat.a
else ifeq ($(TARGET_ARCH_ABI),x86_64)
LOCAL_SRC_FILES := ./ffmpeg/x86_64/libavformat.a
LOCAL_SRC_FILES := ./ffmpeg/build/x86_64/lib/libavformat.a
endif

include $(PREBUILT_STATIC_LIBRARY)
Expand All @@ -36,13 +40,13 @@ include $(CLEAR_VARS)
LOCAL_MODULE := avcodec

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SRC_FILES := ./ffmpeg/armv7-a/libavcodec.a
LOCAL_SRC_FILES := ./ffmpeg/build/armv7-a/lib/libavcodec.a
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES := ./ffmpeg/arm64/libavcodec.a
LOCAL_SRC_FILES := ./ffmpeg/build/arm64-v8a/lib/libavcodec.a
else ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_SRC_FILES := ./ffmpeg/i686/libavcodec.a
LOCAL_SRC_FILES := ./ffmpeg/build/i686/lib/libavcodec.a
else ifeq ($(TARGET_ARCH_ABI),x86_64)
LOCAL_SRC_FILES := ./ffmpeg/x86_64/libavcodec.a
LOCAL_SRC_FILES := ./ffmpeg/build/x86_64/lib/libavcodec.a
endif

include $(PREBUILT_STATIC_LIBRARY)
Expand All @@ -52,13 +56,29 @@ include $(CLEAR_VARS)
LOCAL_MODULE := avresample

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SRC_FILES := ./ffmpeg/armv7-a/libavresample.a
LOCAL_SRC_FILES := ./ffmpeg/build/armv7-a/lib/libavresample.a
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES := ./ffmpeg/arm64/libavresample.a
LOCAL_SRC_FILES := ./ffmpeg/build/arm64-v8a/lib/libavresample.a
else ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_SRC_FILES := ./ffmpeg/i686/libavresample.a
LOCAL_SRC_FILES := ./ffmpeg/build/i686/lib/libavresample.a
else ifeq ($(TARGET_ARCH_ABI),x86_64)
LOCAL_SRC_FILES := ./ffmpeg/x86_64/libavresample.a
LOCAL_SRC_FILES := ./ffmpeg/build/x86_64/lib/libavresample.a
endif

include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := swresample

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SRC_FILES := ./ffmpeg/build/armv7-a/lib/libswresample.a
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES := ./ffmpeg/build/arm64-v8a/lib/libswresample.a
else ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_SRC_FILES := ./ffmpeg/build/i686/lib/libswresample.a
else ifeq ($(TARGET_ARCH_ABI),x86_64)
LOCAL_SRC_FILES := ./ffmpeg/build/x86_64/lib/libswresample.a
endif

include $(PREBUILT_STATIC_LIBRARY)
Expand All @@ -68,13 +88,13 @@ include $(CLEAR_VARS)
LOCAL_MODULE := swscale

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_SRC_FILES := ./ffmpeg/armv7-a/libswscale.a
LOCAL_SRC_FILES := ./ffmpeg/build/armv7-a/lib/libswscale.a
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
LOCAL_SRC_FILES := ./ffmpeg/arm64/libswscale.a
LOCAL_SRC_FILES := ./ffmpeg/build/arm64-v8a/lib/libswscale.a
else ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_SRC_FILES := ./ffmpeg/i686/libswscale.a
LOCAL_SRC_FILES := ./ffmpeg/build/i686/lib/libswscale.a
else ifeq ($(TARGET_ARCH_ABI),x86_64)
LOCAL_SRC_FILES := ./ffmpeg/x86_64/libswscale.a
LOCAL_SRC_FILES := ./ffmpeg/build/x86_64/lib/libswscale.a
endif

include $(PREBUILT_STATIC_LIBRARY)
Expand Down Expand Up @@ -287,7 +307,7 @@ LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math -D__STDC_CONSTANT_MACROS
LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -Os -funroll-loops -std=c++14
LOCAL_LDLIBS := -ljnigraphics -llog -lz -lEGL -lGLESv2 -landroid -lOpenSLES
LOCAL_STATIC_LIBRARIES := webp sqlite lz4 rlottie tgnet swscale avformat avcodec avresample avutil flac
LOCAL_STATIC_LIBRARIES := webp sqlite lz4 rlottie tgnet swscale avformat avcodec avresample avutil swresample flac
LOCAL_WHOLE_STATIC_LIBRARIES := tgcalls
LOCAL_ARM_NEON := false

Expand Down Expand Up @@ -492,7 +512,7 @@ $(LOCAL_PATH)/opus/ \
$(LOCAL_PATH)/opus/opusfile \
$(LOCAL_PATH)/third_party/libyuv/include \
$(LOCAL_PATH)/boringssl/include \
$(LOCAL_PATH)/ffmpeg/include \
$(FFMPEG_INCLUDE_PATH) \
$(LOCAL_PATH)/emoji \
$(LOCAL_PATH)/exoplayer/include \
$(LOCAL_PATH)/exoplayer/libFLAC/include \
Expand Down
185 changes: 185 additions & 0 deletions TMessagesProj/jni/build_ffmpeg_android.sh
@@ -0,0 +1,185 @@
#!/bin/bash

function build_one {

echo "Cleaning..."
rm config.h
make clean

echo "Configuring..."

./configure \
--cc=$CC \
--nm=$NM \
--enable-stripping \
--arch=$ARCH \
--target-os=linux \
--enable-cross-compile \
--x86asmexe=$NDK/prebuilt/$BUILD_PLATFORM/bin/yasm \
--prefix=$PREFIX \
--enable-pic \
--disable-shared \
--enable-static \
--enable-asm \
--enable-inline-asm \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$PLATFORM \
--extra-cflags="-Wl,-Bsymbolic -Os -DCONFIG_LINUX_PERF=0 -DANDROID $OPTIMIZE_CFLAGS -fPIE -pie --static -fPIC" \
--extra-ldflags="-Wl,-Bsymbolic -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -fPIC" \
--extra-libs="-lgcc" \
\
--enable-version3 \
--enable-gpl \
\
--disable-linux-perf \
\
--disable-doc \
--disable-htmlpages \
--disable-avx \
\
--disable-everything \
--disable-network \
--disable-zlib \
--disable-avfilter \
--disable-avdevice \
--disable-postproc \
--disable-debug \
--disable-programs \
--disable-network \
--disable-ffplay \
--disable-ffprobe \
--disable-postproc \
--disable-avdevice \
\
--enable-runtime-cpudetect \
--enable-pthreads \
--enable-avresample \
--enable-swscale \
--enable-protocol=file \
--enable-decoder=h264 \
--enable-decoder=mpeg4 \
--enable-decoder=mjpeg \
--enable-decoder=gif \
--enable-decoder=alac \
--enable-demuxer=mov \
--enable-demuxer=gif \
--enable-hwaccels \
--enable-runtime-cpudetect \
$ADDITIONAL_CONFIGURE_FLAG

#echo "continue?"
#read
make -j$COMPILATION_PROC_COUNT
make install

}

function setCurrentPlatform {

PLATFORM="$(uname -s)"
case "${PLATFORM}" in
Darwin*)
BUILD_PLATFORM=darwin-x86_64
COMPILATION_PROC_COUNT=`sysctl -n hw.physicalcpu`
;;
Linux*)
BUILD_PLATFORM=linux-x86_64
COMPILATION_PROC_COUNT=$(nproc)
;;
*)
echo -e "\033[33mWarning! Unknown platform ${PLATFORM}! falling back to linux-x86_64\033[0m"
BUILD_PLATFORM=linux-x86_64
COMPILATION_PROC_COUNT=1
;;
esac

echo "build platform: ${BUILD_PLATFORM}"
echo "parallel jobs: ${COMPILATION_PROC_COUNT}"

}

function checkPreRequisites {

if ! [ -d "ffmpeg" ] || ! [ "$(ls -A ffmpeg)" ]; then
echo -e "\033[31mFailed! Submodule 'ffmpeg' not found!\033[0m"
echo -e "\033[31mTry to run: 'git submodule init && git submodule update'\033[0m"
exit
fi

if [ -z "$NDK" -a "$NDK" == "" ]; then
echo -e "\033[31mFailed! NDK is empty. Run 'export NDK=[PATH_TO_NDK]'\033[0m"
exit
fi
}

setCurrentPlatform
checkPreRequisites

# TODO: fix env variable for NDK
# NDK=/opt/android-sdk/ndk-bundle

cd ffmpeg

#x86_64
PREBUILT=$NDK/toolchains/x86_64-4.9/prebuilt/$BUILD_PLATFORM
PLATFORM=$NDK/platforms/android-21/arch-x86_64
LD=$PREBUILT/bin/x86_64-linux-android-ld
AR=$PREBUILT/bin/x86_64-linux-android-ar
NM=$PREBUILT/bin/x86_64-linux-android-nm
GCCLIB=$PREBUILT/lib/gcc/x86_64-linux-android/4.9.x/libgcc.a
CC=$PREBUILT/bin/x86_64-linux-android-gcc
CROSS_PREFIX=$PREBUILT/bin/x86_64-linux-android-
ARCH=x86_64
CPU=x86_64
PREFIX=./build/$CPU
ADDITIONAL_CONFIGURE_FLAG="--disable-mmx --disable-inline-asm"
#build_one

#arm64-v8a
PREBUILT=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/$BUILD_PLATFORM
PLATFORM=$NDK/platforms/android-21/arch-arm64
LD=$PREBUILT/bin/aarch64-linux-android-ld
AR=$PREBUILT/bin/aarch64-linux-android-ar
NM=$PREBUILT/bin/aarch64-linux-android-nm
GCCLIB=$PREBUILT/lib/gcc/aarch64-linux-android/4.9.x/libgcc.a
CC=$PREBUILT/bin/aarch64-linux-android-gcc
CROSS_PREFIX=$PREBUILT/bin/aarch64-linux-android-
ARCH=arm64
CPU=arm64-v8a
OPTIMIZE_CFLAGS=
PREFIX=./build/$CPU
ADDITIONAL_CONFIGURE_FLAG="--enable-neon --enable-optimizations"
build_one


#arm v7n
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/$BUILD_PLATFORM
PLATFORM=$NDK/platforms/android-16/arch-arm
LD=$PREBUILT/bin/arm-linux-androideabi-ld
AR=$PREBUILT/bin/arm-linux-androideabi-ar
NM=$PREBUILT/bin/arm-linux-androideabi-nm
GCCLIB=$PREBUILT/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a
CC=$PREBUILT/bin/arm-linux-androideabi-gcc
CROSS_PREFIX=$PREBUILT/bin/arm-linux-androideabi-
ARCH=arm
CPU=armv7-a
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./build/$CPU
ADDITIONAL_CONFIGURE_FLAG=--enable-neon
build_one

#x86 platform
PREBUILT=$NDK/toolchains/x86-4.9/prebuilt/$BUILD_PLATFORM
PLATFORM=$NDK/platforms/android-16/arch-x86
LD=$PREBUILT/bin/i686-linux-android-ld
AR=$PREBUILT/bin/i686-linux-android-ar
NM=$PREBUILT/bin/i686-linux-android-nm
GCCLIB=$PREBUILT/lib/gcc/i686-linux-android/4.9.x/libgcc.a
CC=$PREBUILT/bin/i686-linux-android-gcc
CROSS_PREFIX=$PREBUILT/bin/i686-linux-android-
ARCH=x86
CPU=i686
OPTIMIZE_CFLAGS="-march=$CPU"
PREFIX=./build/$CPU
ADDITIONAL_CONFIGURE_FLAG="--disable-mmx --disable-yasm"
build_one

0 comments on commit 74feeac

Please sign in to comment.