Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • Aza/libvlcjni
  • Skantes/libvlcjni
  • videolan/libvlcjni
  • mfkl/libvlcjni
  • tguillem/libvlcjni
  • chouquette/libvlcjni
  • asenat/libvlcjni
  • aaa1115910/libvlcjni
  • alexandre-janniaux/libvlcjni
  • robUx4/libvlcjni
  • fcartegnie/libvlcjni
  • Labnann/libvlcjni
  • c0ff330k/libvlcjni
  • haasn/libvlcjni
  • Niram7777/libvlcjni
  • chub/libvlcjni
  • fhuber/libvlcjni
  • MangalK/libvlcjni
  • gabriel_lt/libvlcjni
  • rhstone/libvlcjni
  • sami-sweng/libvlcjni
  • rschneider/libvlcjni
22 results
Show changes
Commits on Source (69)
Showing
with 1107 additions and 589 deletions
......@@ -22,7 +22,7 @@ allprojects {
}
ext {
libvlcVersion = '4.0.0-eap15'
libvlcVersion = '4.0.0-eap19'
minSdkVersion = 17
targetSdkVersion = 30
compileSdkVersion = 31
......
#!/bin/sh
set -e
#############
# ARGUMENTS #
#############
AVLC_RELEASE=$RELEASE
# Indicated if prebuilt contribs package
# should be created
AVLC_MAKE_PREBUILT_CONTRIBS=0
# Indicates that prebuit contribs should be
# used instead of building the contribs from source
AVLC_USE_PREBUILT_CONTRIBS=0
while [ $# -gt 0 ]; do
case $1 in
help|--help)
echo "Use -a to set the ARCH"
echo "Use --release to build in release mode"
exit 1
;;
a|-a)
ANDROID_ABI=$2
shift
;;
release|--release)
AVLC_RELEASE=1
;;
--package-contribs)
AVLC_MAKE_PREBUILT_CONTRIBS=1
;;
--with-prebuilt-contribs)
AVLC_USE_PREBUILT_CONTRIBS=1
;;
esac
shift
done
# Validate arguments
if [ "$AVLC_MAKE_PREBUILT_CONTRIBS" -gt "0" ] &&
[ "$AVLC_USE_PREBUILT_CONTRIBS" -gt "0" ]; then
echo >&2 "ERROR: The --package-contribs and --with-prebuilt-contribs options"
echo >&2 " can not be used together."
exit 1
fi
# Make in //
if [ -z "$MAKEFLAGS" ]; then
UNAMES=$(uname -s)
MAKEFLAGS=
if which nproc >/dev/null; then
MAKEFLAGS=-j$(nproc)
elif [ "$UNAMES" = "Darwin" ] && which sysctl >/dev/null; then
MAKEFLAGS=-j$(sysctl -n machdep.cpu.thread_count)
fi
fi
#########
# FLAGS #
#########
if [ "${ANDROID_ABI}" = "arm" ] ; then
ANDROID_ABI="armeabi-v7a"
elif [ "${ANDROID_ABI}" = "arm64" ] ; then
ANDROID_ABI="arm64-v8a"
fi
# Set up ABI variables
if [ "${ANDROID_ABI}" = "x86" ] ; then
TARGET_TUPLE="i686-linux-android"
CLANG_PREFIX=${TARGET_TUPLE}
elif [ "${ANDROID_ABI}" = "x86_64" ] ; then
TARGET_TUPLE="x86_64-linux-android"
CLANG_PREFIX=${TARGET_TUPLE}
elif [ "${ANDROID_ABI}" = "arm64-v8a" ] ; then
TARGET_TUPLE="aarch64-linux-android"
CLANG_PREFIX=${TARGET_TUPLE}
elif [ "${ANDROID_ABI}" = "armeabi-v7a" ] ; then
TARGET_TUPLE="arm-linux-androideabi"
CLANG_PREFIX="armv7a-linux-androideabi"
else
echo "Please pass the ANDROID ABI to the correct architecture, using
build-libvlc.sh -a ARCH
ARM: (armeabi-v7a|arm)
ARM64: (arm64-v8a|arm64)
X86: x86, x86_64"
exit 1
fi
# try to detect NDK version
REL=$(grep -o '^Pkg.Revision.*[0-9]*.*' $ANDROID_NDK/source.properties |cut -d " " -f 3 | cut -d "." -f 1)
if [ "$REL" = 27 ]; then
ANDROID_API=21
else
echo "NDK v27 needed, got $REL, cf. https://developer.android.com/ndk/downloads/"
exit 1
fi
############
# VLC PATH #
############
LIBVLCJNI_ROOT="$(cd "$(dirname "$0")/.."; pwd -P)"
# Fix path if the script is sourced from vlc-android
if [ -d $LIBVLCJNI_ROOT/libvlcjni ];then
LIBVLCJNI_ROOT=$LIBVLCJNI_ROOT/libvlcjni
fi
if [ -f $LIBVLCJNI_ROOT/src/libvlc.h ];then
VLC_SRC_DIR="$LIBVLCJNI_ROOT"
elif [ -f $PWD/src/libvlc.h ];then
VLC_SRC_DIR="$PWD"
elif [ -d $LIBVLCJNI_ROOT/vlc ];then
VLC_SRC_DIR=$LIBVLCJNI_ROOT/vlc
else
echo "Could not find vlc sources"
exit 1
fi
VLC_BUILD_DIR="$(cd $VLC_SRC_DIR/; pwd)/build-android-${TARGET_TUPLE}"
if [ -z $VLC_TARBALLS ]; then
VLC_TARBALLS="$(cd $VLC_SRC_DIR/;pwd)/contrib/tarballs"
fi
if [ ! -d $VLC_TARBALLS ]; then
mkdir -p $VLC_TARBALLS
fi
VLC_OUT_PATH="$VLC_BUILD_DIR/ndk"
mkdir -p $VLC_OUT_PATH
#################
# NDK TOOLCHAIN #
#################
host_tag=""
case $(uname | tr '[:upper:]' '[:lower:]') in
linux*) host_tag="linux" ;;
darwin*) host_tag="darwin" ;;
msys*) host_tag="windows" ;;
*) echo "host OS not handled"; exit 1 ;;
esac
NDK_TOOLCHAIN_DIR=${ANDROID_NDK}/toolchains/llvm/prebuilt/${host_tag}-x86_64
NDK_TOOLCHAIN_PATH=${NDK_TOOLCHAIN_DIR}/bin
# Add the NDK toolchain to the PATH, needed both for contribs and for building
# stub libraries
CROSS_TOOLS=${NDK_TOOLCHAIN_PATH}/llvm-
CROSS_CLANG=${NDK_TOOLCHAIN_PATH}/${CLANG_PREFIX}${ANDROID_API}-clang
export PATH="${NDK_TOOLCHAIN_PATH}:${PATH}"
NDK_BUILD=$ANDROID_NDK/ndk-build
if [ ! -z "$MSYSTEM_PREFIX" ] ; then
# The make.exe and awk.exe from the toolchain don't work in msys
export PATH="$MSYSTEM_PREFIX/bin:/usr/bin:${NDK_TOOLCHAIN_PATH}:${PATH}"
NDK_BUILD=$NDK_BUILD.cmd
fi
##########
# CFLAGS #
##########
if [ "$NO_OPTIM" = "1" ];
then
VLC_CFLAGS="-g -O0"
else
VLC_CFLAGS="-g -O2"
fi
# cf. GLOBAL_CFLAGS from ${ANDROID_NDK}/build/core/default-build-commands.mk
VLC_CFLAGS="${VLC_CFLAGS} -fPIC -fdata-sections -ffunction-sections -funwind-tables \
-fstack-protector-strong -no-canonical-prefixes"
VLC_CXXFLAGS="-fexceptions -frtti"
# Release or not?
if [ "$AVLC_RELEASE" = 1 ]; then
VLC_CFLAGS="${VLC_CFLAGS} -DNDEBUG "
NDK_DEBUG=0
else
NDK_DEBUG=1
fi
###############
# DISPLAY ABI #
###############
echo "ABI: $ANDROID_ABI"
echo "API: $ANDROID_API"
echo "PATH: $PATH"
echo "VLC_CFLAGS: ${VLC_CFLAGS}"
echo "VLC_CXXFLAGS: ${VLC_CXXFLAGS}"
if [ -z "$ANDROID_NDK" ]; then
echo "Please set the ANDROID_NDK environment variable with its path."
exit 1
fi
if [ -z "$ANDROID_ABI" ]; then
echo "Please pass the ANDROID ABI to the correct architecture, using
build-libvlc.sh -a ARCH
ARM: (armeabi-v7a|arm)
ARM64: (arm64-v8a|arm64)
X86: x86, x86_64"
exit 1
fi
avlc_checkfail()
{
if [ ! $? -eq 0 ];then
echo "$1"
exit 1
fi
}
avlc_find_modules()
{
echo "$(find $1 -name 'lib*plugin.a' | grep -vE "lib(${blacklist_regexp})_plugin.a" | tr '\n' ' ')"
}
avlc_get_symbol()
{
echo "$1" | grep vlc_entry_$2|cut -d" " -f 3
}
avlc_gen_pc_file()
{
echo -n "Generating $2 pkg-config file: "
echo $1/$(echo $2|tr 'A-Z' 'a-z').pc
exec 3<> $1/$(echo $2|tr 'A-Z' 'a-z').pc
[ ! -z "${PC_PREFIX}" ] &&
echo "prefix=${PC_PREFIX}" >&3
[ ! -z "${PC_LIBDIR}" ] &&
echo "libdir=${PC_LIBDIR}" >&3
[ ! -z "${PC_INCLUDEDIR}" ] &&
echo "includedir=${PC_INCLUDEDIR}" >&3
echo "" >&3
echo "Name: $2" >&3
echo "Description: $2" >&3
echo "Version: $3" >&3
echo "Libs: ${PC_LIBS} -l$2" >&3
echo "Cflags: ${PC_CFLAGS}" >&3
exec 3>&-
}
avlc_pkgconfig()
{
# Enforce pkg-config files coming from VLC contribs
PKG_CONFIG_PATH="$VLC_CONTRIB/lib/pkgconfig/" \
PKG_CONFIG_LIBDIR="$VLC_CONTRIB/lib/pkgconfig/" \
pkg-config "$@"
}
avlc_build()
{
###########################
# VLC BOOTSTRAP ARGUMENTS #
###########################
VLC_CONTRIB_ARGS="\
--disable-aribb24 \
--disable-aribb25 \
--disable-caca \
--disable-chromaprint \
--disable-faad2 \
--disable-fontconfig \
--disable-goom \
--disable-kate \
--disable-libmpeg2 \
--disable-mad \
--disable-medialibrary \
--disable-mpcdec \
--disable-rav1e \
--disable-samplerate \
--disable-schroedinger \
--disable-sidplay2 \
--disable-srt \
--disable-vnc \
--disable-vncclient \
--disable-x265 \
--enable-ad-clauses \
--enable-dvdnav \
--enable-dvdread \
--enable-fluidlite \
--enable-gme \
--enable-harfbuzz \
--enable-jpeg \
--enable-libarchive \
--enable-libdsm \
--enable-libplacebo \
--enable-lua \
--enable-microdns \
--enable-mpg123 \
--enable-nfs \
--enable-smb2 \
--enable-soxr \
--enable-upnp \
--enable-vorbis \
--enable-vpx \
--enable-zvbi \
"
###########################
# VLC CONFIGURE ARGUMENTS #
###########################
VLC_CONFIGURE_ARGS="\
--disable-alsa \
--disable-caca \
--disable-dbus \
--disable-decklink \
--disable-dv1394 \
--disable-faad \
--disable-fluidsynth \
--disable-goom \
--disable-jack \
--disable-libva \
--disable-linsys \
--disable-mad \
--disable-mtp \
--disable-nls \
--disable-notify \
--disable-projectm \
--disable-pulse \
--disable-qt \
--disable-samplerate \
--disable-schroedinger \
--disable-shared \
--disable-sid \
--disable-skins2 \
--disable-svg \
--disable-udev \
--disable-update-check \
--disable-v4l2 \
--disable-vcd \
--disable-vlc \
--disable-vlm \
--disable-vnc \
--disable-xcb \
--enable-avcodec \
--enable-avformat \
--enable-bluray \
--enable-chromecast \
--enable-dvbpsi \
--enable-dvdnav \
--enable-dvdread \
--enable-fluidlite \
--enable-gles2 \
--enable-gme \
--enable-jpeg \
--enable-libass \
--enable-libxml2 \
--enable-live555 \
--enable-lua \
--enable-matroska \
--enable-mod \
--enable-mpg123 \
--enable-opensles \
--enable-opus \
--enable-smb2 \
--enable-sout \
--enable-swscale \
--enable-taglib \
--enable-vorbis \
--enable-zvbi \
--with-pic \
"
########################
# VLC MODULE BLACKLIST #
########################
VLC_MODULE_BLACKLIST="
access_(bd|shm|imem)
addons.*
alphamask
aout_file
audiobargraph_[av]
audioscrobbler
ball
blendbench
bluescreen
clone
dtstofloat32
dynamicoverlay
erase
export
fb
gestures
gradient
grain
hotkeys
logger
magnify
mediadirs
mirror
mosaic
motion
motionblur
motiondetect
netsync
oldrc
osdmenu
podcast
posterize
psychedelic
puzzle
real
remoteosd
ripple
rss
sap
scene
sharpen
speex_resampler
stats
stream_filter_record
t140
visual
wall
yuv
.dummy
"
###########################
# Build buildsystem tools #
###########################
export PATH="$VLC_SRC_DIR/extras/tools/build/bin:$PATH"
echo "Building tools"
(cd $VLC_SRC_DIR/extras/tools && ./bootstrap)
avlc_checkfail "buildsystem tools: bootstrap failed"
make -C $VLC_SRC_DIR/extras/tools $MAKEFLAGS
avlc_checkfail "buildsystem tools: make failed"
VLC_CONTRIB="$VLC_SRC_DIR/contrib/$TARGET_TUPLE"
#############
# BOOTSTRAP #
#############
if [ ! -f $VLC_SRC_DIR/configure ]; then
echo "Bootstraping"
(cd $VLC_SRC_DIR && ./bootstrap)
avlc_checkfail "vlc: bootstrap failed"
fi
############
# Contribs #
############
echo "Building the contribs"
VLC_CONTRIB_DIR=$VLC_SRC_DIR/contrib/contrib-android-${TARGET_TUPLE}
VLC_CONTRIB_OUT_DIR=$VLC_SRC_DIR/contrib/${TARGET_TUPLE}
mkdir -p $VLC_CONTRIB_OUT_DIR/lib/pkgconfig
avlc_gen_pc_file $VLC_CONTRIB_OUT_DIR/lib/pkgconfig EGL 1.1
avlc_gen_pc_file $VLC_CONTRIB_OUT_DIR/lib/pkgconfig GLESv2 2
mkdir -p $VLC_CONTRIB_DIR/lib/pkgconfig
# TODO: VLC 4.0 won't rm config.mak after each call to bootstrap. Move it just
# before ">> config.make" when switching to VLC 4.0
rm -f $VLC_CONTRIB_DIR/config.mak
# gettext
which autopoint >/dev/null
if [ ! $? -eq 0 ];then
VLC_CONTRIB_ARGS="$VLC_CONTRIB_ARGS --enable-gettext"
else
VLC_CONTRIB_ARGS="$VLC_CONTRIB_ARGS --disable-gettext"
fi
(cd $VLC_CONTRIB_DIR && ANDROID_ABI=${ANDROID_ABI} ANDROID_API=${ANDROID_API} \
../bootstrap --host=${TARGET_TUPLE} ${VLC_CONTRIB_ARGS})
avlc_checkfail "contribs: bootstrap failed"
if [ "$AVLC_USE_PREBUILT_CONTRIBS" -gt "0" ]; then
# Fetch prebuilt contribs
if [ -z "$VLC_PREBUILT_CONTRIBS_URL" ]; then
make -C $VLC_CONTRIB_DIR prebuilt
avlc_checkfail "Fetching prebuilt contribs failed"
else
make -C $VLC_CONTRIB_DIR prebuilt PREBUILT_URL="$VLC_PREBUILT_CONTRIBS_URL"
avlc_checkfail "Fetching prebuilt contribs from ${VLC_PREBUILT_CONTRIBS_URL} failed"
fi
# list packages to be built
make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" list
# build native tools
make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" tools
else
# Some libraries have arm assembly which won't build in thumb mode
# We append -marm to the CFLAGS of these libs to disable thumb mode
[ ${ANDROID_ABI} = "armeabi-v7a" ] && echo "NOTHUMB := -marm" >> $VLC_CONTRIB_DIR/config.mak
echo "EXTRA_CFLAGS=${VLC_CFLAGS}" >> $VLC_CONTRIB_DIR/config.mak
echo "EXTRA_CXXFLAGS=${VLC_CXXFLAGS}" >> $VLC_CONTRIB_DIR/config.mak
echo "CC=${CROSS_CLANG}" >> $VLC_CONTRIB_DIR/config.mak
echo "CXX=${CROSS_CLANG}++" >> $VLC_CONTRIB_DIR/config.mak
echo "AR=${CROSS_TOOLS}ar" >> $VLC_CONTRIB_DIR/config.mak
echo "AS=${CROSS_TOOLS}as" >> $VLC_CONTRIB_DIR/config.mak
echo "RANLIB=${CROSS_TOOLS}ranlib" >> $VLC_CONTRIB_DIR/config.mak
echo "LD=${CROSS_TOOLS}ld" >> $VLC_CONTRIB_DIR/config.mak
echo "NM=${CROSS_TOOLS}nm" >> $VLC_CONTRIB_DIR/config.mak
echo "STRIP=${CROSS_TOOLS}strip" >> $VLC_CONTRIB_DIR/config.mak
# list packages to be built
make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" list
make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" $MAKEFLAGS fetch
avlc_checkfail "contribs: make fetch failed"
#export the PATH
# Make
make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" $MAKEFLAGS -k || make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" $MAKEFLAGS -j1
avlc_checkfail "contribs: make failed"
# Make prebuilt contribs package
if [ "$AVLC_MAKE_PREBUILT_CONTRIBS" -gt "0" ]; then
make -C $VLC_CONTRIB_DIR package
avlc_checkfail "Creating prebuilt contribs package failed"
fi
fi
mkdir -p $VLC_BUILD_DIR
#############
# CONFIGURE #
#############
if [ ${ANDROID_API} -lt "26" ]; then
# android APIs < 26 have empty sys/shm.h headers that triggers shm detection but it
# doesn't have any shm functions and/or symbols. */
export ac_cv_header_sys_shm_h=no
fi
# always use fixups for search.h and tdestroy
export ac_cv_header_search_h=no
export ac_cv_func_tdestroy=no
export ac_cv_func_tfind=no
if [ ! -e $VLC_BUILD_DIR/config.h -o "$AVLC_RELEASE" = 1 ]; then
VLC_CONFIGURE_DEBUG=""
if [ ! "$AVLC_RELEASE" = 1 ]; then
VLC_CONFIGURE_DEBUG="--enable-debug --disable-branch-protection"
fi
BEFORE_VLC_BUILD_DIR=$(pwd -P)
cd $VLC_BUILD_DIR
CFLAGS="${VLC_CFLAGS}" \
CXXFLAGS="${VLC_CFLAGS} ${VLC_CXXFLAGS}" \
CC="${CROSS_CLANG}" \
CXX="${CROSS_CLANG}++" \
NM="${CROSS_TOOLS}nm" \
STRIP="${CROSS_TOOLS}strip" \
RANLIB="${CROSS_TOOLS}ranlib" \
AR="${CROSS_TOOLS}ar" \
AS="${CROSS_TOOLS}as" \
PKG_CONFIG_LIBDIR=$VLC_SRC_DIR/contrib/$TARGET_TUPLE/lib/pkgconfig \
../configure --host=$TARGET_TUPLE \
--with-contrib=${VLC_SRC_DIR}/contrib/${TARGET_TUPLE} \
--prefix=${VLC_BUILD_DIR}/install/ \
${EXTRA_PARAMS} ${VLC_CONFIGURE_ARGS} ${VLC_CONFIGURE_DEBUG}
cd "$BEFORE_VLC_BUILD_DIR"
avlc_checkfail "vlc: configure failed"
fi
############
# BUILDING #
############
echo "Building"
make -C $VLC_BUILD_DIR $MAKEFLAGS
avlc_checkfail "vlc: make failed"
make -C $VLC_BUILD_DIR install
avlc_checkfail "vlc: make install failed"
##################
# libVLC modules #
##################
REDEFINED_VLC_MODULES_DIR=${VLC_BUILD_DIR}/install/lib/vlc/plugins
rm -rf ${REDEFINED_VLC_MODULES_DIR}
mkdir -p ${REDEFINED_VLC_MODULES_DIR}
echo "Generating static module list"
blacklist_regexp=
for i in ${VLC_MODULE_BLACKLIST}
do
if [ -z "${blacklist_regexp}" ]
then
blacklist_regexp="${i}"
else
blacklist_regexp="${blacklist_regexp}|${i}"
fi
done
VLC_MODULES=$(avlc_find_modules ${VLC_BUILD_DIR}/modules)
DEFINITION="";
SYMBOLS_TO_REDEFINE=""
# add a symbol to the SYMBOLS_TO_REDIFINE list
avlc_add_symbol_to_redefine() {
SYMBOLS_TO_REDEFINE="${SYMBOLS_TO_REDEFINE} $1"
}
# find and return the path of $2 inside $1
avlc_find_lib() {
find $1 -name '$2'
}
# get all global symbols of a library and add them to SYMBOLS_TO_REDIFINE list
avlc_add_lib_to_redefine() {
avlc_add_symbol_to_redefine "$("${CROSS_TOOLS}nm" -g $(avlc_find_lib ${VLC_BUILD_DIR} $1) | grep ' T ' | cut -f3 -d ' ')"
}
# Generic symbols
avlc_add_symbol_to_redefine AccessOpen
avlc_add_symbol_to_redefine AccessClose
avlc_add_symbol_to_redefine StreamOpen
avlc_add_symbol_to_redefine StreamClose
avlc_add_symbol_to_redefine OpenDemux
avlc_add_symbol_to_redefine CloseDemux
avlc_add_symbol_to_redefine DemuxOpen
avlc_add_symbol_to_redefine DemuxClose
avlc_add_symbol_to_redefine OpenFilter
avlc_add_symbol_to_redefine CloseFilter
avlc_add_symbol_to_redefine Open
avlc_add_symbol_to_redefine Close
#libvlc_json
avlc_add_symbol_to_redefine json_read
avlc_add_symbol_to_redefine json_parse_error
avlc_add_lib_to_redefine libvlc_json.a
BUILTINS="const void *vlc_static_modules[] = {\n";
for file in $VLC_MODULES; do
outfile=${REDEFINED_VLC_MODULES_DIR}/$(basename $file)
name=$(echo $file | sed 's/.*\.libs\/lib//' | sed 's/_plugin\.a//');
symbols=$("${CROSS_TOOLS}nm" -g $file)
# ensure that all modules have differents symbol names
entry=$(avlc_get_symbol "$symbols" _)
copyright=$(avlc_get_symbol "$symbols" copyright)
license=$(avlc_get_symbol "$symbols" license)
cat <<EOF > ${REDEFINED_VLC_MODULES_DIR}/syms
$entry vlc_entry__$name
$copyright vlc_entry_copyright__$name
$license vlc_entry_license__$name
EOF
for sym in ${SYMBOLS_TO_REDEFINE}; do
echo "$sym ${sym}__${name}" >> ${REDEFINED_VLC_MODULES_DIR}/syms
done
cmd="${CROSS_TOOLS}objcopy --redefine-syms ${REDEFINED_VLC_MODULES_DIR}/syms $file $outfile"
${cmd} || (echo "cmd failed: $cmd" && exit 1)
DEFINITION=$DEFINITION"int vlc_entry__$name (int (*)(void *, void *, int, ...), void *);\n";
BUILTINS="$BUILTINS vlc_entry__$name,\n";
done;
BUILTINS="$BUILTINS NULL\n};\n"; \
printf "/* Autogenerated from the list of modules */\n#include <unistd.h>\n$DEFINITION\n$BUILTINS\n" > $VLC_OUT_PATH/libvlcjni-modules.c
DEFINITION=""
BUILTINS="const void *libvlc_functions[] = {\n";
for func in $(cat $VLC_SRC_DIR/lib/libvlc.sym)
do
DEFINITION=$DEFINITION"int $func(void);\n";
BUILTINS="$BUILTINS $func,\n";
done
BUILTINS="$BUILTINS NULL\n};\n"; \
printf "/* Autogenerated from the list of modules */\n#include <unistd.h>\n$DEFINITION\n$BUILTINS\n" > $VLC_OUT_PATH/libvlcjni-symbols.c
rm ${REDEFINED_VLC_MODULES_DIR}/syms
###########################
# NDK-Build for libvlc.so #
###########################
VLC_MODULES=$(avlc_find_modules ${REDEFINED_VLC_MODULES_DIR})
VLC_CONTRIB_LDFLAGS=$(for i in $(/bin/ls $VLC_CONTRIB/lib/pkgconfig/*.pc); do avlc_pkgconfig --libs $i; done |xargs)
# Lua contrib doesn't expose a pkg-config file with libvlc 3.x and is
# not probed by the previous command in VLC_CONTRIB_LDFLAGS, so probe
# whether it was detected or add it manually to the LDFLAGS.
if ! avlc_pkgconfig --exists lua; then
VLC_CONTRIB_LDFLAGS="$VLC_CONTRIB_LDFLAGS '$VLC_CONTRIB/lib/liblua.a'"
fi
echo -e "ndk-build vlc"
$NDK_BUILD -C $LIBVLCJNI_ROOT/libvlc \
APP_STL="c++_shared" \
APP_CPPFLAGS="-frtti -fexceptions" \
VLC_SRC_DIR="$VLC_SRC_DIR" \
VLC_BUILD_DIR="$VLC_BUILD_DIR" \
VLC_CONTRIB="$VLC_CONTRIB" \
VLC_CONTRIB_LDFLAGS="$VLC_CONTRIB_LDFLAGS" \
VLC_MODULES="$VLC_MODULES" \
APP_BUILD_SCRIPT=jni/libvlc.mk \
APP_PLATFORM=android-${ANDROID_API} \
APP_ABI=${ANDROID_ABI} \
NDK_PROJECT_PATH=jni \
NDK_TOOLCHAIN_VERSION=clang \
NDK_DEBUG=${NDK_DEBUG}
avlc_checkfail "ndk-build libvlc failed"
libvlc_pc_dir="$LIBVLCJNI_ROOT/libvlc/jni/pkgconfig/${ANDROID_ABI}"
mkdir -p "${libvlc_pc_dir}"
PC_PREFIX="$(cd $LIBVLCJNI_ROOT/libvlc/jni/; pwd -P)" \
PC_LIBDIR="$(cd $LIBVLCJNI_ROOT/libvlc/jni/libs/${ANDROID_ABI}; pwd -P)" \
PC_INCLUDEDIR="$(cd $VLC_SRC_DIR/include/; pwd -P)" \
PC_CFLAGS="-I\${includedir}" \
PC_LIBS="-L\${libdir}" \
avlc_gen_pc_file "${libvlc_pc_dir}" libvlc 4.0.0
} # avlc_build()
if [ "$AVLC_SOURCED" != "1" ]; then
avlc_build
fi
#!/bin/sh
set -e
#############
# ARGUMENTS #
#############
AVLC_RELEASE=$RELEASE
while [ $# -gt 0 ]; do
case $1 in
help|--help)
echo "Use -a to set the ARCH"
echo "Use --release to build in release mode"
exit 1
;;
a|-a)
ANDROID_ABI=$2
shift
;;
release|--release)
AVLC_RELEASE=1
;;
esac
shift
done
#########
# FLAGS #
#########
if [ "${ANDROID_ABI}" = "arm" ] ; then
ANDROID_ABI="armeabi-v7a"
elif [ "${ANDROID_ABI}" = "arm64" ] ; then
ANDROID_ABI="arm64-v8a"
fi
# Set up ABI variables
if [ "${ANDROID_ABI}" = "x86" ] ; then
TARGET_TUPLE="i686-linux-android"
CLANG_PREFIX=${TARGET_TUPLE}
elif [ "${ANDROID_ABI}" = "x86_64" ] ; then
TARGET_TUPLE="x86_64-linux-android"
CLANG_PREFIX=${TARGET_TUPLE}
elif [ "${ANDROID_ABI}" = "arm64-v8a" ] ; then
TARGET_TUPLE="aarch64-linux-android"
CLANG_PREFIX=${TARGET_TUPLE}
elif [ "${ANDROID_ABI}" = "armeabi-v7a" ] ; then
TARGET_TUPLE="arm-linux-androideabi"
CLANG_PREFIX="armv7a-linux-androideabi"
else
echo "Please pass the ANDROID ABI to the correct architecture, using
compile-libvlc.sh -a ARCH
ARM: (armeabi-v7a|arm)
ARM64: (arm64-v8a|arm64)
X86: x86, x86_64"
exit 1
fi
# try to detect NDK version
REL=$(grep -o '^Pkg.Revision.*[0-9]*.*' $ANDROID_NDK/source.properties |cut -d " " -f 3 | cut -d "." -f 1)
if [ "$REL" = 27 ]; then
ANDROID_API=21
else
echo "NDK v27 needed, got $REL, cf. https://developer.android.com/ndk/downloads/"
exit 1
fi
############
# VLC PATH #
############
LIBVLCJNI_ROOT="$(cd "$(dirname "$0")/.."; pwd -P)"
# Fix path if the script is sourced from vlc-android
if [ -d $LIBVLCJNI_ROOT/libvlcjni ];then
LIBVLCJNI_ROOT=$LIBVLCJNI_ROOT/libvlcjni
fi
if [ -f $LIBVLCJNI_ROOT/src/libvlc.h ];then
VLC_SRC_DIR="$LIBVLCJNI_ROOT"
elif [ -f $PWD/src/libvlc.h ];then
VLC_SRC_DIR="$PWD"
elif [ -d $LIBVLCJNI_ROOT/vlc ];then
VLC_SRC_DIR=$LIBVLCJNI_ROOT/vlc
else
echo "Could not find vlc sources"
exit 1
fi
VLC_BUILD_DIR="$(cd $VLC_SRC_DIR/; pwd)/build-android-${TARGET_TUPLE}"
if [ -z $VLC_TARBALLS ]; then
VLC_TARBALLS="$(cd $VLC_SRC_DIR/;pwd)/contrib/tarballs"
fi
if [ ! -d $VLC_TARBALLS ]; then
mkdir -p $VLC_TARBALLS
fi
VLC_OUT_PATH="$VLC_BUILD_DIR/ndk"
mkdir -p $VLC_OUT_PATH
#################
# NDK TOOLCHAIN #
#################
host_tag=""
case $(uname | tr '[:upper:]' '[:lower:]') in
linux*) host_tag="linux" ;;
darwin*) host_tag="darwin" ;;
msys*) host_tag="windows" ;;
*) echo "host OS not handled"; exit 1 ;;
esac
NDK_TOOLCHAIN_DIR=${ANDROID_NDK}/toolchains/llvm/prebuilt/${host_tag}-x86_64
NDK_TOOLCHAIN_PATH=${NDK_TOOLCHAIN_DIR}/bin
export PATH="${NDK_TOOLCHAIN_PATH}:${PATH}"
NDK_BUILD=$ANDROID_NDK/ndk-build
if [ ! -z "$MSYSTEM_PREFIX" ] ; then
# The make.exe and awk.exe from the toolchain don't work in msys
export PATH="$MSYSTEM_PREFIX/bin:/usr/bin:${NDK_TOOLCHAIN_PATH}:${PATH}"
NDK_BUILD=$NDK_BUILD.cmd
fi
##########
# CFLAGS #
##########
# Release or not?
if [ "$AVLC_RELEASE" = 1 ]; then
NDK_DEBUG=0
else
NDK_DEBUG=1
fi
###############
# DISPLAY ABI #
###############
echo "ABI: $ANDROID_ABI"
echo "API: $ANDROID_API"
echo "PATH: $PATH"
if [ -z "$ANDROID_NDK" ]; then
echo "Please set the ANDROID_NDK environment variable with its path."
exit 1
fi
if [ -z "$ANDROID_ABI" ]; then
echo "Please pass the ANDROID ABI to the correct architecture, using
compile-libvlc.sh -a ARCH
ARM: (armeabi-v7a|arm)
ARM64: (arm64-v8a|arm64)
X86: x86, x86_64"
exit 1
fi
avlc_checkfail()
{
if [ ! $? -eq 0 ];then
echo "$1"
exit 1
fi
}
avlc_build()
{
$NDK_BUILD -C $LIBVLCJNI_ROOT/libvlc \
APP_STL="c++_shared" \
APP_CPPFLAGS="-frtti -fexceptions" \
VLC_SRC_DIR="$VLC_SRC_DIR" \
VLC_BUILD_DIR="$VLC_BUILD_DIR" \
APP_BUILD_SCRIPT=jni/libvlcjni.mk \
APP_PLATFORM=android-${ANDROID_API} \
APP_ABI=${ANDROID_ABI} \
NDK_PROJECT_PATH=jni \
NDK_TOOLCHAIN_VERSION=clang \
NDK_DEBUG=${NDK_DEBUG}
avlc_checkfail "ndk-build libvlcjni failed"
# Remove gdbserver to avoid conflict with libvlcjni.so debug options
rm -f $VLC_OUT_PATH/libs/${ANDROID_ABI}/gdb*
} # avlc_build()
if [ "$AVLC_SOURCED" != "1" ]; then
avlc_build
fi
......@@ -28,12 +28,15 @@ while [ $# -gt 0 ]; do
;;
release|--release)
AVLC_RELEASE=1
LIBVLC_RELEASE="--release"
;;
--package-contribs)
AVLC_MAKE_PREBUILT_CONTRIBS=1
LIBVLC_PACKAGE_CONTRIBS="--package-contribs"
;;
--with-prebuilt-contribs)
AVLC_USE_PREBUILT_CONTRIBS=1
LIBVLC_PREBUILT_CONTRIBS="--with-prebuilt-contribs"
;;
--no-jni)
AVLC_BUILD_JNI=0
......@@ -79,17 +82,13 @@ elif [ "${ANDROID_ABI}" = "x86_64" ] ; then
TARGET_TUPLE="x86_64-linux-android"
CLANG_PREFIX=${TARGET_TUPLE}
PLATFORM_SHORT_ARCH="x86_64"
HAVE_64=1
elif [ "${ANDROID_ABI}" = "arm64-v8a" ] ; then
TARGET_TUPLE="aarch64-linux-android"
CLANG_PREFIX=${TARGET_TUPLE}
HAVE_ARM=1
HAVE_64=1
PLATFORM_SHORT_ARCH="arm64"
elif [ "${ANDROID_ABI}" = "armeabi-v7a" ] ; then
TARGET_TUPLE="arm-linux-androideabi"
CLANG_PREFIX="armv7a-linux-androideabi"
HAVE_ARM=1
PLATFORM_SHORT_ARCH="arm"
else
echo "Please pass the ANDROID ABI to the correct architecture, using
......@@ -103,10 +102,10 @@ fi
# try to detect NDK version
REL=$(grep -o '^Pkg.Revision.*[0-9]*.*' $ANDROID_NDK/source.properties |cut -d " " -f 3 | cut -d "." -f 1)
if [ "$REL" = 25 ]; then
if [ "$REL" = 27 ]; then
ANDROID_API=21
else
echo "NDK v25 needed, cf. https://developer.android.com/ndk/downloads/"
echo "NDK v27 needed, got $REL, cf. https://developer.android.com/ndk/downloads/"
exit 1
fi
......@@ -266,459 +265,12 @@ avlc_pkgconfig()
avlc_build()
{
###########################
# VLC BOOTSTRAP ARGUMENTS #
###########################
VLC_BOOTSTRAP_ARGS="\
--disable-aribb24 \
--disable-aribb25 \
--disable-caca \
--disable-chromaprint \
--disable-dca \
--disable-faad2 \
--disable-fontconfig \
--disable-gettext \
--disable-goom \
--disable-kate \
--disable-libmpeg2 \
--disable-mad \
--disable-medialibrary \
--disable-mpcdec \
--disable-rav1e \
--disable-samplerate \
--disable-schroedinger \
--disable-sdl \
--disable-SDL_image \
--disable-sidplay2 \
--disable-srt \
--disable-tremor \
--disable-vnc \
--disable-vncclient \
--disable-x265 \
--enable-ad-clauses \
--enable-dvdnav \
--enable-dvdread \
--enable-fluidlite \
--enable-gme \
--enable-harfbuzz \
--enable-iconv \
--enable-jpeg \
--enable-libarchive \
--enable-libdsm \
--enable-libplacebo \
--enable-lua \
--enable-microdns \
--enable-mpg123 \
--enable-nfs \
--enable-smb2 \
--enable-soxr \
--enable-upnp \
--enable-vorbis \
--enable-vpx \
--enable-zvbi \
"
###########################
# VLC CONFIGURE ARGUMENTS #
###########################
VLC_CONFIGURE_ARGS="\
--disable-alsa \
--disable-caca \
--disable-dbus \
--disable-dca \
--disable-decklink \
--disable-dv1394 \
--disable-faad \
--disable-fluidsynth \
--disable-goom \
--disable-jack \
--disable-libva \
--disable-linsys \
--disable-mad \
--disable-mtp \
--disable-nls \
--disable-notify \
--disable-projectm \
--disable-pulse \
--disable-qt \
--disable-samplerate \
--disable-schroedinger \
--disable-sdl-image \
--disable-shared \
--disable-sid \
--disable-skins2 \
--disable-svg \
--disable-tremor \
--disable-udev \
--disable-update-check \
--disable-v4l2 \
--disable-vcd \
--disable-vlc \
--disable-vlm \
--disable-vnc \
--disable-xcb \
--enable-avcodec \
--enable-avformat \
--enable-bluray \
--enable-chromecast \
--enable-dvbpsi \
--enable-dvdnav \
--enable-dvdread \
--enable-fluidlite \
--enable-gles2 \
--enable-gme \
--enable-jpeg \
--enable-libass \
--enable-libxml2 \
--enable-live555 \
--enable-lua \
--enable-matroska \
--enable-mod \
--enable-mpg123 \
--enable-opensles \
--enable-opus \
--enable-realrtsp \
--enable-smb2 \
--enable-sout \
--enable-swscale \
--enable-taglib \
--enable-vorbis \
--enable-zvbi \
--with-pic \
"
########################
# VLC MODULE BLACKLIST #
########################
VLC_MODULE_BLACKLIST="
access_(bd|shm|imem)
addons.*
alphamask
aout_file
audiobargraph_[av]
audioscrobbler
ball
blendbench
bluescreen
clone
dtstofloat32
dynamicoverlay
erase
export
fb
gestures
gradient
grain
hotkeys
logger
magnify
mediadirs
mirror
mosaic
motion
motionblur
motiondetect
netsync
oldrc
osdmenu
podcast
posterize
psychedelic
puzzle
real
remoteosd
ripple
rss
sap
scene
sharpen
speex_resampler
stats
stream_filter_record
t140
visual
wall
yuv
.dummy
"
###########################
# Build buildsystem tools #
###########################
export PATH="$VLC_SRC_DIR/extras/tools/build/bin:$PATH"
echo "Building tools"
(cd $VLC_SRC_DIR/extras/tools && ./bootstrap)
avlc_checkfail "buildsystem tools: bootstrap failed"
make -C $VLC_SRC_DIR/extras/tools $MAKEFLAGS
avlc_checkfail "buildsystem tools: make failed"
VLC_CONTRIB="$VLC_SRC_DIR/contrib/$TARGET_TUPLE"
$LIBVLCJNI_SRC_DIR/buildsystem/build-libvlc.sh -a $ANDROID_ABI $LIBVLC_RELEASE $LIBVLC_PACKAGE_CONTRIBS $LIBVLC_PREBUILT_CONTRIBS
#############
# BOOTSTRAP #
#############
if [ ! -f $VLC_SRC_DIR/configure ]; then
echo "Bootstraping"
(cd $VLC_SRC_DIR && ./bootstrap)
avlc_checkfail "vlc: bootstrap failed"
fi
############
# Contribs #
############
echo "Building the contribs"
VLC_CONTRIB_DIR=$VLC_SRC_DIR/contrib/contrib-android-${TARGET_TUPLE}
VLC_CONTRIB_OUT_DIR=$VLC_SRC_DIR/contrib/${TARGET_TUPLE}
mkdir -p $VLC_CONTRIB_OUT_DIR/lib/pkgconfig
avlc_gen_pc_file $VLC_CONTRIB_OUT_DIR/lib/pkgconfig EGL 1.1
avlc_gen_pc_file $VLC_CONTRIB_OUT_DIR/lib/pkgconfig GLESv2 2
mkdir -p $VLC_CONTRIB_DIR/lib/pkgconfig
# TODO: VLC 4.0 won't rm config.mak after each call to bootstrap. Move it just
# before ">> config.make" when switching to VLC 4.0
rm -f $VLC_CONTRIB_DIR/config.mak
export USE_FFMPEG=1
(cd $VLC_CONTRIB_DIR && ANDROID_ABI=${ANDROID_ABI} ANDROID_API=${ANDROID_API} \
../bootstrap --host=${TARGET_TUPLE} ${VLC_BOOTSTRAP_ARGS})
avlc_checkfail "contribs: bootstrap failed"
if [ "$AVLC_USE_PREBUILT_CONTRIBS" -gt "0" ]; then
# Fetch prebuilt contribs
if [ -z "$VLC_PREBUILT_CONTRIBS_URL" ]; then
make -C $VLC_CONTRIB_DIR prebuilt
avlc_checkfail "Fetching prebuilt contribs failed"
else
make -C $VLC_CONTRIB_DIR prebuilt PREBUILT_URL="$VLC_PREBUILT_CONTRIBS_URL"
avlc_checkfail "Fetching prebuilt contribs from ${VLC_PREBUILT_CONTRIBS_URL} failed"
fi
make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" .luac
else
# Some libraries have arm assembly which won't build in thumb mode
# We append -marm to the CFLAGS of these libs to disable thumb mode
[ ${ANDROID_ABI} = "armeabi-v7a" ] && echo "NOTHUMB := -marm" >> $VLC_CONTRIB_DIR/config.mak
echo "EXTRA_CFLAGS=${VLC_CFLAGS}" >> $VLC_CONTRIB_DIR/config.mak
echo "EXTRA_CXXFLAGS=${VLC_CXXFLAGS}" >> $VLC_CONTRIB_DIR/config.mak
echo "CC=${CROSS_CLANG}" >> $VLC_CONTRIB_DIR/config.mak
echo "CXX=${CROSS_CLANG}++" >> $VLC_CONTRIB_DIR/config.mak
echo "AR=${CROSS_TOOLS}ar" >> $VLC_CONTRIB_DIR/config.mak
echo "AS=${CROSS_TOOLS}as" >> $VLC_CONTRIB_DIR/config.mak
echo "RANLIB=${CROSS_TOOLS}ranlib" >> $VLC_CONTRIB_DIR/config.mak
echo "LD=${CROSS_TOOLS}ld" >> $VLC_CONTRIB_DIR/config.mak
echo "NM=${CROSS_TOOLS}nm" >> $VLC_CONTRIB_DIR/config.mak
echo "STRIP=${CROSS_TOOLS}strip" >> $VLC_CONTRIB_DIR/config.mak
# fix modplug endianess check (narrowing error)
export ac_cv_c_bigendian=no
make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" $MAKEFLAGS fetch
avlc_checkfail "contribs: make fetch failed"
# gettext
which autopoint >/dev/null || make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" $MAKEFLAGS .gettext
#export the PATH
# Make
make -C $VLC_CONTRIB_DIR TARBALLS="$VLC_TARBALLS" $MAKEFLAGS
avlc_checkfail "contribs: make failed"
# Make prebuilt contribs package
if [ "$AVLC_MAKE_PREBUILT_CONTRIBS" -gt "0" ]; then
make -C $VLC_CONTRIB_DIR package
avlc_checkfail "Creating prebuilt contribs package failed"
fi
fi
mkdir -p $VLC_BUILD_DIR
#############
# CONFIGURE #
#############
if [ ${ANDROID_API} -lt "26" ]; then
# android APIs < 26 have empty sys/shm.h headers that triggers shm detection but it
# doesn't have any shm functions and/or symbols. */
export ac_cv_header_sys_shm_h=no
fi
if [ ${ANDROID_API} -lt "21" ] ; then
# force uselocale using libandroid_support since it's present in libc++
export ac_cv_func_uselocale=yes
VLC_LDFLAGS="-landroid_support"
fi
# always use fixups for search.h and tdestroy
export ac_cv_header_search_h=no
export ac_cv_func_tdestroy=no
export ac_cv_func_tfind=no
if [ ! -e $VLC_BUILD_DIR/config.h -o "$AVLC_RELEASE" = 1 ]; then
VLC_CONFIGURE_DEBUG=""
if [ ! "$AVLC_RELEASE" = 1 ]; then
VLC_CONFIGURE_DEBUG="--enable-debug --disable-branch-protection"
fi
(cd $VLC_BUILD_DIR && \
CFLAGS="${VLC_CFLAGS}" \
CXXFLAGS="${VLC_CFLAGS} ${VLC_CXXFLAGS}" \
CC="${CROSS_CLANG}" \
CXX="${CROSS_CLANG}++" \
NM="${CROSS_TOOLS}nm" \
STRIP="${CROSS_TOOLS}strip" \
RANLIB="${CROSS_TOOLS}ranlib" \
AR="${CROSS_TOOLS}ar" \
AS="${CROSS_TOOLS}as" \
PKG_CONFIG_LIBDIR=$VLC_SRC_DIR/contrib/$TARGET_TUPLE/lib/pkgconfig \
PKG_CONFIG_PATH=$VLC_SRC_DIR/contrib/$TARGET_TUPLE/lib/pkgconfig \
PATH=../contrib/bin:$PATH \
sh ../configure --host=$TARGET_TUPLE --build=x86_64-unknown-linux \
--with-contrib=${VLC_SRC_DIR}/contrib/${TARGET_TUPLE} \
--prefix=${VLC_BUILD_DIR}/install/ \
${EXTRA_PARAMS} ${VLC_CONFIGURE_ARGS} ${VLC_CONFIGURE_DEBUG} \
)
avlc_checkfail "vlc: configure failed"
if [ "$AVLC_BUILD_JNI" = "1" ]; then
$LIBVLCJNI_SRC_DIR/buildsystem/build-libvlcjni.sh -a $ANDROID_ABI $LIBVLC_RELEASE
fi
############
# BUILDING #
############
echo "Building"
make -C $VLC_BUILD_DIR $MAKEFLAGS
avlc_checkfail "vlc: make failed"
make -C $VLC_BUILD_DIR install
avlc_checkfail "vlc: make install failed"
##################
# libVLC modules #
##################
REDEFINED_VLC_MODULES_DIR=${VLC_BUILD_DIR}/install/lib/vlc/plugins
rm -rf ${REDEFINED_VLC_MODULES_DIR}
mkdir -p ${REDEFINED_VLC_MODULES_DIR}
echo "Generating static module list"
blacklist_regexp=
for i in ${VLC_MODULE_BLACKLIST}
do
if [ -z "${blacklist_regexp}" ]
then
blacklist_regexp="${i}"
else
blacklist_regexp="${blacklist_regexp}|${i}"
fi
done
VLC_MODULES=$(avlc_find_modules ${VLC_BUILD_DIR}/modules)
DEFINITION="";
BUILTINS="const void *vlc_static_modules[] = {\n";
for file in $VLC_MODULES; do
outfile=${REDEFINED_VLC_MODULES_DIR}/$(basename $file)
name=$(echo $file | sed 's/.*\.libs\/lib//' | sed 's/_plugin\.a//');
symbols=$("${CROSS_TOOLS}nm" -g $file)
# assure that all modules have differents symbol names
entry=$(avlc_get_symbol "$symbols" _)
copyright=$(avlc_get_symbol "$symbols" copyright)
license=$(avlc_get_symbol "$symbols" license)
cat <<EOF > ${REDEFINED_VLC_MODULES_DIR}/syms
AccessOpen AccessOpen__$name
AccessClose AccessClose__$name
StreamOpen StreamOpen__$name
StreamClose StreamClose__$name
OpenDemux OpenDemux__$name
CloseDemux CloseDemux__$name
DemuxOpen DemuxOpen__$name
DemuxClose DemuxClose__$name
OpenFilter OpenFilter__$name
CloseFilter CloseFilter__$name
Open Open__$name
Close Close__$name
$entry vlc_entry__$name
$copyright vlc_entry_copyright__$name
$license vlc_entry_license__$name
EOF
cmd="${CROSS_TOOLS}objcopy --redefine-syms ${REDEFINED_VLC_MODULES_DIR}/syms $file $outfile"
${cmd} || (echo "cmd failed: $cmd" && exit 1)
DEFINITION=$DEFINITION"int vlc_entry__$name (int (*)(void *, void *, int, ...), void *);\n";
BUILTINS="$BUILTINS vlc_entry__$name,\n";
done;
BUILTINS="$BUILTINS NULL\n};\n"; \
printf "/* Autogenerated from the list of modules */\n#include <unistd.h>\n$DEFINITION\n$BUILTINS\n" > $VLC_OUT_PATH/libvlcjni-modules.c
DEFINITION=""
BUILTINS="const void *libvlc_functions[] = {\n";
for func in $(cat $VLC_SRC_DIR/lib/libvlc.sym)
do
DEFINITION=$DEFINITION"int $func(void);\n";
BUILTINS="$BUILTINS $func,\n";
done
BUILTINS="$BUILTINS NULL\n};\n"; \
printf "/* Autogenerated from the list of modules */\n#include <unistd.h>\n$DEFINITION\n$BUILTINS\n" > $VLC_OUT_PATH/libvlcjni-symbols.c
rm ${REDEFINED_VLC_MODULES_DIR}/syms
###########################
# NDK-Build for libvlc.so #
###########################
VLC_MODULES=$(avlc_find_modules ${REDEFINED_VLC_MODULES_DIR})
VLC_CONTRIB_LDFLAGS=$(for i in $(/bin/ls $VLC_CONTRIB/lib/pkgconfig/*.pc); do avlc_pkgconfig --libs $i; done |xargs)
# Lua contrib doesn't expose a pkg-config file with libvlc 3.x and is
# not probed by the previous command in VLC_CONTRIB_LDFLAGS, so probe
# whether it was detected or add it manually to the LDFLAGS.
if ! avlc_pkgconfig --exists lua; then
VLC_CONTRIB_LDFLAGS="$VLC_CONTRIB_LDFLAGS '$VLC_CONTRIB/lib/liblua.a'"
fi
echo -e "ndk-build vlc"
touch $VLC_OUT_PATH/dummy.cpp
$NDK_BUILD -C $LIBVLCJNI_SRC_DIR/libvlc \
APP_STL="c++_shared" \
APP_CPPFLAGS="-frtti -fexceptions" \
VLC_SRC_DIR="$VLC_SRC_DIR" \
VLC_BUILD_DIR="$VLC_BUILD_DIR" \
VLC_CONTRIB="$VLC_CONTRIB" \
VLC_CONTRIB_LDFLAGS="$VLC_CONTRIB_LDFLAGS" \
VLC_MODULES="$VLC_MODULES" \
VLC_LDFLAGS="$VLC_LDFLAGS" \
VLC_BUILD_JNI="$AVLC_BUILD_JNI" \
APP_BUILD_SCRIPT=jni/Android.mk \
APP_PLATFORM=android-${ANDROID_API} \
APP_ABI=${ANDROID_ABI} \
NDK_PROJECT_PATH=jni \
NDK_TOOLCHAIN_VERSION=clang \
NDK_DEBUG=${NDK_DEBUG}
avlc_checkfail "ndk-build libvlc failed"
libvlc_pc_dir="$LIBVLCJNI_SRC_DIR/libvlc/jni/pkgconfig/${ANDROID_ABI}/"
mkdir -p "${libvlc_pc_dir}"
PC_PREFIX="$(cd $LIBVLCJNI_SRC_DIR/libvlc/jni/; pwd -P)" \
PC_LIBDIR="$(cd $LIBVLCJNI_SRC_DIR/libvlc/jni/libs/${ANDROID_ABI}; pwd -P)" \
PC_INCLUDEDIR="$(cd $VLC_SRC_DIR/include/; pwd -P)" \
PC_CFLAGS="-I\${includedir}" \
PC_LIBS="-L\${libdir}" \
avlc_gen_pc_file "${libvlc_pc_dir}" libvlc 4.0.0
# Remove gdbserver to avoid conflict with libvlcjni.so debug options
rm -f $VLC_OUT_PATH/libs/${ANDROID_ABI}/gdb*
} # avlc_build()
if [ "$AVLC_SOURCED" != "1" ]; then
......
......@@ -69,7 +69,7 @@ done
# Fetch VLC source #
####################
VLC_TESTED_HASH=158b9c7f733ce13ed5dbe5186020bfe871c3598f
VLC_TESTED_HASH=113e5a86b8801cb5cde1616d4f4da2eb14cbc1a8
VLC_REPOSITORY=https://code.videolan.org/videolan/vlc.git
VLC_BRANCH=master
if [ ! -d "vlc" ]; then
......
......@@ -7,7 +7,7 @@ cache:
default:
interruptible: true
image: registry.videolan.org/vlc-debian-android:20230614051113
image: registry.videolan.org/vlc-debian-android:20250403202200
tags:
- amd64
- docker
......@@ -21,7 +21,10 @@ stages:
script: |
rm -rf vlc
./buildsystem/get-vlc.sh
./buildsystem/compile-libvlc.sh -a ${ARCH}
export VLC_CONTRIB_SHA="$(cd vlc && extras/ci/get-contrib-sha.sh android-${ARCH})"
export VLC_PREBUILT_CONTRIBS_URL="https://artifacts.videolan.org/vlc/android-${ARCH}/vlc-contrib-${TRIPLET}-${VLC_CONTRIB_SHA}.tar.bz2"
if vlc/extras/ci/check-url.sh "$VLC_PREBUILT_CONTRIBS_URL"; then CONTRIB_FLAGS="--with-prebuilt-contribs"; fi
./buildsystem/compile-libvlc.sh -a ${ARCH} $CONTRIB_FLAGS
rules:
# Explicitely refuse to build anything that would also trigger
# a medialib build
......@@ -33,8 +36,6 @@ stages:
changes:
- libvlc/**/*
- if: '$CI_PIPELINE_SOURCE == "push"'
variables:
MAKEFLAGS: -j8
#################################
# Template config instantiation #
......@@ -44,21 +45,25 @@ build-libvlc-arm64:
extends: .build-libvlc-base
variables:
ARCH: arm64
TRIPLET: aarch64-linux-android
build-libvlc-armv7:
extends: .build-libvlc-base
variables:
ARCH: arm
TRIPLET: arm-linux-androideabi
build-libvlc-x86:
extends: .build-libvlc-base
variables:
ARCH: x86
TRIPLET: i686-linux-android
build-libvlc-x86_64:
extends: .build-libvlc-base
variables:
ARCH: x86_64
TRIPLET: x86_64-linux-android
#
.build-release-libs-base:
......
......@@ -81,6 +81,9 @@ android {
into 'assets/lua/meta'
exclude '**/*.txt'
}
buildFeatures {
buildConfig true
}
}
clean {
......@@ -108,7 +111,8 @@ def libvlcRevision() {
def vlcRevision() {
def vlc = new ByteArrayOutputStream()
exec {
commandLine 'sh', '-c', 'cd ../vlc && git rev-parse --short HEAD'
commandLine 'git', 'rev-parse', '--short', 'HEAD'
workingDir '../vlc'
standardOutput = vlc
}
return vlc.toString()
......
/* Force ndk build system to link with c++_shared and install it */
......@@ -22,8 +22,7 @@ include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libvlc
LOCAL_SRC_FILES := $(VLC_BUILD_DIR)/ndk/libvlcjni-modules.c \
$(VLC_BUILD_DIR)/ndk/libvlcjni-symbols.c \
$(VLC_BUILD_DIR)/ndk/dummy.cpp
$(VLC_BUILD_DIR)/ndk/libvlcjni-symbols.c
LOCAL_LDFLAGS := -L$(VLC_CONTRIB)/lib
LOCAL_LDLIBS := \
$(VLC_MODULES) \
......@@ -32,31 +31,10 @@ LOCAL_LDLIBS := \
$(VLC_BUILD_DIR)/compat/.libs/libcompat.a \
$(VLC_CONTRIB_LDFLAGS) \
-ldl -lz -lm -llog \
-la52 -ljpeg \
$(VLC_LDFLAGS) \
-ljpeg \
-Wl,-Bsymbolic
LOCAL_CXXFLAGS := -std=c++11
LOCAL_CXXFLAGS := -std=c++17
# This duplicates the libvlc* link flags, but it propagates the dependency
# on the native build which is what we want overall
LOCAL_STATIC_LIBRARIES := libvlccore libvlccompat libvlc-native
include $(BUILD_SHARED_LIBRARY)
ifneq ($(VLC_BUILD_JNI),0)
# libvlcjni
include $(CLEAR_VARS)
LOCAL_MODULE := libvlcjni
LOCAL_SRC_FILES := libvlcjni.c
LOCAL_SRC_FILES += libvlcjni-mediaplayer.c
LOCAL_SRC_FILES += libvlcjni-vlcobject.c
LOCAL_SRC_FILES += libvlcjni-media.c libvlcjni-medialist.c libvlcjni-mediadiscoverer.c libvlcjni-rendererdiscoverer.c
LOCAL_SRC_FILES += libvlcjni-dialog.c
LOCAL_SRC_FILES += std_logger.c
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/include $(VLC_BUILD_DIR)/include
LOCAL_CFLAGS := -std=c11
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := libvlc
include $(BUILD_SHARED_LIBRARY)
endif
......@@ -22,7 +22,6 @@
#include <pthread.h>
#include <stdlib.h>
#include <dlfcn.h>
#include "libvlcjni-vlcobject.h"
......@@ -1033,7 +1032,7 @@ Java_org_videolan_libvlc_MediaPlayer_nativeSetEqualizer(JNIEnv *env,
jboolean
Java_org_videolan_libvlc_MediaPlayer_nativeRecord(JNIEnv *env, jobject thiz,
jstring jdirectory)
jstring jdirectory, jboolean enable)
{
vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz);
const char *psz_directory;
......@@ -1041,12 +1040,6 @@ Java_org_videolan_libvlc_MediaPlayer_nativeRecord(JNIEnv *env, jobject thiz,
if (!p_obj)
return false;
int (*record_func)(libvlc_media_player_t *, const char *) =
dlsym(RTLD_DEFAULT, "libvlc_media_player_record");
if (!record_func)
return false;
if (jdirectory)
{
psz_directory = (*env)->GetStringUTFChars(env, jdirectory, 0);
......@@ -1059,14 +1052,14 @@ Java_org_videolan_libvlc_MediaPlayer_nativeRecord(JNIEnv *env, jobject thiz,
else
psz_directory = NULL;
jboolean ret = record_func(p_obj->u.p_mp, psz_directory) == 0;
libvlc_media_player_record(p_obj->u.p_mp, enable, psz_directory);
if (psz_directory)
{
(*env)->ReleaseStringUTFChars(env, jdirectory, psz_directory);
}
return ret;
return true;
}
jint
......@@ -1197,3 +1190,51 @@ Java_org_videolan_libvlc_MediaPlayer_00024Equalizer_nativeSetAmp(JNIEnv *env,
return libvlc_audio_equalizer_set_amp_at_index(p_eq, amp, index) == 0 ? true : false;
}
void
Java_org_videolan_libvlc_MediaPlayer_nativeSetTeletext(JNIEnv *env,
jobject thiz,
jint page)
{
vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz);
if (!p_obj)
return;
libvlc_video_set_teletext(p_obj->u.p_mp, page);
}
jint
Java_org_videolan_libvlc_MediaPlayer_nativeGetTeletext(JNIEnv *env,
jobject thiz)
{
vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz);
if (!p_obj)
return 100;
return libvlc_video_get_teletext(p_obj->u.p_mp);
}
void
Java_org_videolan_libvlc_MediaPlayer_nativeSetTeletextTransparency(JNIEnv *env,
jobject thiz,
jboolean transparent)
{
vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz);
if (!p_obj)
return;
libvlc_video_set_teletext_transparency (p_obj->u.p_mp, transparent);
}
jboolean
Java_org_videolan_libvlc_MediaPlayer_nativeGetTeletextTransparency(JNIEnv *env,
jobject thiz)
{
vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz);
if (!p_obj)
return false;
return !!libvlc_video_get_teletext_transparency (p_obj->u.p_mp);
}
LOCAL_PATH := $(call my-dir)
include $(CLEAN_VARS)
LOCAL_MODULE := libvlc
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libvlc.so
include $(PREBUILT_SHARED_LIBRARY)
# libvlcjni
include $(CLEAR_VARS)
LOCAL_MODULE := libvlcjni
LOCAL_SRC_FILES := libvlcjni.c
LOCAL_SRC_FILES += libvlcjni-mediaplayer.c
LOCAL_SRC_FILES += libvlcjni-vlcobject.c
LOCAL_SRC_FILES += libvlcjni-media.c libvlcjni-medialist.c libvlcjni-mediadiscoverer.c libvlcjni-rendererdiscoverer.c
LOCAL_SRC_FILES += libvlcjni-dialog.c
LOCAL_SRC_FILES += std_logger.c
LOCAL_C_INCLUDES := $(VLC_SRC_DIR)/include $(VLC_BUILD_DIR)/include
LOCAL_CFLAGS := -std=c17
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := libvlc
include $(BUILD_SHARED_LIBRARY)
......@@ -14,14 +14,14 @@ diff --git a/src/input/input.c b/src/input/input.c
index 21e019a6e72..d12de7bf367 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -297,7 +297,6 @@ input_thread_t *input_Create( vlc_object_t *p_parent,
if( priv->type == INPUT_TYPE_PREPARSING
|| priv->type == INPUT_TYPE_THUMBNAILING )
@@ -301,7 +301,6 @@ input_thread_t * input_Create( vlc_object_t *p_parent, input_item_t *p_item,
if( priv->type != INPUT_TYPE_PLAYBACK )
{
- p_input->obj.logger = NULL;
p_input->obj.no_interact = true;
}
else
--
2.35.1
......@@ -20,7 +20,6 @@
package org.videolan.libvlc;
import android.annotation.TargetApi;
import android.graphics.SurfaceTexture;
import android.os.Build;
import android.os.Handler;
......@@ -93,7 +92,6 @@ public class AWindow implements IVLCVout {
setSurface(mSurfaceHolder.getSurface());
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private void attachTextureView() {
mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
......@@ -123,7 +121,6 @@ public class AWindow implements IVLCVout {
throw new IllegalStateException();
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private void releaseTextureView() {
if (mTextureView != null)
mTextureView.setSurfaceTextureListener(null);
......@@ -167,7 +164,6 @@ public class AWindow implements IVLCVout {
}
};
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private TextureView.SurfaceTextureListener createSurfaceTextureListener() {
return new TextureView.SurfaceTextureListener() {
@Override
......@@ -289,7 +285,6 @@ public class AWindow implements IVLCVout {
}
@Override
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void setVideoSurface(SurfaceTexture videoSurfaceTexture) {
setSurface(ID_VIDEO, new Surface(videoSurfaceTexture), null);
}
......@@ -312,7 +307,6 @@ public class AWindow implements IVLCVout {
}
@Override
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void setSubtitlesSurface(SurfaceTexture subtitlesSurfaceTexture) {
setSurface(ID_SUBTITLES, new Surface(subtitlesSurfaceTexture), null);
}
......@@ -576,7 +570,6 @@ public class AWindow implements IVLCVout {
});
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private static class SurfaceTextureThread
implements Runnable, SurfaceTexture.OnFrameAvailableListener {
private SurfaceTexture mSurfaceTexture = null;
......
......@@ -27,9 +27,7 @@ import androidx.annotation.Nullable;
import org.videolan.libvlc.interfaces.AbstractVLCEvent;
import org.videolan.libvlc.interfaces.ILibVLC;
import org.videolan.libvlc.util.HWDecoderUtil;
import java.util.ArrayList;
import java.util.List;
@SuppressWarnings("unused, JniMissingFunction")
......
......@@ -29,7 +29,6 @@ import org.videolan.libvlc.interfaces.ILibVLC;
import org.videolan.libvlc.interfaces.IMedia;
import org.videolan.libvlc.interfaces.IMediaList;
import org.videolan.libvlc.util.AndroidUtil;
import org.videolan.libvlc.util.HWDecoderUtil;
import org.videolan.libvlc.util.VLCUtil;
import java.io.FileDescriptor;
......@@ -437,7 +436,7 @@ public class Media extends VLCObject<IMedia.Event> implements IMedia {
private static String getMediaCodecModule() {
return AndroidUtil.isLolliPopOrLater ? "mediacodec_ndk" : "mediacodec_jni";
return "mediacodec_ndk";
}
/**
......@@ -447,45 +446,7 @@ public class Media extends VLCObject<IMedia.Event> implements IMedia {
* @param force force hw acceleration even for unknown devices
*/
public void setHWDecoderEnabled(boolean enabled, boolean force) {
if (LibVLC.majorVersion() == 3) {
HWDecoderUtil.Decoder decoder = enabled ?
HWDecoderUtil.getDecoderFromDevice() :
HWDecoderUtil.Decoder.NONE;
/* Unknown device but the user asked for hardware acceleration */
if (decoder == HWDecoderUtil.Decoder.UNKNOWN && force)
decoder = HWDecoderUtil.Decoder.ALL;
if (decoder == HWDecoderUtil.Decoder.NONE || decoder == HWDecoderUtil.Decoder.UNKNOWN) {
addOption(":codec=all");
return;
}
/*
* Set higher caching values if using iomx decoding, since some omx
* decoders have a very high latency, and if the preroll data isn't
* enough to make the decoder output a frame, the playback timing gets
* started too soon, and every decoded frame appears to be too late.
* On Nexus One, the decoder latency seems to be 25 input packets
* for 320x170 H.264, a few packets less on higher resolutions.
* On Nexus S, the decoder latency seems to be about 7 packets.
*/
if (!mFileCachingSet)
addOption(":file-caching=1500");
if (!mNetworkCachingSet)
addOption(":network-caching=1500");
final StringBuilder sb = new StringBuilder(":codec=");
if (decoder == HWDecoderUtil.Decoder.MEDIACODEC || decoder == HWDecoderUtil.Decoder.ALL)
sb.append(getMediaCodecModule()).append(",");
if (force && (decoder == HWDecoderUtil.Decoder.OMX || decoder == HWDecoderUtil.Decoder.ALL))
sb.append("iomx,");
sb.append("all");
addOption(sb.toString());
}
else if (!enabled) /* LibVLC >= 4.0 */
if (!enabled) /* LibVLC >= 4.0 */
addOption(":no-hw-dec");
}
......
......@@ -390,6 +390,7 @@ public class MediaPlayer extends VLCObject<MediaPlayer.Event> {
SURFACE_16_9(16F/9F),
SURFACE_4_3(4F/3F),
SURFACE_16_10(16F/10F),
SURFACE_2_1(2F),
SURFACE_221_1(2.21F),
SURFACE_235_1(2.35F),
SURFACE_239_1(2.39F),
......@@ -494,7 +495,6 @@ public class MediaPlayer extends VLCObject<MediaPlayer.Event> {
return encodingFlags;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private BroadcastReceiver createAudioPlugReceiver() {
return new BroadcastReceiver() {
@Override
......@@ -513,9 +513,8 @@ public class MediaPlayer extends VLCObject<MediaPlayer.Event> {
}
private final BroadcastReceiver mAudioPlugReceiver =
AndroidUtil.isLolliPopOrLater && !AndroidUtil.isMarshMallowOrLater ? createAudioPlugReceiver() : null;
!AndroidUtil.isMarshMallowOrLater ? createAudioPlugReceiver() : null;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void registerAudioPlugV21(boolean register) {
if (register) {
final IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_HDMI_AUDIO_PLUG);
......@@ -842,6 +841,10 @@ public class MediaPlayer extends VLCObject<MediaPlayer.Event> {
* @param scale the scaling factor, or zero
*/
public void setScale(float scale) {
mVideoHelper.setCustomScale(scale);
}
protected void setNativeScale(float scale) {
nativeSetScale(scale);
}
......@@ -1220,10 +1223,11 @@ public class MediaPlayer extends VLCObject<MediaPlayer.Event> {
*
* @param directory path of the recording directory or null to stop
* recording
* @param enable true to start recording, false to stop
* @return true on success.
*/
public boolean record(String directory) {
return nativeRecord(directory);
public boolean record(String directory, boolean enable) {
return nativeRecord(directory, enable);
}
/**
......@@ -1318,6 +1322,39 @@ public class MediaPlayer extends VLCObject<MediaPlayer.Event> {
nativeSetPosition(pos, false);
}
/**
* Gets currently selected teletext page.
* @return the currently selected teletext page.
*/
public int getTeletext() {
return nativeGetTeletext();
};
/**
* Select a teletext page.
* If telexext was not active, activate teletext.
* @param page: page to change to
*/
public void setTeletext(int page) {
nativeSetTeletext(page);
};
/**
* Get current teletext background transparency.
* @return true if teletext is currently active and transparent, false if teletext is opaque or not active.
*/
public boolean getTeletextTransparency() {
return nativeGetTeletextTransparency();
};
/**
* Set teletext background transparency.
* @param transparent: true for transparent, false for opaque
*/
public void setTeletextTransparency(boolean transparent) {
nativeSetTeletextTransparency(transparent);
};
/**
* Gets current movie's length in ms.
* @return the movie length (in ms), or -1 if there is no media.
......@@ -1434,6 +1471,10 @@ public class MediaPlayer extends VLCObject<MediaPlayer.Event> {
private native long nativeGetSpuDelay();
private native boolean nativeSetSpuDelay(long delay);
private native boolean nativeAddSlave(int type, String location, boolean select);
private native boolean nativeRecord(String directory);
private native boolean nativeRecord(String directory, boolean enable);
private native boolean nativeSetEqualizer(Equalizer equalizer);
private native int nativeGetTeletext();
private native void nativeSetTeletext(int page);
private native boolean nativeGetTeletextTransparency();
private native void nativeSetTeletextTransparency(boolean transparent);
}
......@@ -26,6 +26,9 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener {
private MediaPlayer.ScaleType mCurrentScaleType = MediaPlayer.ScaleType.SURFACE_BEST_FIT;
private float mCustomScale;
private boolean mCurrentScaleCustom = false;
private int mVideoHeight = 0;
private int mVideoWidth = 0;
private int mVideoVisibleHeight = 0;
......@@ -129,11 +132,18 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener {
private void changeMediaPlayerLayout(int displayW, int displayH) {
if (mMediaPlayer.isReleased()) return;
if (mCurrentScaleCustom) {
mMediaPlayer.setAspectRatio(null);
mMediaPlayer.setNativeScale(mCustomScale);
return;
}
/* Change the video placement using the MediaPlayer API */
switch (mCurrentScaleType) {
case SURFACE_BEST_FIT:
mMediaPlayer.setAspectRatio(null);
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
break;
case SURFACE_FIT_SCREEN:
case SURFACE_FILL: {
......@@ -162,10 +172,10 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener {
scale = displayW / (float) videoW; /* horizontal */
else
scale = displayH / (float) videoH; /* vertical */
mMediaPlayer.setScale(scale);
mMediaPlayer.setNativeScale(scale);
mMediaPlayer.setAspectRatio(null);
} else {
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
mMediaPlayer.setAspectRatio(!videoSwapped ? ""+displayW+":"+displayH
: ""+displayH+":"+displayW);
}
......@@ -173,40 +183,43 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener {
}
case SURFACE_16_9:
mMediaPlayer.setAspectRatio("16:9");
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
break;
case SURFACE_16_10:
mMediaPlayer.setAspectRatio("16:10");
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
break;
case SURFACE_2_1:
mMediaPlayer.setAspectRatio("2:1");
mMediaPlayer.setNativeScale(0);
break;
case SURFACE_221_1:
mMediaPlayer.setAspectRatio("221:100");
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
break;
case SURFACE_235_1:
mMediaPlayer.setAspectRatio("235:100");
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
break;
case SURFACE_239_1:
mMediaPlayer.setAspectRatio("239:100");
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
break;
case SURFACE_5_4:
mMediaPlayer.setAspectRatio("5:4");
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
break;
case SURFACE_4_3:
mMediaPlayer.setAspectRatio("4:3");
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
break;
case SURFACE_ORIGINAL:
mMediaPlayer.setAspectRatio(null);
mMediaPlayer.setScale(1);
mMediaPlayer.setNativeScale(1);
break;
}
}
@TargetApi(Build.VERSION_CODES.N)
void updateVideoSurfaces() {
if (mMediaPlayer == null || mMediaPlayer.isReleased() || !mMediaPlayer.getVLCVout().areViewsAttached()) return;
final boolean isPrimary = mDisplayManager == null || mDisplayManager.isPrimary();
......@@ -254,7 +267,7 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener {
if (lp.width == lp.height && lp.width == ViewGroup.LayoutParams.MATCH_PARENT) {
/* We handle the placement of the video using Android View LayoutParams */
mMediaPlayer.setAspectRatio(null);
mMediaPlayer.setScale(0);
mMediaPlayer.setNativeScale(0);
}
double dw = sw, dh = sh;
......@@ -282,7 +295,14 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener {
// compute the display aspect ratio
double dar = dw / dh;
switch (mCurrentScaleType) {
MediaPlayer.ScaleType scaleType = mCurrentScaleType;
if (mCurrentScaleCustom) {
dh *= mCustomScale;
dw *= mCustomScale;
scaleType = MediaPlayer.ScaleType.SURFACE_BEST_FIT;
}
switch (scaleType) {
case SURFACE_BEST_FIT:
if (dar < ar)
dh = dw / ar;
......@@ -318,7 +338,6 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener {
videoView.invalidate();
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public void onNewVideoLayout(IVLCVout vlcVout, int width, int height, int visibleWidth, int visibleHeight, int sarNum, int sarDen) {
if (width == 0 && height == 0 && visibleWidth == 0 && visibleHeight == 0 && sarNum == 0 && sarDen == 0) {
......@@ -343,6 +362,13 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener {
void setVideoScale(MediaPlayer.ScaleType type) {
mCurrentScaleType = type;
mCurrentScaleCustom = false;
updateVideoSurfaces();
}
void setCustomScale(float scale) {
mCustomScale = scale;
mCurrentScaleCustom = true;
updateVideoSurfaces();
}
......
......@@ -102,9 +102,10 @@ public interface IMedia extends IVLCObject<IMedia.Event> {
class Parse {
public static final int ParseLocal = 0x01;
public static final int ParseNetwork = 0x02;
public static final int FetchLocal = 0x04;
public static final int FetchNetwork = 0x08;
public static final int DoInteract = 0x10;
public static final int ParseForced = 0x04;
public static final int FetchLocal = 0x08;
public static final int FetchNetwork = 0x10;
public static final int DoInteract = 0x20;
}
/*
......
......@@ -20,7 +20,6 @@
package org.videolan.libvlc.interfaces;
import android.annotation.TargetApi;
import android.graphics.SurfaceTexture;
import android.os.Build;
import androidx.annotation.MainThread;
......@@ -83,7 +82,6 @@ public interface IVLCVout {
* @see #attachViews()
*/
@MainThread
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
void setVideoView(TextureView videoTextureView);
/**
......@@ -102,7 +100,6 @@ public interface IVLCVout {
* @see #attachViews()
*/
@MainThread
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
void setVideoSurface(SurfaceTexture videoSurfaceTexture);
/**
......@@ -117,7 +114,6 @@ public interface IVLCVout {
* @see #attachViews()
*/
@MainThread
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
void setSubtitlesView(TextureView subtitlesTextureView);
/**
......@@ -136,7 +132,6 @@ public interface IVLCVout {
* @see #attachViews()
*/
@MainThread
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
void setSubtitlesSurface(SurfaceTexture subtitlesSurfaceTexture);
/**
......
......@@ -22,7 +22,6 @@
package org.videolan.libvlc.media;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Canvas;
import android.media.MediaFormat;
......@@ -68,19 +67,16 @@ public class VideoView extends SurfaceView
this(context, attrs, defStyleAttr, 0);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public VideoView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(event);
}
@Override
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
super.onInitializeAccessibilityNodeInfo(info);
}
......@@ -97,7 +93,6 @@ public class VideoView extends SurfaceView
final IMedia media = new Media(sILibVLC, uri);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void setVideoURI(Uri uri, Map<String, String> headers) {
setVideoURI(uri);
}
......@@ -118,7 +113,6 @@ public class VideoView extends SurfaceView
public void setOnErrorListener(OnErrorListener l) {
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public void setOnInfoListener(OnInfoListener l) {
}
......@@ -194,7 +188,6 @@ public class VideoView extends SurfaceView
}
@Override
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public int getAudioSessionId() {
return 0;
}
......