You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

568 lines
14 KiB

#
# File access modules
#
# Data URL-scheme access
vlc_modules += {
'name' : 'data',
'sources' : files('data.c')
}
decklink_dep = disabler()
decklink_dependencies = []
decklink_cpp_args = []
if get_option('decklink').allowed()
if host_system == 'windows'
decklink_cpp_args += libcom_cppflags
endif
if have_osx
decklink_dependencies += corefoundation_dep
endif
# TODO allow providing a custom location for the DeckLink SDK
if contrib_dir != ''
decklink_dep = declare_dependency(
link_args: '-L' + contrib_libdir,
compile_args: [f'-I@contrib_incdir@/decklink'],
dependencies: decklink_dependencies)
if not cpp.check_header('DeckLinkAPI.h', dependencies: [ decklink_dep ])
decklink_dep = disabler()
endif
endif
vlc_modules += {
'name' : 'decklink',
'sources' : files('decklink.cpp', 'sdi.c', 'sdi.h', 'vlc_decklink.h'),
'dependencies' : [dl_lib, decklink_dep],
'cpp_args' : decklink_cpp_args,
'enabled' : decklink_dep.found(),
}
endif
# Filesystem access module
vlc_modules += {
'name' : 'filesystem',
'sources' : files('file.c', 'directory.c', 'fs.c'),
}
# Dummy access module
vlc_modules += {
'name' : 'idummy',
'sources' : files('idummy.c')
}
# In-memory bitstream input module
vlc_modules += {
'name' : 'imem',
'sources' : files('imem-access.c'),
'dependencies' : [m_lib]
}
# Memory input module
vlc_modules += {
'name' : 'access_imem',
'sources' : files('imem.c'),
'shortname' : 'a_imem',
}
# Fake sdp:// scheme input module
vlc_modules += {
'name' : 'sdp',
'sources' : files('sdp.c')
}
# Timecode sub-picture generator module
vlc_modules += {
'name' : 'timecode',
'sources' : files('timecode.c')
}
# VDR recordings access module
vlc_modules += {
'name' : 'vdr',
'sources' : files('vdr.c')
}
## Audio capture
# Alsa capture access
if alsa_dep.found()
vlc_modules += {
'name' : 'access_alsa',
'sources' : files('alsa.c'),
'dependencies' : [alsa_dep]
}
endif
# OSS access
if get_option('oss').disable_auto_if(
host_system not in ['freebsd', 'netbsd', 'dragonfly']).allowed()
# TODO: Actually add the OSS module
endif
# JACK input module
vlc_modules += {
'name' : 'access_jack',
'sources' : files('jack.c'),
'dependencies' : [jack_dep],
'enabled' : jack_dep.found(),
}
# PipeWire module
vlc_modules += {
'name' : 'pipewiresrc',
'sources' : files('pipewire.c'),
'dependencies' : [pipewire_dep],
'link_with' : [libvlc_pipewire],
'enabled' : pipewire_dep.found(),
}
# Pulseaudio module
vlc_modules += {
'name' : 'pulsesrc',
'sources' : files('pulse.c'),
'dependencies' : [pulse_dep],
'link_with' : [libvlc_pulse],
'enabled' : pulse_dep.found(),
}
# AVFoundation audio capture access
vlc_modules += {
'name' : 'avaudiocapture',
'sources' : files('avaudiocapture.m'),
'objc_args' : ['-fobjc-arc'],
'dependencies' : [
frameworks['Foundation'],
frameworks['AVFoundation'],
frameworks['CoreMedia'],
],
'enabled' : have_osx,
}
# WASAPI access
vlc_modules += {
'name' : 'access_wasapi',
'sources' : files('wasapi.c'),
'dependencies' : [ksuser_lib],
'enabled' : get_option('wasapi')
.require(host_system == 'windows', error_message: 'WASAPI requires Windows')
.disable_auto_if(have_win_store)
.allowed() and ksuser_lib.found()
}
## Video capture
# macOS AVFoundation-based video capture
if (get_option('macosx_avfoundation')
.require(have_osx and host_system == 'darwin', error_message: 'AVCapture requires macOS')
.allowed())
vlc_modules += {
'name' : 'avcapture',
'sources' : files('avcapture.m'),
'objc_args' : ['-fobjc-arc'],
'dependencies' : [
frameworks['Foundation'],
frameworks['AVFoundation'],
frameworks['CoreMedia'],
frameworks['CoreVideo'],
],
}
endif
# IIDC FireWire input
libdc1394_dep = dependency('libdc1394-2', version: '>= 2.1.0', required: get_option('dc1394'))
if libdc1394_dep.found()
vlc_modules += {
'name' : 'dc1394',
'sources' : files('dc1394.c'),
'dependencies' : [libdc1394_dep]
}
endif
# DV FireWire input
libraw1394_dep = dependency('libraw1394', version: '>= 2.0.1', required: get_option('dv1394'))
libavc1394_dep = dependency('libavc1394', version: '>= 0.5.3', required: get_option('dv1394'))
if libraw1394_dep.found() and libavc1394_dep.found()
vlc_modules += {
'name' : 'dv1394',
'sources' : files('dv.c'),
'dependencies' : [libraw1394_dep, libavc1394_dep, threads_dep],
}
endif
# Linsys
if (get_option('linsys')
.require(host_system == 'linux', error_message: 'Linsys requires Linux')
.allowed())
vlc_modules += {
'name' : 'linsys_hdsdi',
'sources' : files('linsys/linsys_hdsdi.c'),
'dependencies' : [threads_dep]
}
if zvbi_dep.found()
vlc_modules += {
'name' : 'linsys_sdi',
'sources' : files('linsys/linsys_sdi.c'),
'dependencies' : [zvbi_dep]
}
endif
endif
live555_dep = dependency('live555', version: '>= 2011.12.23', required: get_option('live555'))
# TODO support without pkg-config
vlc_modules += {
'name' : 'live555',
'sources' : files('live555.cpp', 'live555_dtsgen.h',
'mms/asf.c', 'mms/asf.h',
'mms/buffer.c', 'mms/buffer.h',
'../codec/opus_header.c', '../codec/opus_header.h'),
'dependencies' : [live555_dep, socket_libs],
'enabled' : live555_dep.found(),
}
# Shared memory frame buffer capture
vlc_modules += {
'name' : 'shm',
'sources' : files('shm.c'),
'dependencies' : [m_lib]
}
## Screen grab plugins
subdir('screen')
# RDP/Remote Client Desktop capture
freerdp_dep = dependency('freerdp2', required: get_option('freerdp'))
if freerdp_dep.found()
vlc_modules += {
'name' : 'rdp',
'sources' : files('rdp.c'),
'dependencies' : [freerdp_dep]
}
endif
# VNC capture
vncclient_dep = dependency('libvncclient', required: get_option('vnc'))
if vncclient_dep.found()
vlc_modules += {
'name' : 'vnc',
'sources' : files('vnc.c'),
'dependencies' : [vncclient_dep]
}
endif
## Optical media
#
# VCD and CD-DA access module
if get_option('vcd_module')
vcd_cdda_flags = []
if cc.has_header_symbol('linux/cdrom.h', 'struct cdrom_msf0')
needed_vcd_unix_headers_present = true
elif cc.has_header_symbol('sys/scsiio.h', 'struct scsireq')
needed_vcd_unix_headers_present = true
vcd_cdda_flags += '-DHAVE_SCSIREQ_IN_SYS_SCSIIO_H'
elif cc.has_header_symbol('sys/cdio.h', 'struct ioc_toc_header')
needed_vcd_unix_headers_present = true
vcd_cdda_flags += '-DHAVE_IOC_TOC_HEADER_IN_SYS_CDIO_H'
else
needed_vcd_unix_headers_present = false
endif
if (needed_vcd_unix_headers_present or
host_system in ['windows', 'os/2'] or have_osx)
vcd_cdda_darwin_deps = []
if host_system == 'darwin'
vcd_cdda_darwin_deps = [iokit_dep, corefoundation_dep]
endif
vlc_modules += {
'name' : 'cdda',
'sources' : files(
'cdda.c',
'vcd/cdrom.c',
'../misc/webservices/musicbrainz.c',
),
'c_args' : vcd_cdda_flags,
'link_with' : vlc_json_lib,
'dependencies' : [vcd_cdda_darwin_deps, gcrypt_dep]
}
vlc_modules += {
'name' : 'vcd',
'sources' : files(
'vcd/vcd.c',
'vcd/cdrom.c',
),
'c_args' : vcd_cdda_flags,
'dependencies' : [vcd_cdda_darwin_deps]
}
endif
endif
# DVD with navigation (dvdnav) access
dvdnav_dep = dependency('dvdnav', version: '>= 6.0.0', required: get_option('dvdnav'))
if dvdnav_dep.found()
vlc_modules += {
'name' : 'dvdnav',
'sources' : files('dvdnav.c'),
'dependencies' : [
dvdnav_dep,
(host_system == 'darwin') ? [corefoundation_dep, iokit_dep] : []
]
}
endif
# DVD access
dvdread_dep = dependency('dvdread', version: '>= 6.0.0', required: get_option('dvdread'))
if dvdread_dep.found()
vlc_modules += {
'name' : 'dvdread',
'sources' : files('dvdread.c'),
'dependencies' : [
dvdread_dep,
(host_system == 'darwin') ? [corefoundation_dep, iokit_dep] : []
]
}
endif
# Blu-ray access
libbluray_dep = dependency('libbluray', version: '>= 1.1.0', required: get_option('bluray'))
if libbluray_dep.found()
vlc_modules += {
'name' : 'libbluray',
'sources' : files('bluray.c'),
'dependencies' : [libbluray_dep]
}
endif
## Digital TV
# DTV access
dtv_common_sources = files('dtv/access.c')
if host_system == 'linux'
has_linux_dvb_5_1 = cc.compiles(
'''
#include <linux/dvb/version.h>
#if (DVB_API_VERSION < 5)
# error Linux DVB API v3.2 and older are not supported.
#endif
#if (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR < 1)
# error Linux DVB API v5.0 is unsupported. Please update.
#endif
'''
)
if (has_linux_dvb_5_1)
message('Has Linux DVB 5.1 or higher: YES')
vlc_modules += {
'name' : 'dtv',
'sources' : [
dtv_common_sources,
files('dtv/linux.c', 'dtv/en50221.c')
],
'c_args' : ['-DHAVE_LINUX_DVB']
}
else
message('Has Linux DVB 5.1 or higher: NO')
endif
endif
if host_system == 'windows' and have_win_desktop
strmiids_lib = cc.find_library('strmiids', required: true)
vlc_modules += {
'name' : 'dtv',
'sources' : [
dtv_common_sources,
files('dtv/bdagraph.cpp')
],
'dependencies' : [strmiids_lib],
'cpp_args' : libcom_cppflags
}
vlc_modules += {
'name' : 'dshow',
'sources' : files(
'dshow/dshow.cpp',
'dshow/filter.cpp',
'dshow/crossbar.cpp',
),
'dependencies' : [ksuser_lib, strmiids_lib],
'cpp_args' : libcom_cppflags,
'enabled' : ksuser_lib.found() and have_win_desktop
}
endif
# vlc_access_cache helper lib
vlc_access_cache_lib = static_library(
'vlc_access_cache',
files('cache.c',),
include_directories: [vlc_include_dirs],
pic: true,
install: false
)
## Network stream access modules
# Smb v1
libdsm_dep = dependency('libdsm', version: '>= 0.2.0', required: get_option('dsm'))
vlc_modules += {
'name' : 'dsm',
'sources' : files('dsm/access.c', 'dsm/sd.c', 'smb_common.h'),
'dependencies' : [libdsm_dep],
'link_with' : [vlc_access_cache_lib],
'enabled' : libdsm_dep.found(),
}
# FTP
vlc_modules += {
'name' : 'ftp',
'sources' : files('ftp.c'),
'dependencies' : [socket_libs]
}
# SFTP
libssh2_dep = dependency('libssh2', required: get_option('libssh2'))
vlc_modules += {
'name' : 'sftp',
'sources' : files('sftp.c'),
'dependencies' : [libssh2_dep],
'enabled': libssh2_dep.found() and get_option('sftp').allowed(),
}
# Gopher
vlc_modules += {
'name' : 'gopher',
'sources' : files('gopher.c'),
'dependencies' : [socket_libs]
}
# Old HTTP
vlc_modules += {
'name' : 'http',
'sources' : files('http.c'),
'dependencies' : [socket_libs]
}
# New HTTP(S)
subdir('http')
# Network file sharing
nfs_dep = dependency('libnfs', version: '>= 1.10.0', required: get_option('nfs'))
vlc_modules += {
'name' : 'nfs',
'sources' : files('nfs.c'),
'dependencies' : [nfs_dep, socket_libs],
'enabled' : nfs_dep.found(),
}
# TCP
vlc_modules += {
'name' : 'tcp',
'sources' : files('tcp.c'),
'dependencies' : [socket_libs]
}
# UDP
vlc_modules += {
'name' : 'udp',
'sources' : files('udp.c'),
'dependencies' : [socket_libs]
}
# AMT
vlc_modules += {
'name' : 'amt',
'sources' : files('amt.c'),
'dependencies' : [socket_libs]
}
# Windows UNC
if host_system == 'windows' and not have_win_store
mpr_lib = cc.find_library('mpr', required: true)
netapi32_lib = cc.find_library('netapi32', required: true)
vlc_modules += {
'name' : 'unc',
'sources' : files('unc.c'),
'dependencies' : [mpr_lib, netapi32_lib]
}
endif
# AVIO access module
if avformat_dep.found()
vlc_modules += {
'name' : 'avio',
'sources' : files('avio.c'),
'dependencies' : [avutil_dep, avformat_dep, m_lib],
'link_args' : symbolic_linkargs,
'enabled' : not get_option('merge-ffmpeg')
}
endif
# SAT>IP
vlc_modules += {
'name' : 'satip',
'sources' : files('satip.c'),
'dependencies' : [socket_libs, threads_dep]
}
# MMS
vlc_modules += {
'name' : 'access_mms',
'sources' : files(
'mms/mms.c',
'mms/mmsh.c',
'mms/mmstu.c',
'mms/buffer.c',
'mms/asf.c',
),
'dependencies' : [socket_libs],
'shortname' : 'a_mms',
}
## Misc
vlc_modules += {
'name' : 'access_concat',
'sources' : files('concat.c'),
'shortname' : 'a_concat',
}
# Media Transfer Protocol (MTP)
if mtp_dep.found()
vlc_modules += {
'name' : 'access_mtp',
'sources' : files('mtp.c'),
'dependencies' : [mtp_dep],
'shortname' : 'a_mtp',
}
endif
# SRT
if srt_dep.found()
vlc_modules += {
'name' : 'access_srt',
'sources' : files('srt.c', 'srt_common.c'),
'dependencies' : [srt_dep],
'shortname' : 'a_srt',
}
endif
# RIST
if librist_dep.found()
vlc_modules += {
'name' : 'rist',
'sources' : files('rist.c'),
'dependencies' : [socket_libs, librist_dep]
}
endif
# RTP
subdir('rtp')