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
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (13)
Showing
with 434 additions and 27 deletions
......@@ -118,6 +118,7 @@ HAVE_OSX="0"
HAVE_TVOS="0"
HAVE_IOS_OR_TVOS="0"
HAVE_XROS="0"
HAVE_WATCHOS="0"
dnl Set x86 asm flags and defines
X86ASMFLAGS=""
......@@ -250,6 +251,19 @@ int foo() { return my_array[0]; }
ac_cv_func_fork=no
],)
AC_EGREP_CPP(yes,
[#import <TargetConditionals.h>
#if TARGET_OS_WATCH
yes
#endif],
[HAVE_WATCHOS="1"
HAVE_IOS="0"
HAVE_OSX="0"
HAVE_TVOS="0"
HAVE_IOS_OR_TVOS="0"
ac_cv_func_fork=no
],)
AS_IF([test "${HAVE_OSX}" = "1"],[VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreServices])])
dnl
......@@ -493,6 +507,7 @@ AM_CONDITIONAL([HAVE_OSX], [test "${HAVE_OSX}" = "1"])
AM_CONDITIONAL([HAVE_TVOS], [test "${HAVE_TVOS}" = "1"])
AM_CONDITIONAL([HAVE_IOS_OR_TVOS], [test "${HAVE_IOS_OR_TVOS}" = "1"])
AM_CONDITIONAL([HAVE_XROS], [test "${HAVE_XROS}" = "1"])
AM_CONDITIONAL([HAVE_WATCHOS], [test "${HAVE_WATCHOS}" = "1"])
AM_CONDITIONAL([HAVE_LIBANL], [test "${HAVE_LIBANL}" = "1"])
......
......@@ -287,6 +287,10 @@ case "${OS}" in
then
add_make_enabled "HAVE_TVOS"
fi
if test "$BUILDFORWATCHOS"
then
add_make_enabled "HAVE_WATCHOS"
fi
if test "$ENABLE_BITCODE"
then
add_make_enabled "HAVE_BITCODE_ENABLED"
......
......@@ -141,6 +141,13 @@ FFMPEGCONF += --cpu=core2
endif
ifdef HAVE_IOS
FFMPEGCONF += --enable-pic --extra-ldflags="$(EXTRA_CFLAGS) -isysroot $(IOS_SDK)"
ifdef HAVE_WATCHOS
FFMPEGCONF += --disable-everything
FFMPEGCONF += --enable-decoder='aac,aac_latm,aac_fixed,aadec,ac3,adpcm_*,aiff,alac,alsdec,amrnb,amrwb,ape,atrac1,atrac3,atrac3plus,atrac9,binkaudio_dct,binkaudio_rdft,bmv_audio,cook,dca,derf,dpcm,dts,dvaudio,eaac,eac3,flac,flv,g722,g723,g726,g729,gsm,metasound,mpc7,mpc8,mpegaudiodec_fixed,mp3,m4a,nellymoser,opus,pcm_*,qdmc,qdm2,ra144,ra288,ralf,rka,shorten,tta,tak,truespeech,vorbis,wavpack,wma,wmalossless,wmapro,wmavoice'
FFMPEGCONF += --enable-parser='aac,aac_latm,ac3,adpcm,amr,aac_latm,ape,cook,dca,dvaudio,flac,g723,g729,gsm,mlp,mpegaudio,opus,sipr,vorbis,xma'
FFMPEGCONF += --enable-demuxer='aac,ac3,adts,aiff,ape,asf,au,avi,caf,daud,dirac,dts,dv,ea,flac,flv,gsm,ivf,matroska,mmf,mov,mp3,mpeg,ogg,pcm,rm,sbc,sdp,shorten,voc,w64,wav,wv'
FFMPEGCONF += --enable-swresample
endif
endif
endif
......
......@@ -97,6 +97,12 @@ variables:
TRIPLET: $HOST_ARCH-apple-appletvos
SDKNAME: appletvos
.variables-watchos-arm64_32: &variables-watchos-arm64_32
VLC_PATH: /Users/videolanci/sandbox/bin
HOST_ARCH: arm64_32
TRIPLET: $HOST_ARCH-apple-watchos
SDKNAME: watchos
.variables-xros-arm64: &variables-xros-arm64
VLC_PATH: /Users/videolanci/sandbox/bin
HOST_ARCH: arm64
......@@ -582,6 +588,12 @@ tvos-arm64:
extends: .apple-os-common
variables: *variables-tvos-arm64
watchos-arm64_32:
extends: .apple-os-common
tags:
- macos-xcode15
variables: *variables-watchos-arm64_32
xros-arm64:
extends: .apple-os-common
tags:
......
......@@ -20,6 +20,8 @@ export VLC_DEPLOYMENT_TARGET_TVOS="11.0"
export VLC_DEPLOYMENT_TARGET_TVOS_SIMULATOR="12.0"
# xrOS deployment target
export VLC_DEPLOYMENT_TARGET_XROS="1.0"
# watchOS deployment target
export VLC_DEPLOYMENT_TARGET_WATCHOS="7.5"
#
# Contrib options
......@@ -103,6 +105,32 @@ export VLC_CONTRIB_OPTIONS_XROS=(
--disable-aom
)
export VLC_CONTRIB_OPTIONS_WATCHOS=(
--disable-gpl
--disable-gnuv3
--enable-ad-clauses
--disable-all
--enable-dvbcsa
--enable-dvbpsi
--enable-ebml
--enable-ffmpeg
--enable-flac
--enable-gsm
--enable-matroska
--enable-modplug
--enable-mysofa
--enable-ogg
--enable-opus
--enable-rnnoise
--enable-soxr
--enable-spatialaudio
--enable-speex
--enable-speexdsp
--enable-taglib
--enable-vorbis
--enable-zlib
)
#
# VLC options
#
......@@ -110,7 +138,6 @@ export VLC_CONTRIB_OPTIONS_XROS=(
# Base configure options for VLC
export VLC_CONFIG_OPTIONS_BASE=(
--disable-sse
--disable-mmx
--disable-a52
--disable-vcd
--disable-libcddb
......@@ -154,6 +181,13 @@ export VLC_CONFIG_OPTIONS_TVOS=()
# Additional configure options for xrOS
export VLC_CONFIG_OPTIONS_XROS=()
# Additional configure options for watchOS
export VLC_CONFIG_OPTIONS_WATCHOS=(
--disable-chromecast
--disable-sout
--disable-css
)
#
# VLC module options
#
......@@ -199,7 +233,6 @@ export VLC_MODULE_REMOVAL_LIST_BASE=(
bluescreen
erase
speex_resampler
magnify
gradient
visual
invert
......@@ -233,3 +266,94 @@ export VLC_MODULE_REMOVAL_LIST_TVOS=()
# Additional modules to remove for xrOS
export VLC_MODULE_REMOVAL_LIST_XROS=()
# Additional modules to remove for watchOS
export VLC_MODULE_REMOVAL_LIST_WATCHOS=(
access_imem
access_mms
adjust
audioscrobbler
blend
canvas
cdg
chain
chroma_copy
croppadd
cvdsub
deinterlace
dummy
dvbsub
edgedetection
flaschen
formatcrop
fps
freeze
ftp
grey_yuv
h26x
http
https
hx
hxxxhelper_testdec
i420_nv12
i420_rgb
i420_yuy2
i422_i420
i422_yuy2
idummy
image
inflate
json_tracer
logo
marq
mjpeg
orient
rawvi
rawvideo
record
rotate
rtp_opus
rtp_mpeg12
rtp_ac3
rtp_xiph
rtp_raw
rtp_h265
rtp_h264
rtp_rtp_pcm
rtp_rtp
rv32
satip
scale
spudec
subsdec
subsdelay
substx3g
subsusf
subtitle
svcbsub
swscale
tcp
tdummy
telx
textst
transform
ttml
ty
udp
vc1
vdr
vdummy
video_splitter
vmem
vobsub
vpx_alpha
wdummy
webvtt
wextern
vgl
ytdl
yuv
yuvp
yuy2_i420
yuy2_i422
)
......@@ -2,7 +2,7 @@
# Copyright (C) Marvin Scholz
#
# Script to help build VLC or libVLC for Apple OSes
# Supported OSes: iOS, tvOS, macOS
# Supported OSes: iOS, tvOS, macOS, xrOS, watchOS
#
# Currently this script builds a full static library,
# with all modules and contribs combined into one .a
......@@ -211,7 +211,7 @@ set_deployment_target()
validate_architecture()
{
case "$1" in
i386|x86_64|armv7|arm64)
i386|x86_64|armv7|arm64|armv7k|arm64_32)
VLC_HOST_ARCH="$1"
;;
aarch64)
......@@ -318,8 +318,16 @@ validate_sdk_name()
VLC_HOST_OS="xros"
set_deployment_target "$VLC_DEPLOYMENT_TARGET_XROS"
;;
watch*)
abort_err "Building for watchOS is not supported by this script"
watchos*)
VLC_HOST_PLATFORM="watchOS"
VLC_HOST_OS="watchos"
set_deployment_target "$VLC_DEPLOYMENT_TARGET_WATCHOS"
;;
watchsimulator*)
VLC_HOST_PLATFORM="watchSimulator"
VLC_HOST_PLATFORM_SIMULATOR="yes"
VLC_HOST_OS="watchos"
set_deployment_target "$VLC_DEPLOYMENT_TARGET_WATCHOS"
;;
*)
abort_err "Unhandled SDK name '$1'"
......@@ -625,6 +633,9 @@ elif [ "$VLC_HOST_OS" = "tvos" ]; then
export BUILDFORTVOS="yes"
elif [ "$VLC_HOST_OS" = "xros" ]; then
export BUILDFORIOS="yes"
elif [ "$VLC_HOST_OS" = "watchos" ]; then
export BUILDFORIOS="yes"
export BUILDFORWATCHOS="yes"
fi
# Default to "make" if there is no MAKE env variable
......@@ -661,6 +672,8 @@ elif [ "$VLC_HOST_OS" = "tvos" ]; then
VLC_CONTRIB_OPTIONS+=( "${VLC_CONTRIB_OPTIONS_TVOS[@]}" )
elif [ "$VLC_HOST_OS" = "xros" ]; then
VLC_CONTRIB_OPTIONS+=( "${VLC_CONTRIB_OPTIONS_XROS[@]}" )
elif [ "$VLC_HOST_OS" = "watchos" ]; then
VLC_CONTRIB_OPTIONS=( "${VLC_CONTRIB_OPTIONS_WATCHOS[@]}" )
fi
# Create dir to build contribs in
......@@ -743,6 +756,8 @@ elif [ "$VLC_HOST_OS" = "tvos" ]; then
VLC_CONFIG_OPTIONS+=( "${VLC_CONFIG_OPTIONS_TVOS[@]}" )
elif [ "$VLC_HOST_OS" = "xros" ]; then
VLC_CONFIG_OPTIONS+=( "${VLC_CONFIG_OPTIONS_XROS[@]}" )
elif [ "$VLC_HOST_OS" = "watchos" ]; then
VLC_CONFIG_OPTIONS+=( "${VLC_CONFIG_OPTIONS_WATCHOS[@]}" )
fi
if [ "$VLC_DISABLE_DEBUG" -gt "0" ]; then
......@@ -814,6 +829,8 @@ elif [ "$VLC_HOST_OS" = "tvos" ]; then
VLC_MODULE_REMOVAL_LIST+=( "${VLC_MODULE_REMOVAL_LIST_TVOS[@]}" )
elif [ "$VLC_HOST_OS" = "xros" ]; then
VLC_MODULE_REMOVAL_LIST+=( "${VLC_MODULE_REMOVAL_LIST_XROS[@]}" )
elif [ "$VLC_HOST_OS" = "watchos" ]; then
VLC_MODULE_REMOVAL_LIST+=( "${VLC_MODULE_REMOVAL_LIST_WATCHOS[@]}" )
fi
for module in "${VLC_MODULE_REMOVAL_LIST[@]}"; do
......
name: VLC
options:
bundleIdPrefix: org.videolan.vlc
supportedDestinations: [iOS, tvOS, visionOS]
supportedDestinations: [iOS, tvOS, visionOS, watchOS]
deploymentTarget:
iOS: 9.0
tvOS: 12.0
visionOS: 1.0
watchOS: 7.4
configs:
Debug: debug
Release: release
......@@ -24,7 +26,7 @@ fileGroups:
targets:
VLCAutomake:
type: ""
supportedDestinations: [iOS, tvOS, visionOS]
supportedDestinations: [iOS, tvOS, visionOS, watchOS]
legacy:
toolPath: ${VLC_SRC_DIR}/extras/package/apple/xcode.sh
passSettings: true
......@@ -60,9 +62,48 @@ targets:
install_name_tool -change "@rpath/libvlccore.dylib" "@rpath/vlccore.framework/vlccore" \
"${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}"
codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" "${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}"
vlccorewatchos:
type: "application"
platform: [watchOS]
dependencies:
- target: VLCAutomake
- target: vlc
- target: vlccore
info:
path: "vlccorewatchos/Info.plist"
properties:
CFBundleIdentifier: org.videolan.vlc.vlccore.watchapp
WKCompanionAppBundleIdentifier: org.videolan.vlc.vlccore
WKRunsIndependentlyOfCompanionApp: true
WKApplication: true
UIBackgroundModes:
- audio
settings:
PRODUCT_BUNDLE_IDENTIFIER: org.videolan.vlc.vlccoreios.watchapp
postBuildScripts:
- script: ${VLC_SRC_DIR}/extras/package/apple/copy_plugins.sh
name: "Copy VLC plugins"
- name: Copy vlccorewatchos binary
shell: /bin/bash
script: |
INPUT_FILES=()
for arch in ${ARCHS}; do
INPUT_FILES+=("${BUILT_PRODUCTS_DIR}/build-${PLATFORM_NAME}-${arch}${BUILD_SUFFIX}/build/test/.libs/vlccorewatchos")
done
lipo -create \
-output "${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}" \
"${INPUT_FILES[@]}"
install_name_tool -change "@rpath/libvlc.dylib" "@rpath/vlc.framework/vlc" \
"${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}"
install_name_tool -change "@rpath/libvlccore.dylib" "@rpath/vlccore.framework/vlccore" \
"${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}"
codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" "${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}"
vlc:
type: "framework"
supportedDestinations: [iOS, tvOS, visionOS]
supportedDestinations: [iOS, tvOS, visionOS, watchOS]
dependencies:
- target: VLCAutomake
info:
......@@ -87,7 +128,7 @@ targets:
vlccore:
type: "framework"
supportedDestinations: [iOS, tvOS, visionOS]
supportedDestinations: [iOS, tvOS, visionOS, watchOS]
dependencies:
- target: VLCAutomake
info:
......
......@@ -128,6 +128,9 @@ endif
if HAVE_XROS
libavsamplebuffer_plugin_la_SOURCES += audio_output/apple/avaudiosession_common.m
endif
if HAVE_WATCHOS
libavsamplebuffer_plugin_la_SOURCES += audio_output/apple/avaudiosession_common.m
endif
libavsamplebuffer_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(aoutdir)' \
-Wl,-framework,CoreMedia,-framework,Foundation,-framework,AVFoundation
libavsamplebuffer_plugin_la_OBJCFLAGS = $(AM_OBJCFLAGS) -fobjc-arc
......@@ -152,3 +155,6 @@ endif
if HAVE_XROS
aout_LTLIBRARIES += libaudiounit_ios_plugin.la libavsamplebuffer_plugin.la
endif
if HAVE_WATCHOS
aout_LTLIBRARIES += libavsamplebuffer_plugin.la
endif
......@@ -58,6 +58,7 @@ avas_PrepareFormat(audio_output_t *p_aout, AVAudioSession *instance,
channel_count = max_channel_count;
}
#if !TARGET_OS_WATCH
NSError *error = nil;
BOOL success = [instance setPreferredOutputNumberOfChannels:channel_count
error:&error];
......@@ -69,10 +70,13 @@ avas_PrepareFormat(audio_output_t *p_aout, AVAudioSession *instance,
!success ? (int)error.code : 0);
channel_count = 2;
}
#else
channel_count = 2;
#endif
if (spatial_audio)
{
if (@available(iOS 15.0, tvOS 15.0 VISIONOS_AVAILABLE, *))
if (@available(iOS 15.0, watchOS 8.0, tvOS 15.0 VISIONOS_AVAILABLE, *))
{
/* Not mandatory, SpatialAudio can work without it. It just signals to
* the user that he is playing spatial content */
......@@ -88,6 +92,7 @@ avas_PrepareFormat(audio_output_t *p_aout, AVAudioSession *instance,
aout_FormatPrepare(fmt);
}
#if !TARGET_OS_WATCH
success = [instance setPreferredSampleRate:fmt->i_rate error:&error];
if (!success)
{
......@@ -95,6 +100,7 @@ avas_PrepareFormat(audio_output_t *p_aout, AVAudioSession *instance,
msg_Dbg(p_aout, "setPreferredSampleRate failed %s(%d)",
error.domain.UTF8String, (int)error.code);
}
#endif
}
int
......@@ -128,21 +134,21 @@ avas_GetPortType(audio_output_t *p_aout, AVAudioSession *instance,
return VLC_SUCCESS;
}
struct API_AVAILABLE(ios(11.0) VISIONOS_API_AVAILABLE)
struct API_AVAILABLE(ios(11.0), watchos(7.0) VISIONOS_API_AVAILABLE)
role2policy
{
char role[sizeof("accessibility")];
AVAudioSessionRouteSharingPolicy policy;
};
static int API_AVAILABLE(ios(11.0) VISIONOS_API_AVAILABLE)
static int API_AVAILABLE(ios(11.0), watchos(7.0) VISIONOS_API_AVAILABLE)
role2policy_cmp(const void *key, const void *val)
{
const struct role2policy *entry = val;
return strcmp(key, entry->role);
}
static AVAudioSessionRouteSharingPolicy API_AVAILABLE(ios(11.0) VISIONOS_API_AVAILABLE)
static AVAudioSessionRouteSharingPolicy API_AVAILABLE(ios(11.0), watchos(7.0) VISIONOS_API_AVAILABLE)
GetRouteSharingPolicy(audio_output_t *p_aout)
{
#if __IPHONEOS_VERSION_MAX_ALLOWED < 130000
......@@ -154,7 +160,7 @@ GetRouteSharingPolicy(audio_output_t *p_aout)
/* LongFormAudio by default */
AVAudioSessionRouteSharingPolicy policy = AVAudioSessionRouteSharingPolicyLongFormAudio;
AVAudioSessionRouteSharingPolicy video_policy;
#if !TARGET_OS_TV
#if TARGET_OS_IOS || TARGET_OS_VISION
if (@available(iOS 13.0 VISIONOS_AVAILABLE, *))
video_policy = AVAudioSessionRouteSharingPolicyLongFormVideo;
else
......@@ -199,7 +205,7 @@ avas_SetActive(audio_output_t *p_aout, AVAudioSession *instance, bool active,
if (active)
{
if (@available(iOS 11.0, tvOS 11.0 VISIONOS_AVAILABLE, *))
if (@available(iOS 11.0, watchOS 7.0, tvOS 11.0 VISIONOS_AVAILABLE, *))
{
AVAudioSessionRouteSharingPolicy policy = GetRouteSharingPolicy(p_aout);
......
......@@ -39,6 +39,7 @@
#define MIN_MACOS 11.3
#define MIN_IOS 14.5
#define MIN_TVOS 14.5
#define MIN_WATCHOS 7.4
// work-around to fix compilation on older Xcode releases
#if defined(TARGET_OS_VISION) && TARGET_OS_VISION
......@@ -438,7 +439,7 @@ customBlock_Free(void *refcon, void *doomedMemoryBlock, size_t sizeInBytes)
selector:@selector(flushedAutomatically:)
name:AVSampleBufferAudioRendererWasFlushedAutomaticallyNotification
object:nil];
if (@available(macOS 12.0, iOS 15.0, tvOS 15.0 VISIONOS_AVAILABLE, *))
if (@available(macOS 12.0, iOS 15.0, tvOS 15.0, watchOS 8.0 VISIONOS_AVAILABLE, *))
{
[notifCenter addObserver:self
selector:@selector(outputConfigurationChanged:)
......@@ -459,7 +460,7 @@ error_avas:
@end
static int API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS) VISIONOS_API_AVAILABLE)
static int API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS), watchos(MIN_WATCHOS) VISIONOS_API_AVAILABLE)
DeviceSelect(audio_output_t *aout, const char *name)
{
VLCAVSample *sys = (__bridge VLCAVSample*)aout->sys;
......@@ -469,7 +470,7 @@ DeviceSelect(audio_output_t *aout, const char *name)
return VLC_SUCCESS;
}
static int API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS) VISIONOS_API_AVAILABLE)
static int API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS), watchos(MIN_WATCHOS) VISIONOS_API_AVAILABLE)
MuteSet(audio_output_t *aout, bool mute)
{
VLCAVSample *sys = (__bridge VLCAVSample*)aout->sys;
......@@ -479,7 +480,7 @@ MuteSet(audio_output_t *aout, bool mute)
return VLC_SUCCESS;
}
static int API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS) VISIONOS_API_AVAILABLE)
static int API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS), watchos(MIN_WATCHOS) VISIONOS_API_AVAILABLE)
VolumeSet(audio_output_t *aout, float volume)
{
VLCAVSample *sys = (__bridge VLCAVSample*)aout->sys;
......@@ -489,7 +490,7 @@ VolumeSet(audio_output_t *aout, float volume)
return VLC_SUCCESS;
}
static void API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS) VISIONOS_API_AVAILABLE)
static void API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS), watchos(MIN_WATCHOS) VISIONOS_API_AVAILABLE)
Flush(audio_output_t *aout)
{
VLCAVSample *sys = (__bridge VLCAVSample*)aout->sys;
......@@ -497,7 +498,7 @@ Flush(audio_output_t *aout)
[sys flush];
}
static void API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS) VISIONOS_API_AVAILABLE)
static void API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS), watchos(MIN_WATCHOS) VISIONOS_API_AVAILABLE)
Pause(audio_output_t *aout, bool pause, vlc_tick_t date)
{
VLCAVSample *sys = (__bridge VLCAVSample*)aout->sys;
......@@ -505,7 +506,7 @@ Pause(audio_output_t *aout, bool pause, vlc_tick_t date)
[sys pause:pause date:date];
}
static void API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS) VISIONOS_API_AVAILABLE)
static void API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS), watchos(MIN_WATCHOS) VISIONOS_API_AVAILABLE)
Play(audio_output_t *aout, block_t *block, vlc_tick_t date)
{
VLCAVSample *sys = (__bridge VLCAVSample*)aout->sys;
......@@ -513,7 +514,7 @@ Play(audio_output_t *aout, block_t *block, vlc_tick_t date)
[sys play:block date:date];
}
static void API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS) VISIONOS_API_AVAILABLE)
static void API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS), watchos(MIN_WATCHOS) VISIONOS_API_AVAILABLE)
Stop(audio_output_t *aout)
{
VLCAVSample *sys = (__bridge VLCAVSample*)aout->sys;
......@@ -521,7 +522,7 @@ Stop(audio_output_t *aout)
[sys stop];
}
static int API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS) VISIONOS_API_AVAILABLE)
static int API_AVAILABLE(macos(MIN_MACOS), ios(MIN_IOS), tvos(MIN_TVOS), watchos(MIN_WATCHOS) VISIONOS_API_AVAILABLE)
Start(audio_output_t *aout, audio_sample_format_t *restrict fmt)
{
VLCAVSample *sys = (__bridge VLCAVSample*)aout->sys;
......@@ -532,7 +533,7 @@ Start(audio_output_t *aout, audio_sample_format_t *restrict fmt)
static void
Close(vlc_object_t *obj)
{
if (@available(macOS MIN_MACOS, iOS MIN_IOS, tvOS MIN_TVOS VISIONOS_AVAILABLE, *))
if (@available(macOS MIN_MACOS, iOS MIN_IOS, tvOS MIN_TVOS, watchOS MIN_WATCHOS VISIONOS_AVAILABLE, *))
{
audio_output_t *aout = (audio_output_t *)obj;
/* Transfer ownership back from VLC to ARC so that it can be released. */
......@@ -546,7 +547,7 @@ Open(vlc_object_t *obj)
{
audio_output_t *aout = (audio_output_t *)obj;
if (@available(macOS MIN_MACOS, iOS MIN_IOS, tvOS MIN_TVOS VISIONOS_AVAILABLE, *))
if (@available(macOS MIN_MACOS, iOS MIN_IOS, tvOS MIN_TVOS, watchOS MIN_WATCHOS VISIONOS_AVAILABLE, *))
{
aout->sys = (__bridge_retained void*) [[VLCAVSample alloc] init:aout];
if (aout->sys == nil)
......
......@@ -64,8 +64,10 @@ endif
libaudiotoolboxmidi_plugin_la_SOURCES = codec/audiotoolbox_midi.c
libaudiotoolboxmidi_plugin_la_LDFLAGS = $(AM_LDFLAGS) -Wl,-framework,CoreFoundation,-framework,AudioToolbox
if HAVE_DARWIN
if !HAVE_WATCHOS
codec_LTLIBRARIES += libaudiotoolboxmidi_plugin.la
endif
endif
liblpcm_plugin_la_SOURCES = codec/lpcm.c
codec_LTLIBRARIES += liblpcm_plugin.la
......@@ -364,8 +366,10 @@ libvideotoolbox_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) # Trigger MODULE_NAME declar
libvideotoolbox_plugin_la_LIBADD = libchroma_copy.la libvlc_hxxxhelper.la libvlc_vtutils.la
libvideotoolbox_plugin_la_LDFLAGS = $(AM_LDFLAGS) -Wl,-framework,CoreFoundation -Wl,-framework,VideoToolbox -Wl,-framework,CoreMedia -Wl,-framework,CoreVideo -Wl,-framework,Metal
if HAVE_DARWIN
if !HAVE_WATCHOS
codec_LTLIBRARIES += libvideotoolbox_plugin.la
endif
endif
videotoolbox_dpb_test_SOURCES = codec/videotoolbox/dpb_test.c \
codec/videotoolbox/dpb.c \
......
......@@ -92,8 +92,10 @@ libbonjour_plugin_la_SOURCES = services_discovery/bonjour.m
libbonjour_plugin_la_OBJCFLAGS = $(AM_OBJCFLAGS) -fobjc-arc
libbonjour_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(sddir)' -Wl,-framework,Foundation
if HAVE_DARWIN
if !HAVE_WATCHOS
sd_LTLIBRARIES += libbonjour_plugin.la
endif
endif
libudisks_plugin_la_SOURCES = services_discovery/udisks.c
libudisks_plugin_la_CFLAGS = $(AM_CFLAGS) $(SDBUS_CFLAGS)
......
......@@ -84,8 +84,10 @@ libcvpx_plugin_la_SOURCES = codec/vt_utils.c codec/vt_utils.h video_chroma/cvpx.
libcvpx_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(chromadir)' -Wl,-framework,Foundation -Wl,-framework,VideoToolbox -Wl,-framework,CoreMedia -Wl,-framework,CoreVideo
libcvpx_plugin_la_LIBADD = libchroma_copy.la
if HAVE_DARWIN
if !HAVE_WATCHOS
chroma_LTLIBRARIES += libcvpx_plugin.la
endif
endif
libgst_mem_plugin_la_SOURCES = video_chroma/gst_mem.c \
codec/gstreamer/gstcopypicture.c codec/gstreamer/gstcopypicture.h codec/gstreamer/gst_mem.h
......
......@@ -57,9 +57,11 @@ librotate_plugin_la_LIBADD = libvlc_motion.la $(LIBM)
librotate_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(video_filterdir)'
if HAVE_DARWIN
if !HAVE_TVOS
if !HAVE_WATCHOS
librotate_plugin_la_LDFLAGS += -Wl,-framework,IOKit,-framework,CoreFoundation
endif
endif
endif
libscale_plugin_la_SOURCES = video_filter/scale.c
libscene_plugin_la_SOURCES = video_filter/scene.c
libscene_plugin_la_LIBADD = $(LIBM)
......
......@@ -74,6 +74,7 @@ vout_LTLIBRARIES += libvout_macosx_plugin.la libcaopengllayer_plugin.la libwindo
endif
if HAVE_DARWIN
if !HAVE_WATCHOS
libsamplebufferdisplay_plugin_la_SOURCES = video_output/apple/VLCSampleBufferDisplay.m codec/vt_utils.c codec/vt_utils.h
libsamplebufferdisplay_plugin_la_OBJCFLAGS = $(AM_OBJCFLAGS) -fobjc-arc
if HAVE_OSX
......@@ -85,6 +86,7 @@ libsamplebufferdisplay_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(voutdir)' \
endif
vout_LTLIBRARIES += libsamplebufferdisplay_plugin.la
endif
endif
libvout_ios_plugin_la_SOURCES = video_output/opengl/display.c $(OPENGL_VOUT_COMMONSOURCES)
libvout_ios_plugin_la_CFLAGS = $(AM_CFLAGS) $(OPENGL_COMMONCFLAGS) -DUSE_OPENGL_ES2
......
......@@ -31,7 +31,9 @@
#import <TargetConditionals.h>
#if TARGET_OS_IPHONE
#if !TARGET_OS_WATCH
#include <CFNetwork/CFProxySupport.h>
#endif
#else
#include <CoreServices/CoreServices.h>
#endif
......
......@@ -453,6 +453,16 @@ if HAVE_XROS
noinst_PROGRAMS += vlccoreios
endif
vlccorewatchos_SOURCES = watchosvlc.m
vlccorewatchos_LDFLAGS = $(LDFLAGS_vlc) -Wl,-framework,WatchKit
vlccorewatchos_LDFLAGS += -Xlinker -rpath -Xlinker "@executable_path/Frameworks/"
vlccorewatchos_OBJCFLAGS = -fobjc-arc
vlccorewatchos_LDADD = ../lib/libvlc.la ../src/libvlccore.la
if HAVE_WATCHOS
noinst_PROGRAMS += vlccorewatchos
endif
vlc_window_SOURCES = vlc-window.c
vlc_window_CPPFLAGS = $(AM_CPPFLAGS) -I../include/
vlc_window_LDADD = ../lib/libvlc.la ../src/libvlccore.la ../compat/libcompat.la
......
/*****************************************************************************
* iosvlc.m: watchOS specific development main executable for VLC media player
*****************************************************************************
* Copyright (C) 2020, 2024 Videolabs
*
* Authors: Marvin Scholz <epirat07 at gmail dot com>
* Alexandre Janniaux <ajanni@videolabs.io>
* Felix Paul Kühne <fkuehne@videolabs.io>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#undef VLC_DYNAMIC_PLUGINS
#define MODULE_NAME ios_interface
#undef VLC_DYNAMIC_PLUGINS
#include <vlc/vlc.h>
#include <vlc_common.h>
#include <vlc_variables.h>
#include <vlc_plugin.h>
#include "../lib/libvlc_internal.h"
#import <WatchKit/WatchKit.h>
@interface InterfaceController : WKInterfaceController
@end
@implementation InterfaceController
- (void)awakeWithContext:(id)context {
[super awakeWithContext:context];
}
- (void)willActivate {
[super willActivate];
}
- (void)didDeactivate {
[super didDeactivate];
}
@end
@interface AppDelegate : NSObject <WKApplicationDelegate> {
@public
libvlc_instance_t *_libvlc;
}
@end
@implementation AppDelegate
/* Called after application launch */
- (void)applicationDidFinishLaunching {
/* Store startup arguments to forward them to libvlc */
NSArray *arguments = [[NSProcessInfo processInfo] arguments];
unsigned vlc_argc = [arguments count] - 1;
const char **vlc_argv = malloc(vlc_argc * sizeof *vlc_argv);
if (vlc_argv == NULL)
return;
for (unsigned i = 0; i < vlc_argc; i++)
vlc_argv[i] = [[arguments objectAtIndex:i + 1] UTF8String];
/* Initialize libVLC */
_libvlc = libvlc_new(vlc_argc, (const char * const*)vlc_argv);
free(vlc_argv);
if (_libvlc == NULL)
return;
/* Start glue interface, see code below */
libvlc_InternalAddIntf(_libvlc->p_libvlc_int, "ios_interface,none");
/* Start parsing arguments and eventual playback */
libvlc_InternalPlay(_libvlc->p_libvlc_int);
}
- (Class)applicationRootInterfaceControllerClass {
return [InterfaceController class];
}
@end
int main(int argc, char * argv[]) {
@autoreleasepool {
return WKApplicationMain(argc, argv, NSStringFromClass([AppDelegate class]));
}
}
/* Glue interface code */
static int Open(vlc_object_t *obj)
{
return VLC_SUCCESS;
}
#include <vlc_stream.h>
#include <vlc_access.h>
static int OpenAssetDemux(vlc_object_t *obj)
{
stream_t *access = (stream_t *)obj;
if (access->psz_location == NULL)
return VLC_EGENERIC;
/* Store startup arguments to forward them to libvlc */
NSString *bundle_path = [[NSBundle mainBundle] resourcePath];
const char *resource_path = [bundle_path UTF8String];
size_t resource_path_length = strlen(resource_path);
char *url;
if (asprintf(&url, "file://%s/%s", resource_path, access->psz_location) < 0)
return VLC_ENOMEM;
access->psz_url = url;
return VLC_ACCESS_REDIRECT;
}
vlc_module_begin()
set_capability("interface", 0)
set_callback(Open)
add_submodule()
set_capability("access", 1)
set_callback(OpenAssetDemux)
add_shortcut("asset")
vlc_module_end()
VLC_EXPORT const vlc_plugin_cb vlc_static_modules[] = {
VLC_SYMBOL(vlc_entry),
NULL
};