Skip to content

Commit

Permalink
feat(build): support build AV1 with source code
Browse files Browse the repository at this point in the history
  • Loading branch information
skufly authored and pingkai committed Feb 13, 2020
1 parent 0007970 commit 756b399
Show file tree
Hide file tree
Showing 9 changed files with 189 additions and 5 deletions.
1 change: 1 addition & 0 deletions build_tools/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ user_env.sh,编译系统会自动执行该脚本
X264_SOURCE_DIR=$TOP_DIR/external/x264/
OPEN_SSL_SOURCE_DIR=$TOP_DIR/external/openssl/
CURL_SOURCE_DIR=$TOP_DIR/external/curl
DAV1D_SOURCE_DIR=$TOP_DIR/external/dav1d
RTMPDUMP_SOURCE_DIR=$TOP_DIR/external/rtmpdump/
ANDROID_NDK=$ANDROID_NDK_HOME

Expand Down
103 changes: 103 additions & 0 deletions build_tools/build_dav1d.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
#!/usr/bin/env bash

source cross_compille_env.sh

function create_dav1d_config() {
rm -f $user_config
#staring writing file
echo "[binaries]
c = '${DAV1D_C}'
cpp = '${DAV1D_CPP}'
ar = '${DAV1D_AR}'
ld = '${DAV1D_LD}'
strip = '${DAV1D_STRIP}'
[properties]
c_args = '${DAV1D_ARGS}'
c_link_args = '${DAV1D_ARGS}'
cpp_args = '${DAV1D_ARGS}'
cpp_link_args = '${DAV1D_ARGS}'
[host_machine]
system = '${DAV1D_SYSTEM}'
cpu_family = '${DAV1D_CPU_FAMILY}'
cpu = '${DAV1D_CPU}'
endian = 'little'
" >> ${user_config}

echo "dav1d ${user_config} created"
}

function build_dav1d(){

local build_dir="build/dav1d/$1/$2"
local crossfile=""

DAV1D_INSTALL_DIR=

if [ "$1" == "Android" ]
then
if [ "$2" != "arm64-v8a" ]; then
echo "Only enable arm64-v8a for av1 at present, break $2"
return;
fi
cross_compile_set_platform_Android $2
DAV1D_C=""${CROSS_COMPILE}"-gcc"
DAV1D_CPP=""${CROSS_COMPILE}"-g++"
DAV1D_AR=""${CROSS_COMPILE}"-ar"
DAV1D_LD=""${CROSS_COMPILE}"-ld"
DAV1D_STRIP=""${CROSS_COMPILE}"-strip"
DAV1D_ARGS="--sysroot=${SYSTEM_ROOT}"
DAV1D_SYSTEM="linux"
DAV1D_CPU_FAMILY="aarch64"
DAV1D_CPU="arm"
elif [ "$1" == "iOS" ]
then
if [ "$2" != "arm64" ]; then
echo "Only enable arm64 for av1 at present, break $2"
return;
fi
cross_compile_set_platform_iOS $2
DAV1D_C="clang"
DAV1D_CPP="clang++"
DAV1D_AR="ar"
DAV1D_LD="ld"
DAV1D_STRIP="strip"
DAV1D_ARGS=${CFLAGS}
DAV1D_SYSTEM="darwin"
DAV1D_CPU_FAMILY="aarch64"
DAV1D_CPU="arm"
else
echo "Unsupported platform"
return;
fi

local install_dir="${CWD}/install/dav1d/$1/$2"

if [ "${BUILD}" != "False" ];then
local build_dir="build/dav1d/$1/$2"
#local install_fat="${CWD}/install/dav1d/$1/fat"
rm -rf ${build_dir}
mkdir -p ${build_dir}

echo "Generating toolchain description..."
user_config=${CWD}/${build_dir}/config.txt
create_dav1d_config

#clear env flag due to meson don't fully support
CFLAGS_BAK=${CFLAGS}
LDFLAGS_BAK=${LDFLAGS}
CFLAGS=
LDFLAGS=

cd ${build_dir}
meson ${DAV1D_SOURCE_DIR} --buildtype release --prefix ${install_dir} --default-library static --cross-file ${user_config}
ninja -C ./
meson install

CFLAGS=${CFLAGS_BAK}
LDFLAGS=${LDFLAGS_BAK}
cd ${CWD}
fi
DAV1D_INSTALL_DIR=${install_dir}
}
2 changes: 1 addition & 1 deletion build_tools/build_iOS.sh
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function build_shared_framework(){
export CPU_FLAGS=
export LDFLAGS=

local support_libs="fdk-aac x264 curl openssl librtmp cares"
local support_libs="fdk-aac x264 curl openssl librtmp cares dav1d"

SRC_LIBRARIES_DIR="$CWD/install/ffmpeg/iOS/fat/lib"

Expand Down
13 changes: 13 additions & 0 deletions build_tools/common_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ source build_x264.sh
source build_openssl_111.sh
source build_openssl.sh
source build_curl.sh
source build_dav1d.sh
source build_fdk_aac.sh
source ffmpeg_commands.sh
source build_ffmpeg.sh
Expand Down Expand Up @@ -100,6 +101,18 @@ function build_static_lib(){
print_warning "x264 source not found"
fi

if [ -d "${DAV1D_SOURCE_DIR}" ]
then
cd ${CWD}
build_dav1d $1 ${arch}
if [ $? -ne 0 ]; then
echo "build_dav1d build failed"
exit -1
fi
else
print_warning "dav1d source not found"
fi

if [ -d "${FFMPEG_SOURCE_DIR}" ]
then
cd ${CWD}
Expand Down
1 change: 1 addition & 0 deletions build_tools/env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ FDK_AAC_SOURCE_DIR=
X264_SOURCE_DIR=
OPEN_SSL_SOURCE_DIR=
CURL_SOURCE_DIR=
DAV1D_SOURCE_DIR=
ARES_SOURCE_DIR=
RTMPDUMP_SOURCE_DIR=
IOS_ARCHS="armv7 arm64 x86_64 i386"
Expand Down
54 changes: 54 additions & 0 deletions external/build_external.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ function patch_ffmpeg() {
git_am_patch ../../contribute/ffmpeg/0006-flv-add-extensions-for-H.265-HEVC.patch
}

function patch_dav1d() {
cd ${DAV1D_SOURCE_DIR}
git reset --hard 39667c751d427e447cbe8be783cfecd296659e24
if [[ "$TARGET_PLATFORM" == "iOS" ]];then
git_am_patch ../../contribute/dav1d/0001-chore-enable-bitcode.patch
fi
}

function load_source() {
local user_sources=$(cd ${PWD};ls ../*_git_source_list.sh)
local user_source
Expand Down Expand Up @@ -96,6 +104,50 @@ function check_cmake(){
fi
# brew upgrade cmake
}

function check_meson(){
if [ ! `which meson` ]
then
echo 'meson not found'
echo 'Trying to install meson...'
brew install meson || exit 1
fi
# brew upgrade meson
}

function check_ninja(){
if [ ! `which ninja` ]
then
echo 'ninja not found'
echo 'Trying to install ninja...'
brew install ninja || exit 1
fi
# brew upgrade ninja
}

function check_nasm(){
if [ ! `which nasm` ]
then
echo 'nasm not found'
echo 'Trying to install nasm...'
brew install nasm || exit 1
fi
# brew upgrade nasm
}

function check_dav1d(){
if [ -d "${DAV1D_SOURCE_DIR}" ]
then
check_meson
check_ninja
check_nasm
patch_dav1d
cd ${TOP_DIR}
else
echo "DAV1D_SOURCE_DIR not enable"
fi
}

function check_yasm(){
if [ ! `which yasm` ]
then
Expand Down Expand Up @@ -142,12 +194,14 @@ if [ "$1" == "Android" ];then
export ANDROID_NDK=~/Android-env/android-ndk-r14b/
fi
check_android_tools
check_dav1d
../build_tools/build_Android.sh

elif [ "$1" == "iOS" ];then
#export HOMEBREW_NO_AUTO_UPDATE=true
check_cmake
check_yasm
check_dav1d
../build_tools/build_iOS.sh
elif [ "$1" == "macOS" ];then
../build_tools/build_native.sh
Expand Down
12 changes: 8 additions & 4 deletions external/player_ffmpeg_config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,18 @@ if [[ "$TARGET_PLATFORM" != "Android" ]];then
ffmpeg_config_add_protocols udp
fi

DAV1D_INSTALL_DIR=
if [[ -n "${DAV1D_EXTERNAL_DIR}" ]];then
if [ -d "${DAV1D_EXTERNAL_DIR}/$TARGET_PLATFORM/$TARGET_ARCH" ];then
DAV1D_INSTALL_DIR="${DAV1D_EXTERNAL_DIR}/$TARGET_PLATFORM/$TARGET_ARCH"
ffmpeg_config_add_user "--enable-libdav1d --enable-decoder=libdav1d"
ffmpeg_config_add_extra_cflags "-I${DAV1D_INSTALL_DIR}/include"
ffmpeg_config_add_extra_ldflags "-L${DAV1D_INSTALL_DIR}/lib -ldav1d"
else
DAV1D_INSTALL_DIR=
fi
fi

if [ -d "${DAV1D_INSTALL_DIR}" ];then
ffmpeg_config_add_user "--enable-libdav1d --enable-decoder=libdav1d"
ffmpeg_config_add_extra_cflags "-I${DAV1D_INSTALL_DIR}/include"
ffmpeg_config_add_extra_ldflags "-L${DAV1D_INSTALL_DIR}/lib -ldav1d"
fi

echo "DAV1D_INSTALL_DIR is $DAV1D_INSTALL_DIR"
7 changes: 7 additions & 0 deletions external/player_git_source_list.sh
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,10 @@ fi
CURL_BRANCH="curl-7_63_0"
clone_git $CURL_GIT "$CURL_BRANCH"

if [[ -z "${DAV1D_EXTERNAL_DIR}" ]];then
if [ -z "${DAV1D_GIT}" ];then
DAV1D_GIT="https://code.videolan.org/videolan/dav1d.git"
fi
DAV1D_BRANCH="0.5.2"
clone_git $DAV1D_GIT $DAV1D_BRANCH
fi
1 change: 1 addition & 0 deletions external/user_env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ FDK_AAC_SOURCE_DIR=$TOP_DIR/external/fdk-aac/
X264_SOURCE_DIR=$TOP_DIR/external/x264/
OPEN_SSL_SOURCE_DIR=$TOP_DIR/external/openssl/
CURL_SOURCE_DIR=$TOP_DIR/external/curl
DAV1D_SOURCE_DIR=$TOP_DIR/external/dav1d
#ARES_SOURCE_DIR=$TOP_DIR/external/cares
#RTMPDUMP_SOURCE_DIR=$TOP_DIR/external/rtmpdump/
#ANDROID_NDK=$ANDROID_NDK_HOME
Expand Down

0 comments on commit 756b399

Please sign in to comment.