Skip to content

Commit 5e617cc

Browse files
authored
Merge pull request TermonyHQ#82 from SwimmingTiger/add-ffmpeg
Add ffmpeg with libx264, libx265, libvpx, libsvt-av1, libmp3-lame, libfdk-aac, libogg, libvorbis, libopus
2 parents 3b2794a + be43e7d commit 5e617cc

12 files changed

Lines changed: 300 additions & 1 deletion

File tree

build-hnp/Makefile

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,17 @@ PKGS=gettext \
5151
libffi \
5252
glib \
5353
qemu \
54-
qemu-vroot
54+
qemu-vroot \
55+
libx264 \
56+
libx265 \
57+
libvpx \
58+
libsvt-av1 \
59+
libmp3-lame \
60+
libfdk-aac \
61+
libopus \
62+
libogg \
63+
libvorbis \
64+
ffmpeg
5565
STAMP=$(patsubst %,%/.stamp,$(PKGS))
5666

5767
all: copy

build-hnp/ffmpeg/Makefile

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
include ../utils/Makefrag
2+
3+
export PKG_CONFIG_LIBDIR := $(shell pwd)/temp/pkgconfig:$(PKG_CONFIG_LIBDIR)
4+
5+
all: download/src.zip ohos_config.sh
6+
rm -rf temp build
7+
mkdir -p temp/build temp/pkgconfig build/bin
8+
9+
cd temp && unzip ../download/src.zip
10+
cd temp && mv third_party_ffmpeg-OpenHarmony-5.1.0-Release src
11+
12+
# fix script permission
13+
cd temp/src && cp ../../ohos_config.sh . && chmod +x ./ffbuild/*.sh
14+
15+
# fix typo in src
16+
cd temp/src && sed -i 's/zsteam/zstream/g' libavcodec/mvha.c
17+
18+
# fix missing vulkan_beta.h
19+
cd temp/src && touch vulkan_beta.h
20+
21+
# fix pkgconfig prefix
22+
cd temp/pkgconfig && cp ../../../sysroot/lib/pkgconfig/SvtAv1Enc.pc . && sed -i 's@$(PREFIX)@$(shell pwd)/../sysroot@g' SvtAv1Enc.pc
23+
cd temp/pkgconfig && cp ../../../sysroot/lib/pkgconfig/opus.pc . && sed -i 's@$(PREFIX)@$(shell pwd)/../sysroot@g' opus.pc
24+
25+
# debug output
26+
pkg-config -cflags --libs SvtAv1Enc opus
27+
28+
# configure and build
29+
cd temp/src && ./ohos_config.sh $(shell pwd)/temp/src $(PREFIX) aarch64 $(OHOS_SDK_HOME)/native/llvm $(OHOS_SDK_HOME)/native/sysroot false
30+
cd temp/src && make -j $(shell nproc) && make install DESTDIR=$(shell pwd)/build
31+
32+
# strip all elf files
33+
$(OHOS_SDK_HOME)/native/llvm/bin/llvm-strip build$(PREFIX)/bin/*
34+
35+
mkdir -p ../sysroot/bin
36+
cp -rfv build$(PREFIX)/. ../sysroot | tee file.lst
37+
38+
download/src.zip:
39+
mkdir -p download
40+
cd download && wget -O src.zip https://gitee.com/openharmony/third_party_ffmpeg/repository/archive/OpenHarmony-5.1.0-Release.zip

build-hnp/ffmpeg/ohos_config.sh

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
# FFmpeg build configure
2+
3+
#!/bin/bash
4+
5+
set -ex
6+
FFMPEG_PATH=$1
7+
FFMPEG_OUT_PATH=$2
8+
FFMPEG_PLAT=$3
9+
LLVM_PATH=$4
10+
SYSROOT_PATH=$5
11+
USE_CLANG_COVERAGE=$6
12+
FFMPEG_ENABLE_DEMUXERS=$7
13+
FFMPEG_ENABLE_PARSERS=$8
14+
FFMPEG_ENABLE_DECODERS=$9
15+
16+
FF_CONFIG_OPTIONS="
17+
--prefix=${FFMPEG_OUT_PATH}
18+
--enable-libx264
19+
--enable-libx265
20+
--enable-libvpx
21+
--enable-libsvtav1
22+
--enable-libmp3lame
23+
--enable-libfdk-aac
24+
--enable-libopus
25+
--enable-libvorbis
26+
--enable-gpl
27+
--enable-nonfree
28+
"
29+
30+
if [ ${FFMPEG_PLAT} = "aarch64" ]; then
31+
32+
FF_CONFIG_OPTIONS="$FF_CONFIG_OPTIONS
33+
--arch=aarch64
34+
--target-os=linux
35+
--enable-cross-compile
36+
--cc=${LLVM_PATH}/bin/clang
37+
--ld=${LLVM_PATH}/bin/clang
38+
--strip=${LLVM_PATH}/bin/llvm-strip
39+
"
40+
41+
if [ -n "${FFMPEG_ENABLE_DEMUXERS}" ]; then
42+
FF_CONFIG_OPTIONS+="
43+
--enable-demuxer=${FFMPEG_ENABLE_DEMUXERS}"
44+
fi
45+
46+
if [ -n "${FFMPEG_ENABLE_PARSERS}" ]; then
47+
FF_CONFIG_OPTIONS+="
48+
--enable-parser=${FFMPEG_ENABLE_PARSERS}"
49+
fi
50+
51+
if [ -n "${FFMPEG_ENABLE_DECODERS}" ]; then
52+
FF_CONFIG_OPTIONS+="
53+
--enable-decoder=${FFMPEG_ENABLE_DECODERS}"
54+
fi
55+
56+
EXTRA_CFLAGS="
57+
--target=aarch64-linux-ohos
58+
--sysroot=${SYSROOT_PATH}
59+
"
60+
EXTRA_LDFLAGS="
61+
--target=aarch64-linux-ohos
62+
--sysroot=${SYSROOT_PATH}
63+
"
64+
65+
if [ ${USE_CLANG_COVERAGE} = "true" ]; then
66+
EXTRA_CFLAGS="
67+
--target=aarch64-linux-ohos
68+
--sysroot=${SYSROOT_PATH}
69+
--coverage
70+
-mllvm
71+
-limited-coverage-experimental=true
72+
"
73+
EXTRA_LDFLAGS="
74+
--target=aarch64-linux-ohos
75+
--sysroot=${SYSROOT_PATH}
76+
--coverage
77+
-fno-use-cxa-atexit
78+
"
79+
fi
80+
81+
FF_CONFIG_OPTIONS=`echo $FF_CONFIG_OPTIONS`
82+
83+
${FFMPEG_PATH}/configure ${FF_CONFIG_OPTIONS} --extra-cflags="${EXTRA_CFLAGS}" --extra-ldflags="${EXTRA_LDFLAGS}"
84+
85+
else
86+
87+
oldPath=`pwd`
88+
89+
FFMPEG_PATH=${oldPath}/${FFMPEG_PATH}
90+
FFMPEG_OUT_PATH=${oldPath}/${FFMPEG_OUT_PATH}
91+
currentPath=${oldPath}/${FFMPEG_OUT_PATH}tmp
92+
mkdir -p ${currentPath}
93+
cd ${currentPath}
94+
95+
if [ -n "${FFMPEG_ENABLE_DEMUXERS}" ]; then
96+
FF_CONFIG_OPTIONS+="
97+
--enable-demuxer=${FFMPEG_ENABLE_DEMUXERS}"
98+
fi
99+
100+
if [ -n "${FFMPEG_ENABLE_PARSERS}" ]; then
101+
FF_CONFIG_OPTIONS+="
102+
--enable-parser=${FFMPEG_ENABLE_PARSERS}"
103+
fi
104+
105+
if [ -n "${FFMPEG_ENABLE_DECODERS}" ]; then
106+
FF_CONFIG_OPTIONS+="
107+
--enable-decoder=${FFMPEG_ENABLE_DECODERS}"
108+
fi
109+
110+
FF_CONFIG_OPTIONS=`echo $FF_CONFIG_OPTIONS`
111+
112+
${FFMPEG_PATH}/configure ${FF_CONFIG_OPTIONS}
113+
114+
fi
115+
116+
sed -i 's/HAVE_SYSCTL 1/HAVE_SYSCTL 0/g' config.h
117+
sed -i 's/HAVE_SYSCTL=yes/!HAVE_SYSCTL=yes/g' ./ffbuild/config.mak
118+
sed -i 's/HAVE_GLOB 1/HAVE_GLOB 0/g' config.h
119+
sed -i 's/HAVE_GLOB=yes/!HAVE_GLOB=yes/g' config.h
120+
sed -i 's/HAVE_GMTIME_R 1/HAVE_GMTIME_R 0/g' config.h
121+
sed -i 's/HAVE_LOCALTIME_R 1/HAVE_LOCALTIME_R 0/g' config.h
122+
sed -i 's/HAVE_PTHREAD_CANCEL 1/HAVE_PTHREAD_CANCEL 0/g' config.h
123+
sed -i 's/HAVE_VALGRIND_VALGRIND_H 1/HAVE_VALGRIND_VALGRIND_H 0/g' config.h
124+
125+
tmp_file=".tmpfile"
126+
## remove invalid restrict define
127+
sed 's/#define av_restrict restrict/#define av_restrict/' ./config.h >$tmp_file
128+
mv $tmp_file ./config.h
129+
130+
## replace original FFMPEG_CONFIGURATION define with $FF_CONFIG_OPTIONS
131+
sed '/^#define FFMPEG_CONFIGURATION/d' ./config.h >$tmp_file
132+
mv $tmp_file ./config.h
133+
total_line=`wc -l ./config.h | cut -d' ' -f 1`
134+
tail_line=`expr $total_line - 3`
135+
head -3 config.h > $tmp_file
136+
echo "#define FFMPEG_CONFIGURATION \"${FF_CONFIG_OPTIONS}\"" >> $tmp_file
137+
tail -$tail_line config.h >> $tmp_file
138+
mv $tmp_file ./config.h
139+
140+
rm -f config.err
141+
142+
## rm BUILD_ROOT information
143+
sed '/^BUILD_ROOT=/d' ./ffbuild/config.mak > $tmp_file
144+
rm -f ./ffbuild/config.mak
145+
mv $tmp_file ./ffbuild/config.mak
146+
147+
## rm amr-eabi-gcc
148+
sed '/^CC=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file
149+
rm -f ./ffbuild/config.mak
150+
mv $tmp_file ./ffbuild/config.mak
151+
152+
## rm amr-eabi-gcc
153+
sed '/^AS=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file
154+
rm -f ./ffbuild/config.mak
155+
mv $tmp_file ./ffbuild/config.mak
156+
157+
158+
## rm amr-eabi-gcc
159+
sed '/^LD=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file
160+
rm -f ./ffbuild/config.mak
161+
mv $tmp_file ./ffbuild/config.mak
162+
163+
## rm amr-eabi-gcc
164+
sed '/^DEPCC=arm-eabi-gcc/d' ./ffbuild/config.mak > $tmp_file
165+
rm -f ./ffbuild/config.mak
166+
mv $tmp_file ./ffbuild/config.mak
167+
168+
sed -i 's/restrict restrict/restrict /g' config.h
169+
170+
sed -i '/getenv(x)/d' config.h
171+
sed -i 's/HAVE_DOS_PATHS 0/HAVE_DOS_PATHS 1/g' config.h
172+

build-hnp/libfdk-aac/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
include ../utils/Makefrag
2+
3+
SOURCE_URL = https://github.com/mstorsjo/fdk-aac/archive/refs/tags/v2.0.3.tar.gz
4+
SOURCE_FILE = v2.0.3.tar.gz
5+
SOURCE_DIR = fdk-aac-2.0.3
6+
CMAKE_ARGS = -DCMAKE_INSTALL_PREFIX=$(PREFIX) -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo
7+
8+
$(eval $(call define_cmake_package))

build-hnp/libmp3-lame/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
include ../utils/Makefrag
2+
3+
SOURCE_URL = https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
4+
SOURCE_FILE = lame-3.100.tar.gz
5+
SOURCE_DIR = lame-3.100
6+
CONFIG_ARGS = --prefix=$(PREFIX) --host aarch64-unknown-linux-musl --enable-shared
7+
8+
$(eval $(call define_autotools_package))

build-hnp/libogg/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
include ../utils/Makefrag
2+
3+
SOURCE_URL = https://downloads.xiph.org/releases/ogg/libogg-1.3.6.tar.gz
4+
SOURCE_FILE = libogg-1.3.6.tar.gz
5+
SOURCE_DIR = libogg-1.3.6
6+
CONFIG_ARGS = --prefix=$(PREFIX) --host aarch64-unknown-linux-musl --enable-shared
7+
8+
$(eval $(call define_autotools_package))

build-hnp/libopus/Makefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
include ../utils/Makefrag
2+
3+
SOURCE_URL = https://downloads.xiph.org/releases/opus/opus-1.5.2.tar.gz
4+
SOURCE_FILE = opus-1.5.2.tar.gz
5+
SOURCE_DIR = opus-1.5.2
6+
7+
CMAKE_ARGS = -DCMAKE_INSTALL_PREFIX=$(PREFIX) -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo
8+
9+
$(eval $(call define_cmake_package))

build-hnp/libsvt-av1/Makefile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
include ../utils/Makefrag
2+
3+
SOURCE_URL = https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v1.8.0/SVT-AV1-v1.8.0.tar.bz2
4+
SOURCE_FILE = SVT-AV1-v1.8.0.tar.bz2
5+
SOURCE_DIR = SVT-AV1-v1.8.0
6+
7+
# fix missing pthread_setaffinity_np
8+
PATCH_SOURCE = cd temp/$(SOURCE_DIR) && sed -i '/pthread_setaffinity_np/d' Source/Lib/Common/Codec/EbThreads.h
9+
10+
CMAKE_ARGS = -DCMAKE_INSTALL_PREFIX=$(PREFIX) -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo
11+
12+
$(eval $(call define_cmake_package))

build-hnp/libvorbis/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
include ../utils/Makefrag
2+
3+
SOURCE_URL = https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.7.tar.xz
4+
SOURCE_FILE = libvorbis-1.3.7.tar.xz
5+
SOURCE_DIR = libvorbis-1.3.7
6+
CONFIG_ARGS = --prefix=$(PREFIX) --host aarch64-unknown-linux-musl --enable-shared
7+
8+
$(eval $(call define_autotools_package))

build-hnp/libvpx/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
include ../utils/Makefrag
2+
3+
SOURCE_URL = https://github.com/webmproject/libvpx/archive/refs/tags/v1.15.2.tar.gz
4+
SOURCE_FILE = v1.15.2.tar.gz
5+
SOURCE_DIR = libvpx-1.15.2
6+
CONFIG_ARGS = --prefix=$(PREFIX) --target=arm64-linux-gcc --enable-shared
7+
8+
$(eval $(call define_autotools_package))

0 commit comments

Comments
 (0)