diff --git a/README.md b/README.md index fb8ed9f6..de01ad8b 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ FFmpeg kit for applications. Supports Android, iOS, tvOS. - FFmpeg `v4.4-dev` releases - 29 external libraries - `chromaprint`, `fontconfig`, `freetype`, `fribidi`, `gmp`, `gnutls`, `kvazaar`, `lame`, `libaom`, `libass`, `libiconv`, `libilbc`, `libtheora`, `libvorbis`, `libvpx`, `libwebp`, `libxml2`, `opencore-amr`, `openh264`, `opus`, `sdl`, `shine`, `snappy`, `soxr`, `speex`, `tesseract`, `twolame`, `vo-amrwbenc`, `wavpack` + `chromaprint`, `fontconfig`, `freetype`, `fribidi`, `gmp`, `gnutls`, `kvazaar`, `lame`, `libaom`, `libass`, `libiconv`, `libilbc`, `libtheora`, `libvorbis`, `libvpx`, `libwebp`, `libxml2`, `opencore-amr`, `openh264`, `opus`, `sdl`, `shine`, `snappy`, `soxr`, `speex`, `tesseract`, `twolame`, `vo-amrwbenc`, `dav1d` - 5 external libraries with GPL license @@ -23,7 +23,7 @@ FFmpeg kit for applications. Supports Android, iOS, tvOS. - Exposes both FFmpeg library and FFmpegKit wrapper library capabilities - Includes cross-compile instructions for 48 open-source libraries - `chromaprint`, `expat`, `ffmpeg`, `fontconfig`, `freetype`, `fribidi`, `giflib`, `gmp`, `gnutls`, `harfbuzz`, `kvazaar`, `lame`, `leptonica`, `libaom`, `libass`, `libiconv`, `libilbc`, `libjpeg`, `libjpeg-turbo`, `libogg`, `libpng`, `libsamplerate`, `libsndfile`, `libtheora`, `libuuid`, `libvorbis`, `libvpx`, `libwebp`, `libxml2`, `nettle`, `opencore-amr`, `openh264`, `opus`, `rubberband`, `sdl`, `shine`, `snappy`, `soxr`, `speex`, `tesseract`, `tiff`, `twolame`, `vid.stab`, `vo-amrwbenc`, `wavpack`, `x264`, `x265`, `xvidcore` + `chromaprint`, `expat`, `ffmpeg`, `fontconfig`, `freetype`, `fribidi`, `giflib`, `gmp`, `gnutls`, `harfbuzz`, `kvazaar`, `lame`, `leptonica`, `libaom`, `libass`, `libiconv`, `libilbc`, `libjpeg`, `libjpeg-turbo`, `libogg`, `libpng`, `libsamplerate`, `libsndfile`, `libtheora`, `libuuid`, `libvorbis`, `libvpx`, `libwebp`, `libxml2`, `nettle`, `opencore-amr`, `openh264`, `opus`, `rubberband`, `sdl`, `shine`, `snappy`, `soxr`, `speex`, `tesseract`, `tiff`, `twolame`, `vid.stab`, `vo-amrwbenc`, `dav1d`, `x264`, `x265`, `xvidcore` - Licensed under LGPL 3.0, can be customized to support GPL v3.0 @@ -85,10 +85,10 @@ Please remember that some parts of `FFmpeg` are licensed under the `GPL` and onl vid.stab
x264
x265
xvidcore gmp
gnutls gmp
gnutls
vid.stab
x264
x265
xvidcore -lame
libilbc
libvorbis
opencore-amr
opus
shine
soxr
speex
twolame
vo-amrwbenc
wavpack +lame
libilbc
libvorbis
opencore-amr
opus
shine
soxr
speex
twolame
vo-amrwbenc
dav1d fontconfig
freetype
fribidi
kvazaar
libaom
libass
libiconv
libtheora
libvpx
libwebp
snappy -fontconfig
freetype
fribidi
gmp
gnutls
kvazaar
lame
libaom
libass
libiconv
libilbc
libtheora
libvorbis
libvpx
libwebp
libxml2
opencore-amr
opus
shine
snappy
soxr
speex
twolame
vo-amrwbenc
wavpack -fontconfig
freetype
fribidi
gmp
gnutls
kvazaar
lame
libaom
libass
libiconv
libilbc
libtheora
libvorbis
libvpx
libwebp
libxml2
opencore-amr
opus
shine
snappy
soxr
speex
twolame
vid.stab
vo-amrwbenc
wavpack
x264
x265
xvidcore +fontconfig
freetype
fribidi
gmp
gnutls
kvazaar
lame
libaom
libass
libiconv
libilbc
libtheora
libvorbis
libvpx
libwebp
libxml2
opencore-amr
opus
shine
snappy
soxr
speex
twolame
vo-amrwbenc
dav1d +fontconfig
freetype
fribidi
gmp
gnutls
kvazaar
lame
libaom
libass
libiconv
libilbc
libtheora
libvorbis
libvpx
libwebp
libxml2
opencore-amr
opus
shine
snappy
soxr
speex
twolame
vid.stab
vo-amrwbenc
dav1d
x264
x265
xvidcore android system libraries diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Packages.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Packages.java index cdb571a0..b963238d 100644 --- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Packages.java +++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/Packages.java @@ -32,6 +32,7 @@ class Packages { static { supportedExternalLibraries = new ArrayList<>(); + supportedExternalLibraries.add("dav1d"); supportedExternalLibraries.add("fontconfig"); supportedExternalLibraries.add("freetype"); supportedExternalLibraries.add("fribidi"); @@ -59,7 +60,6 @@ class Packages { supportedExternalLibraries.add("speex"); supportedExternalLibraries.add("tesseract"); supportedExternalLibraries.add("twolame"); - supportedExternalLibraries.add("wavpack"); supportedExternalLibraries.add("x264"); supportedExternalLibraries.add("x265"); supportedExternalLibraries.add("xvid"); @@ -129,7 +129,8 @@ static String getPackageName() { } if (fullGpl) { - if (externalLibraryList.contains("fontconfig") && + if (externalLibraryList.contains("dav1d") && + externalLibraryList.contains("fontconfig") && externalLibraryList.contains("freetype") && externalLibraryList.contains("fribidi") && externalLibraryList.contains("gmp") && @@ -152,7 +153,6 @@ static String getPackageName() { externalLibraryList.contains("soxr") && externalLibraryList.contains("speex") && externalLibraryList.contains("twolame") && - externalLibraryList.contains("wavpack") && externalLibraryList.contains("x264") && externalLibraryList.contains("x265") && externalLibraryList.contains("xvid")) { @@ -163,7 +163,8 @@ static String getPackageName() { } if (full) { - if (externalLibraryList.contains("fontconfig") && + if (externalLibraryList.contains("dav1d") && + externalLibraryList.contains("fontconfig") && externalLibraryList.contains("freetype") && externalLibraryList.contains("fribidi") && externalLibraryList.contains("gmp") && @@ -184,8 +185,7 @@ static String getPackageName() { externalLibraryList.contains("snappy") && externalLibraryList.contains("soxr") && externalLibraryList.contains("speex") && - externalLibraryList.contains("twolame") && - externalLibraryList.contains("wavpack")) { + externalLibraryList.contains("twolame")) { return "full"; } else { return "custom"; @@ -193,7 +193,8 @@ static String getPackageName() { } if (video) { - if (externalLibraryList.contains("fontconfig") && + if (externalLibraryList.contains("dav1d") && + externalLibraryList.contains("fontconfig") && externalLibraryList.contains("freetype") && externalLibraryList.contains("fribidi") && externalLibraryList.contains("kvazaar") && @@ -218,8 +219,7 @@ static String getPackageName() { externalLibraryList.contains("shine") && externalLibraryList.contains("soxr") && externalLibraryList.contains("speex") && - externalLibraryList.contains("twolame") && - externalLibraryList.contains("wavpack")) { + externalLibraryList.contains("twolame")) { return "audio"; } else { return "custom"; diff --git a/android/ffmpeg-kit-android-lib/src/test/java/com/arthenica/ffmpegkit/FFmpegKitConfigTest.java b/android/ffmpeg-kit-android-lib/src/test/java/com/arthenica/ffmpegkit/FFmpegKitConfigTest.java index 0f53b67c..3c641d16 100644 --- a/android/ffmpeg-kit-android-lib/src/test/java/com/arthenica/ffmpegkit/FFmpegKitConfigTest.java +++ b/android/ffmpeg-kit-android-lib/src/test/java/com/arthenica/ffmpegkit/FFmpegKitConfigTest.java @@ -92,6 +92,7 @@ public void getExternalLibraries() { final List supportedExternalLibraries = new ArrayList<>(); supportedExternalLibraries.add("chromaprint"); + supportedExternalLibraries.add("dav1d"); supportedExternalLibraries.add("fontconfig"); supportedExternalLibraries.add("freetype"); supportedExternalLibraries.add("fribidi"); @@ -118,7 +119,6 @@ public void getExternalLibraries() { supportedExternalLibraries.add("speex"); supportedExternalLibraries.add("tesseract"); supportedExternalLibraries.add("twolame"); - supportedExternalLibraries.add("wavpack"); supportedExternalLibraries.add("x264"); supportedExternalLibraries.add("x265"); supportedExternalLibraries.add("xvidcore"); diff --git a/apple.sh b/apple.sh index 17d10172..549c402a 100755 --- a/apple.sh +++ b/apple.sh @@ -45,6 +45,7 @@ After that this script should be used to create an umbrella xcframework.\n" echo -e "Libraries:" echo -e " --full\t\t\tbuilds umbrella xcframeworks all non-GPL external libraries" echo -e " --enable-chromaprint\t\tbuild umbrella xcframework for chromaprint [no]" + echo -e " --enable-dav1d\t\tbuild umbrella xcframework for dav1d [no]" echo -e " --enable-fontconfig\t\tbuild umbrella xcframework for fontconfig [no]" echo -e " --enable-freetype\t\tbuild umbrella xcframework for freetype [no]" echo -e " --enable-fribidi\t\tbuild umbrella xcframework for fribidi [no]" @@ -70,8 +71,7 @@ After that this script should be used to create an umbrella xcframework.\n" echo -e " --enable-speex\t\tbuild umbrella xcframework for speex [no]" echo -e " --enable-tesseract\t\tbuild umbrella xcframework for tesseract [no]" echo -e " --enable-twolame\t\tbuild umbrella xcframework for twolame [no]" - echo -e " --enable-vo-amrwbenc\t\tbuild umbrella xcframework for vo-amrwbenc [no]" - echo -e " --enable-wavpack\t\tbuild umbrella xcframework for wavpack [no]\n" + echo -e " --enable-vo-amrwbenc\t\tbuild umbrella xcframework for vo-amrwbenc [no]\n" echo -e "GPL libraries:" echo -e " --enable-libvidstab\t\tbuild umbrella xcframework for libvidstab [no]" diff --git a/apple/src/FFmpegKitConfig.m b/apple/src/FFmpegKitConfig.m index 25da5956..41152fed 100644 --- a/apple/src/FFmpegKitConfig.m +++ b/apple/src/FFmpegKitConfig.m @@ -424,6 +424,7 @@ @implementation FFmpegKitConfig + (void)initialize { supportedExternalLibraries = [[NSMutableArray alloc] init]; + [supportedExternalLibraries addObject:@"dav1d"]; [supportedExternalLibraries addObject:@"fontconfig"]; [supportedExternalLibraries addObject:@"freetype"]; [supportedExternalLibraries addObject:@"fribidi"]; @@ -452,7 +453,6 @@ + (void)initialize { [supportedExternalLibraries addObject:@"speex"]; [supportedExternalLibraries addObject:@"tesseract"]; [supportedExternalLibraries addObject:@"twolame"]; - [supportedExternalLibraries addObject:@"wavpack"]; [supportedExternalLibraries addObject:@"x264"]; [supportedExternalLibraries addObject:@"x265"]; [supportedExternalLibraries addObject:@"xvid"]; @@ -755,7 +755,8 @@ + (NSString*)getPackageName { } if (fullGpl) { - if ([enabledLibraryArray containsObject:@"fontconfig"] && + if ([enabledLibraryArray containsObject:@"dav1d"] && + [enabledLibraryArray containsObject:@"fontconfig"] && [enabledLibraryArray containsObject:@"freetype"] && [enabledLibraryArray containsObject:@"fribidi"] && [enabledLibraryArray containsObject:@"gmp"] && @@ -779,7 +780,6 @@ + (NSString*)getPackageName { [enabledLibraryArray containsObject:@"soxr"] && [enabledLibraryArray containsObject:@"speex"] && [enabledLibraryArray containsObject:@"twolame"] && - [enabledLibraryArray containsObject:@"wavpack"] && [enabledLibraryArray containsObject:@"x264"] && [enabledLibraryArray containsObject:@"x265"] && [enabledLibraryArray containsObject:@"xvid"]) { @@ -790,7 +790,8 @@ + (NSString*)getPackageName { } if (full) { - if ([enabledLibraryArray containsObject:@"fontconfig"] && + if ([enabledLibraryArray containsObject:@"dav1d"] && + [enabledLibraryArray containsObject:@"fontconfig"] && [enabledLibraryArray containsObject:@"freetype"] && [enabledLibraryArray containsObject:@"fribidi"] && [enabledLibraryArray containsObject:@"gmp"] && @@ -812,8 +813,7 @@ + (NSString*)getPackageName { [enabledLibraryArray containsObject:@"snappy"] && [enabledLibraryArray containsObject:@"soxr"] && [enabledLibraryArray containsObject:@"speex"] && - [enabledLibraryArray containsObject:@"twolame"] && - [enabledLibraryArray containsObject:@"wavpack"]) { + [enabledLibraryArray containsObject:@"twolame"]) { return @"full"; } else { return @"custom"; @@ -821,7 +821,8 @@ + (NSString*)getPackageName { } if (video) { - if ([enabledLibraryArray containsObject:@"fontconfig"] && + if ([enabledLibraryArray containsObject:@"dav1d"] && + [enabledLibraryArray containsObject:@"fontconfig"] && [enabledLibraryArray containsObject:@"freetype"] && [enabledLibraryArray containsObject:@"fribidi"] && [enabledLibraryArray containsObject:@"kvazaar"] && @@ -847,8 +848,7 @@ + (NSString*)getPackageName { [enabledLibraryArray containsObject:@"shine"] && [enabledLibraryArray containsObject:@"soxr"] && [enabledLibraryArray containsObject:@"speex"] && - [enabledLibraryArray containsObject:@"twolame"] && - [enabledLibraryArray containsObject:@"wavpack"]) { + [enabledLibraryArray containsObject:@"twolame"]) { return @"audio"; } else { return @"custom"; diff --git a/scripts/android/dav1d.sh b/scripts/android/dav1d.sh new file mode 100644 index 00000000..e6644c17 --- /dev/null +++ b/scripts/android/dav1d.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# SET BUILD FLAGS +CROSS_FILE="${BASEDIR}"/src/"${LIB_NAME}"/package/crossfiles/$ARCH-$FFMPEG_KIT_BUILD_TYPE.meson + +create_mason_cross_file "$CROSS_FILE" || return 1 + +# ALWAYS CLEAN THE PREVIOUS BUILD +rm -rf "${BUILD_DIR}" || return 1 + +meson "${BUILD_DIR}" \ + --cross-file="$CROSS_FILE" \ + -Db_lto=true \ + -Db_ndebug=false \ + -Denable_asm=false \ + -Denable_tools=false \ + -Denable_examples=false \ + -Denable_tests=false || return 1 + +cd "${BUILD_DIR}" || return 1 + +ninja -j$(get_cpu_count) || return 1 + +ninja install || return 1 + +# MANUALLY COPY PKG-CONFIG FILES +cp "${BUILD_DIR}"/meson-private/dav1d.pc "${INSTALL_PKG_CONFIG_DIR}" || return 1 diff --git a/scripts/android/ffmpeg.sh b/scripts/android/ffmpeg.sh index 55699fcc..2cdae1b8 100755 --- a/scripts/android/ffmpeg.sh +++ b/scripts/android/ffmpeg.sh @@ -92,6 +92,11 @@ for library in {1..58}; do exit 1 fi ;; + dav1d) + CFLAGS+=" $(pkg-config --cflags dav1d 2>>"${BASEDIR}"/build.log)" + LDFLAGS+=" $(pkg-config --libs --static dav1d 2>>"${BASEDIR}"/build.log)" + CONFIGURE_POSTFIX+=" --enable-libdav1d" + ;; fontconfig) CFLAGS+=" $(pkg-config --cflags fontconfig 2>>"${BASEDIR}"/build.log)" LDFLAGS+=" $(pkg-config --libs --static fontconfig 2>>"${BASEDIR}"/build.log)" @@ -241,11 +246,6 @@ for library in {1..58}; do LDFLAGS+=" $(pkg-config --libs --static vo-amrwbenc 2>>"${BASEDIR}"/build.log)" CONFIGURE_POSTFIX+=" --enable-libvo-amrwbenc" ;; - wavpack) - CFLAGS+=" $(pkg-config --cflags wavpack 2>>"${BASEDIR}"/build.log)" - LDFLAGS+=" $(pkg-config --libs --static wavpack 2>>"${BASEDIR}"/build.log)" - CONFIGURE_POSTFIX+=" --enable-libwavpack" - ;; x264) CFLAGS+=" $(pkg-config --cflags x264 2>>"${BASEDIR}"/build.log)" LDFLAGS+=" $(pkg-config --libs --static x264 2>>"${BASEDIR}"/build.log)" diff --git a/scripts/android/wavpack.sh b/scripts/android/wavpack.sh deleted file mode 100755 index 20af9000..00000000 --- a/scripts/android/wavpack.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -# ALWAYS CLEAN THE PREVIOUS BUILD -make distclean 2>/dev/null 1>/dev/null - -# REGENERATE BUILD FILES IF NECESSARY OR REQUESTED -if [[ ! -f "${BASEDIR}"/src/"${LIB_NAME}"/configure ]] || [[ ${RECONF_wavpack} -eq 1 ]]; then - autoreconf_library "${LIB_NAME}" -fi - -./configure \ - --prefix="${LIB_INSTALL_PREFIX}" \ - --with-pic \ - --with-sysroot="${ANDROID_SYSROOT}" \ - --without-iconv \ - --enable-static \ - --disable-shared \ - --disable-apps \ - --disable-fast-install \ - --disable-tests \ - --host="${HOST}" || return 1 - -make -j$(get_cpu_count) || return 1 - -make install || return 1 - -# MANUALLY COPY PKG-CONFIG FILES -cp ./*.pc "${INSTALL_PKG_CONFIG_DIR}" || return 1 diff --git a/scripts/apple/dav1d.sh b/scripts/apple/dav1d.sh new file mode 100644 index 00000000..b55027aa --- /dev/null +++ b/scripts/apple/dav1d.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# SET BUILD FLAGS +CROSS_FILE="${BASEDIR}"/src/"${LIB_NAME}"/package/crossfiles/$ARCH-$FFMPEG_KIT_BUILD_TYPE.meson + +create_mason_cross_file "$CROSS_FILE" || return 1 + +# ALWAYS CLEAN THE PREVIOUS BUILD +rm -rf "${BUILD_DIR}" || return 1 + +meson "${BUILD_DIR}" \ + --cross-file="$CROSS_FILE" \ + -Db_lto=false \ + -Db_ndebug=false \ + -Denable_asm=false \ + -Denable_tools=false \ + -Denable_examples=false \ + -Denable_tests=false || return 1 + +cd "${BUILD_DIR}" || return 1 + +ninja -j$(get_cpu_count) || return 1 + +ninja install || return 1 + +# MANUALLY COPY PKG-CONFIG FILES +cp "${BUILD_DIR}"/meson-private/dav1d.pc "${INSTALL_PKG_CONFIG_DIR}" || return 1 diff --git a/scripts/apple/ffmpeg.sh b/scripts/apple/ffmpeg.sh index a01d8cb1..f74310f4 100755 --- a/scripts/apple/ffmpeg.sh +++ b/scripts/apple/ffmpeg.sh @@ -121,6 +121,11 @@ for library in {1..58}; do FFMPEG_LDFLAGS+=" $(pkg-config --libs --static libchromaprint 2>>"${BASEDIR}"/build.log)" CONFIGURE_POSTFIX+=" --enable-chromaprint" ;; + dav1d) + FFMPEG_CFLAGS+=" $(pkg-config --cflags dav1d 2>>"${BASEDIR}"/build.log)" + FFMPEG_LDFLAGS+=" $(pkg-config --libs --static dav1d 2>>"${BASEDIR}"/build.log)" + CONFIGURE_POSTFIX+=" --enable-libdav1d" + ;; fontconfig) FFMPEG_CFLAGS+=" $(pkg-config --cflags fontconfig 2>>"${BASEDIR}"/build.log)" FFMPEG_LDFLAGS+=" $(pkg-config --libs --static fontconfig 2>>"${BASEDIR}"/build.log)" @@ -264,11 +269,6 @@ for library in {1..58}; do FFMPEG_LDFLAGS+=" $(pkg-config --libs --static vo-amrwbenc 2>>"${BASEDIR}"/build.log)" CONFIGURE_POSTFIX+=" --enable-libvo-amrwbenc" ;; - wavpack) - FFMPEG_CFLAGS+=" $(pkg-config --cflags wavpack 2>>"${BASEDIR}"/build.log)" - FFMPEG_LDFLAGS+=" $(pkg-config --libs --static wavpack 2>>"${BASEDIR}"/build.log)" - CONFIGURE_POSTFIX+=" --enable-libwavpack" - ;; x264) FFMPEG_CFLAGS+=" $(pkg-config --cflags x264 2>>"${BASEDIR}"/build.log)" FFMPEG_LDFLAGS+=" $(pkg-config --libs --static x264 2>>"${BASEDIR}"/build.log)" diff --git a/scripts/apple/wavpack.sh b/scripts/apple/wavpack.sh deleted file mode 100755 index 8130a151..00000000 --- a/scripts/apple/wavpack.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -# SET BUILD OPTIONS -ASM_OPTIONS="" -case ${ARCH} in -armv7 | armv7s | arm64*) - ASM_OPTIONS="--disable-asm" - ;; -*) - ASM_OPTIONS="--enable-asm" - ;; -esac - -# ALWAYS CLEAN THE PREVIOUS BUILD -make distclean 2>/dev/null 1>/dev/null - -# REGENERATE BUILD FILES IF NECESSARY OR REQUESTED -if [[ ! -f "${BASEDIR}"/src/"${LIB_NAME}"/configure ]] || [[ ${RECONF_wavpack} -eq 1 ]]; then - autoreconf_library "${LIB_NAME}" -fi - -./configure \ - --prefix="${LIB_INSTALL_PREFIX}" \ - --with-pic \ - --with-sysroot="${SDK_PATH}" \ - --without-iconv \ - ${ASM_OPTIONS} \ - --enable-static \ - --disable-shared \ - --disable-apps \ - --disable-fast-install \ - --disable-tests \ - --host="${HOST}" || return 1 - -make -j$(get_cpu_count) || return 1 - -make install || return 1 - -# MANUALLY COPY PKG-CONFIG FILES -cp ./*.pc "${INSTALL_PKG_CONFIG_DIR}" || return 1 diff --git a/scripts/function-android.sh b/scripts/function-android.sh index 22312ac6..594f3ada 100755 --- a/scripts/function-android.sh +++ b/scripts/function-android.sh @@ -447,6 +447,31 @@ get_ldflags() { echo "${ARCH_FLAGS} ${OPTIMIZATION_FLAGS} ${COMMON_LINKED_LIBS} -Wl,--hash-style=both -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libunwind.a" } +create_mason_cross_file() { + cat >"$1" <"$1" <