--enable-vda enable VDA code
--enable-vdpau enable VDPAU code
+Hardware-accelerated decoding/encoding:
+ --enable-cuda enable dynamically linked CUDA [no]
+ --enable-libmfx enable HW acceleration through libmfx
+ --enable-mmal enable decoding via MMAL [no]
+ --enable-nvenc enable encoding via NVENC [no]
+ --enable-omx enable encoding via OpenMAX IL [no]
+ --enable-omx-rpi enable encoding via OpenMAX IL for Raspberry Pi [no]
+
Individual component options:
--disable-everything disable all components listed below
--disable-encoder=NAME disable encoder NAME
--enable-libgsm enable GSM de/encoding via libgsm [no]
--enable-libilbc enable iLBC de/encoding via libilbc [no]
--enable-libkvazaar enable HEVC encoding via libkvazaar [no]
- --enable-libmfx enable HW acceleration through libmfx
--enable-libmp3lame enable MP3 encoding via libmp3lame [no]
+ --enable-libnpp enable NVIDIA Performance Primitives-based code [no]
--enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
--enable-libopencv enable video filtering via libopencv [no]
--enable-libxcb-xfixes enable X11 grabbing mouse rendering [auto]
--enable-libxvid enable Xvid encoding via xvidcore,
native MPEG-4/Xvid encoder exists [no]
- --enable-mmal enable decoding via MMAL [no]
- --enable-nvenc enable encoding via NVENC [no]
--enable-openssl enable openssl [no]
--enable-x11grab enable X11 grabbing (legacy) [no]
--enable-zlib enable zlib [autodetect]
--ar=AR use archive tool AR [$ar_default]
--as=AS use assembler AS [$as_default]
--cc=CC use C compiler CC [$cc_default]
+ --objcc=OCC use ObjC compiler OCC [$cc_default]
--dep-cc=DEPCC use dependency generator DEPCC [$cc_default]
--ld=LD use linker LD
--pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default]
--host-libs=HLIBS use libs HLIBS when linking for host
--host-os=OS compiler host OS [$target_os]
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
+ --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS]
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
--extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
--extra-libs=ELIBS add ELIBS [$ELIBS]
log_file(){
log BEGIN $1
- pr -n -t $1 >> $logfile
+ i=1
+ while read line; do
+ printf '%5s %s\n' "${i}" "${line}"
+ i=$(($i+1))
+ done < $1 >> $logfile
log END $1
}
suf=$1
shift
for v; do
- enabled $v && printf "%s\n" ${v%$suf};
+ enabled $v && printf "%s\n" ${v%$suf}
done
}
append ASFLAGS $($asflags_filter "$@")
}
+add_objcflags(){
+ append OBJCFLAGS $($objcflags_filter "$@")
+}
+
add_ldflags(){
append LDFLAGS $($ldflags_filter "$@")
}
check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
}
+check_objcc(){
+ log check_objcc "$@"
+ cat > $TMPC
+ log_file $TMPC
+ check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
+}
+
check_cpp(){
log check_cpp "$@"
cat > $TMPC
test_cflags "$@" && add_cflags "$@"
}
+test_objcflags(){
+ log test_cflags "$@"
+ set -- $($cflags_filter "$@")
+ check_objcc "$@" <<EOF
+int x;
+EOF
+}
+
+check_objcflags(){
+ log check_cflags "$@"
+ test_objcflags "$@" && add_objcflags "$@"
+}
+
test_ldflags(){
log test_ldflags "$@"
check_ld "$@" <<EOF
libgsm
libilbc
libkvazaar
- libmfx
libmp3lame
+ libnpp
libopencore_amrnb
libopencore_amrwb
libopencv
libxcb_shm
libxcb_xfixes
libxvid
- mmal
- nvenc
openssl
x11grab
zlib
FEATURE_LIST="
gray
hardcoded_tables
+ omx_rpi
runtime_cpudetect
safe_bitstream_reader
shared
swscale_alpha
"
+HW_CODECS_LIST="
+ cuda
+ libmfx
+ mmal
+ nvenc
+ omx
+"
+
HWACCEL_LIST="
d3d11va
dxva2
$EXAMPLE_LIST
$EXTERNAL_LIBRARY_LIST
$FEATURE_LIST
+ $HW_CODECS_LIST
$HWACCEL_LIST
$LICENSE_LIST
$LIBRARY_LIST
MemoryBarrier
mm_empty
rdtsc
+ sem_timedwait
sync_val_compare_and_swap
"
HAVE_LIST_CMDLINE="
"
HEADERS_LIST="
+ AVFoundation_AVFoundation_h
alsa_asoundlib_h
altivec_h
arpa_inet_h
cdio_paranoia_h
cdio_paranoia_paranoia_h
+ dispatch_dispatch_h
dev_bktr_ioctl_bt848_h
dev_bktr_ioctl_meteor_h
dev_ic_bt8xx_h
sdl
section_data_rel_ro
threads
+ vaapi_drm
vaapi_x11
vdpau_x11
xlib
blockdsp
bswapdsp
cabac
+ dirac_parse
dvprofile
faandct
faanidct
iirfilter
imdct15
intrax8
+ iso_media
ividsp
jpegtables
libx262
rv34dsp
sinewin
snappy
+ srtp
startcode
texturedsp
texturedspenc
tpeldsp
+ vaapi_encode
+ vc1dsp
videodsp
vp3dsp
vp56dsp
as
build_suffix
cc
+ objcc
cpu
cross_prefix
custom_allocator
CMDLINE_APPEND="
extra_cflags
+ extra_objcflags
host_cppflags
"
# subsystems
dct_select="rdft"
+dirac_parse_select="golomb"
error_resilience_select="me_cmp"
faandct_deps="faan fdctdsp"
faanidct_deps="faan idctdsp"
-intrax8_select="error_resilience"
+h264dsp_select="startcode"
+intrax8_select="blockdsp idctdsp"
mdct_select="fft"
rdft_select="fft"
me_cmp_select="fdctdsp idctdsp pixblockdsp"
mpeg_er_select="error_resilience"
mpegaudio_select="mpegaudiodsp"
mpegaudiodsp_select="dct"
-mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp videodsp"
+mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
-nvenc_deps_any="dlopen LoadLibrary"
-nvenc_extralibs='$ldl'
-qsvdec_select="qsv"
-qsvenc_select="qsv"
+vc1dsp_select="h264chroma qpeldsp startcode"
# decoders / encoders
aac_decoder_select="imdct15 mdct sinewin"
eac3_encoder_select="ac3_encoder"
eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
eatgq_decoder_select="aandcttables idctdsp"
-eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder"
+eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
exr_decoder_deps="zlib"
ffv1_decoder_select="golomb rangecoder"
ffv1_encoder_select="rangecoder"
h263_encoder_select="aandcttables h263dsp mpegvideoenc"
h263i_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder"
-h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel startcode videodsp"
+h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel videodsp"
h264_decoder_suggest="error_resilience"
-h264_nvenc_encoder_deps="nvenc"
-h264_qsv_decoder_deps="libmfx"
-h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
-h264_qsv_encoder_deps="libmfx"
-h264_qsv_encoder_select="qsvenc"
hap_decoder_select="snappy texturedsp"
hap_encoder_deps="libsnappy"
hap_encoder_select="texturedspenc"
hevc_decoder_select="bswapdsp cabac golomb videodsp"
-hevc_nvenc_encoder_deps="nvenc"
-hevc_qsv_encoder_deps="libmfx"
-hevc_qsv_decoder_deps="libmfx"
-hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec hevc_qsv_hwaccel"
-hevc_qsv_encoder_select="qsvenc"
huffyuv_decoder_select="bswapdsp huffyuvdsp"
huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
iac_decoder_select="imc_decoder"
mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
mjpegb_decoder_select="mjpeg_decoder"
+mjpeg_vaapi_encoder_deps="VAEncPictureParameterBufferJPEG"
+mjpeg_vaapi_encoder_select="vaapi_encode jpegtables"
mlp_decoder_select="mlp_parser"
motionpixels_decoder_select="bswapdsp"
mp1_decoder_select="mpegaudio"
mpeg1video_encoder_select="aandcttables mpegvideoenc"
mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
mpeg2video_encoder_select="aandcttables mpegvideoenc"
-mpeg2_qsv_decoder_deps="libmfx"
-mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
-mpeg2_qsv_encoder_deps="libmfx"
-mpeg2_qsv_encoder_select="qsvenc"
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
mpeg4_encoder_select="h263_encoder"
msa1_decoder_select="mss34dsp"
msmpeg4v2_encoder_select="h263_encoder"
msmpeg4v3_decoder_select="h263_decoder"
msmpeg4v3_encoder_select="h263_encoder"
-mss2_decoder_select="error_resilience mpeg_er qpeldsp vc1_decoder"
+mss2_decoder_select="error_resilience mpeg_er mpegvideo vc1_decoder"
mts2_decoder_select="mss34dsp"
mxpeg_decoder_select="mjpeg_decoder"
nellymoser_decoder_select="mdct sinewin"
sp5x_decoder_select="mjpeg_decoder"
svq1_decoder_select="hpeldsp"
svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
-svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
+svq3_decoder_select="golomb h264dsp h264pred hpeldsp tpeldsp videodsp"
svq3_decoder_suggest="zlib"
tak_decoder_select="audiodsp"
tdsc_decoder_deps="zlib"
utvideo_decoder_select="bswapdsp"
utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
vble_decoder_select="huffyuvdsp"
-vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
+vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
vc1image_decoder_select="vc1_decoder"
vorbis_decoder_select="mdct"
vorbis_encoder_select="mdct"
wmavoice_decoder_select="lsp rdft dct mdct sinewin"
wmv1_decoder_select="h263_decoder"
wmv1_encoder_select="h263_encoder"
-wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp wmv2dsp"
+wmv2_decoder_select="blockdsp error_resilience h263_decoder idctdsp intrax8 videodsp wmv2dsp"
wmv2_encoder_select="h263_encoder wmv2dsp"
wmv3_decoder_select="vc1_decoder"
wmv3image_decoder_select="wmv3_decoder"
h263_vaapi_hwaccel_deps="vaapi"
h263_vaapi_hwaccel_select="h263_decoder"
-h263_vdpau_hwaccel_deps="vdpau"
-h263_vdpau_hwaccel_select="h263_decoder"
h264_d3d11va_hwaccel_deps="d3d11va"
h264_d3d11va_hwaccel_select="h264_decoder"
h264_dxva2_hwaccel_deps="dxva2"
h264_mmal_hwaccel_deps="mmal"
h264_mmal_decoder_select="h264_decoder"
h264_mmal_encoder_deps="mmal"
+h264_omx_encoder_deps="omx"
h264_qsv_hwaccel_deps="libmfx"
h264_vaapi_hwaccel_deps="vaapi"
h264_vaapi_hwaccel_select="h264_decoder"
hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
hevc_dxva2_hwaccel_select="hevc_decoder"
hevc_qsv_hwaccel_deps="libmfx"
+hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
+hevc_vdpau_hwaccel_select="hevc_decoder"
mpeg1_vdpau_hwaccel_deps="vdpau"
mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
mpeg2_d3d11va_hwaccel_deps="d3d11va"
mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
mpeg2_vdpau_hwaccel_deps="vdpau"
mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
+mpeg4_omx_encoder_deps="omx"
mpeg4_vaapi_hwaccel_deps="vaapi"
mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
mpeg4_vdpau_hwaccel_deps="vdpau"
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
+# hardware-accelerated codecs
+nvenc_deps_any="dlopen LoadLibrary"
+nvenc_extralibs='$ldl'
+omx_deps="dlopen pthreads"
+omx_extralibs='$ldl'
+qsvdec_select="qsv"
+qsvenc_select="qsv"
+vaapi_encode_deps="vaapi"
+
+hwupload_cuda_filter_deps="cuda"
+scale_npp_filter_deps="cuda libnpp"
+
+h264_nvenc_encoder_deps="nvenc"
+h264_qsv_decoder_deps="libmfx"
+h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
+h264_qsv_encoder_deps="libmfx"
+h264_qsv_encoder_select="qsvenc"
+h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
+h264_vaapi_encoder_select="vaapi_encode golomb"
+
+hevc_nvenc_encoder_deps="nvenc"
+hevc_qsv_decoder_deps="libmfx"
+hevc_qsv_encoder_deps="libmfx"
+hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser hevc_qsv_hwaccel qsvdec"
+hevc_qsv_encoder_select="qsvenc"
+hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
+hevc_vaapi_encoder_select="vaapi_encode golomb"
+mpeg2_qsv_decoder_deps="libmfx"
+mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
+mpeg2_qsv_encoder_deps="libmfx"
+mpeg2_qsv_encoder_select="qsvenc"
+
+nvenc_h264_encoder_deps="nvenc"
+nvenc_hevc_encoder_deps="nvenc"
+
# parsers
-h264_parser_select="h264_decoder"
+h264_parser_select="golomb h264dsp"
hevc_parser_select="golomb"
mpegvideo_parser_select="mpegvideo"
-mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
-vc1_parser_select="mpegvideo startcode vc1_decoder"
+mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
+vc1_parser_select="vc1dsp"
# bitstream_filters
mjpeg2jpeg_bsf_select="jpegtables"
asf_demuxer_select="riffdec"
asf_muxer_select="riffenc"
asf_stream_muxer_select="asf_muxer"
-avi_demuxer_select="riffdec"
+avi_demuxer_select="iso_media riffdec"
avi_muxer_select="riffenc"
avisynth_demuxer_deps="avisynth"
avisynth_demuxer_select="riffdec"
-caf_demuxer_select="riffdec"
+caf_demuxer_select="iso_media riffdec"
dash_muxer_select="mp4_muxer"
dirac_demuxer_select="dirac_parser"
dv_demuxer_select="dvprofile"
ipod_muxer_select="mov_muxer"
ismv_muxer_select="mov_muxer"
matroska_audio_muxer_select="matroska_muxer"
-matroska_demuxer_select="riffdec"
+matroska_demuxer_select="iso_media riffdec"
matroska_demuxer_suggest="bzlib lzo zlib"
-matroska_muxer_select="riffenc"
+matroska_muxer_select="iso_media riffenc"
mmf_muxer_select="riffenc"
-mov_demuxer_select="riffdec"
+mov_demuxer_select="iso_media riffdec"
mov_demuxer_suggest="zlib"
-mov_muxer_select="riffenc rtpenc_chain"
+mov_muxer_select="iso_media riffenc rtpenc_chain"
mp3_demuxer_select="mpegaudio_parser"
mp4_muxer_select="mov_muxer"
+mpegts_demuxer_select="iso_media"
mpegts_muxer_select="adts_muxer latm_muxer"
mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_d10_muxer_select="mxf_muxer"
nut_muxer_select="riffenc"
nuv_demuxer_select="riffdec"
oga_muxer_select="ogg_muxer"
-ogg_demuxer_select="golomb"
+ogg_demuxer_select="dirac_parse"
opus_muxer_select="ogg_muxer"
psp_muxer_select="mov_muxer"
rtp_demuxer_select="sdp_demuxer"
-rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
+rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
rtsp_demuxer_select="http_protocol rtpdec"
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
sap_demuxer_select="sdp_demuxer"
smoothstreaming_muxer_select="ismv_muxer"
spdif_muxer_select="aac_parser"
spx_muxer_select="ogg_muxer"
+swf_demuxer_suggest="zlib"
tak_demuxer_select="tak_parser"
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
w64_demuxer_select="wav_demuxer"
wav_demuxer_select="riffdec"
wav_muxer_select="riffenc"
-webm_muxer_select="riffenc"
+webm_muxer_select="iso_media riffenc"
webm_muxer_suggest="libopus_encoder libvorbis_encoder libvpx_vp8_encoder libvpx_vp9_encoder"
-wtv_demuxer_select="riffdec"
+wtv_demuxer_select="mpegts_demuxer riffdec"
xmv_demuxer_select="riffdec"
xwma_demuxer_select="riffdec"
# indevs / outdevs
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
alsa_outdev_deps="alsa_asoundlib_h"
+avfoundation_indev_deps="AVFoundation_AVFoundation_h"
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
dv1394_indev_deps="dv1394"
dv1394_indev_select="dv_demuxer"
fbdev_indev_deps="linux_fb_h"
-jack_indev_deps="jack_jack_h pthreads"
+jack_indev_deps="jack_jack_h"
+jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
libcdio_indev_deps="libcdio"
libdc1394_indev_deps="libdc1394"
oss_indev_deps_any="soundcard_h sys_soundcard_h"
rtp_protocol_select="udp_protocol"
sctp_protocol_deps="struct_sctp_event_subscribe"
sctp_protocol_select="network"
-srtp_protocol_select="rtp_protocol"
+srtp_protocol_select="rtp_protocol srtp"
tcp_protocol_select="network"
tls_gnutls_protocol_deps="gnutls"
tls_gnutls_protocol_select="tcp_protocol"
ocv_filter_deps="libopencv"
resample_filter_deps="avresample"
scale_filter_deps="swscale"
+scale_vaapi_filter_deps="vaapi VAProcPipelineParameterBuffer"
# examples
avcodec_example_deps="avcodec avutil"
avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
fps_filter null_filter resample_filter scale_filter
setpts_filter trim_filter"
-avplay_deps="avcodec avformat avresample swscale sdl"
+avplay_deps="avcodec avfilter avformat avresample sdl"
avplay_libs='$sdl_libs'
-avplay_select="rdft transpose_filter hflip_filter vflip_filter"
+avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
avprobe_deps="avcodec avformat"
# documentation
CC_C='-c'
CC_E='-E -o $@'
CC_O='-o $@'
+OBJCC_C='-c'
+OBJCC_E='-E -o $@'
+OBJCC_O='-o $@'
LD_O='-o $@'
LD_LIB='-l%'
LD_PATH='-L'
DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
HWACCEL_LIST=$(find_things hwaccel HWACCEL libavcodec/allcodecs.c)
PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
-BSF_LIST=$(find_things bsf BSF libavcodec/allcodecs.c)
MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c)
DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c)
OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c)
-PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c)
+find_things_extern(){
+ thing=$1
+ pattern=$2
+ file=$source_path/$3
+ sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
+}
+
+BSF_LIST=$(find_things_extern bsf AVBitStreamFilter libavcodec/bitstream_filters.c)
+PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)
+
ALL_COMPONENTS="
$BSF_LIST
$DECODER_LIST
}
print_3_columns() {
- cat | tr ' ' '\n' | sort | pr -r -3 -t
+ printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
}
show_list() {
set >> $logfile
case "$toolchain" in
- clang-asan)
- cc_default="clang"
+ *-asan)
+ cc_default="${toolchain%-asan}"
add_cflags -fsanitize=address
add_ldflags -fsanitize=address
;;
- clang-tsan)
- cc_default="clang"
+ *-msan)
+ cc_default="${toolchain%-msan}"
+ add_cflags -fsanitize=memory -fsanitize-memory-track-origins
+ add_ldflags -fsanitize=memory
+ ;;
+ *-tsan)
+ cc_default="${toolchain%-tsan}"
add_cflags -fsanitize=thread -pie
add_ldflags -fsanitize=thread -pie
+ case "$toolchain" in
+ gcc-tsan)
+ add_cflags -fPIC
+ add_ldflags -fPIC
+ ;;
+ esac
;;
- clang-usan)
- cc_default="clang"
- add_cflags -fsanitize=undefined -O1
- add_ldflags -fsanitize=undefined
- ;;
- gcc-asan)
- cc_default="gcc"
- add_cflags -fsanitize=address
- add_ldflags -fsanitize=address
- ;;
- gcc-tsan)
- cc_default="gcc"
- add_cflags -fsanitize=thread -pie -fPIC
- add_ldflags -fsanitize=thread -pie -fPIC
- ;;
- gcc-usan)
- cc_default="gcc"
+ *-usan)
+ cc_default="${toolchain%-usan}"
add_cflags -fsanitize=undefined
add_ldflags -fsanitize=undefined
+ case "$toolchain" in
+ clang-usan)
+ add_cflags -O1
+ ;;
+ esac
;;
- valgrind-massif)
- target_exec_default="valgrind"
- target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
- ;;
- valgrind-memcheck)
+ valgrind-*)
target_exec_default="valgrind"
- target_exec_args="--track-origins=yes --leak-check=full"
+ case "$toolchain" in
+ valgrind-massif)
+ target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
+ ;;
+ valgrind-memcheck)
+ target_exec_args="--track-origins=yes --leak-check=full"
+ ;;
+ esac
;;
msvc)
# Check whether the current MSVC version needs the C99 converter.
add_cflags -fprofile-arcs -ftest-coverage
add_ldflags -fprofile-arcs -ftest-coverage
;;
+ llvm-cov)
+ add_cflags -fprofile-arcs -ftest-coverage
+ add_ldflags --coverage
+ ;;
hardened)
add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
add_cflags -fno-strict-overflow -fstack-protector-all
ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}"
+occ_default="${cross_prefix}${occ_default}"
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
ranlib="${cross_prefix}${ranlib}"
exesuf() {
case $1 in
- mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
+ mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
esac
}
-lz) echo zlib.lib ;;
-lavifil32) echo vfw32.lib ;;
-lavicap32) echo vfw32.lib user32.lib ;;
+ -lx264) echo libx264.lib ;;
-l*) echo ${flag#-l}.lib ;;
-L*) echo -libpath:${flag#-L} ;;
*) echo $flag ;;
warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
: ${as_default:=$cc}
+: ${objcc_default:=$cc}
: ${dep_cc_default:=$cc}
: ${ld_default:=$cc}
: ${host_ld_default:=$host_cc}
-set_default ar as dep_cc ld host_ld
+set_default ar as objcc dep_cc ld host_ld
probe_cc as "$as"
asflags_filter=$_flags_filter
add_asflags $_flags $_cflags
set_ccvars AS
+probe_cc objcc "$objcc"
+objcflags_filter=$_flags_filter
+add_objcflags $_flags $_cflags
+set_ccvars OBJC
+
probe_cc ld "$ld"
ldflags_filter=$_flags_filter
add_ldflags $_flags $_ldflags
fi
add_cflags $extra_cflags
+add_objcflags $extra_objcflags
add_asflags $extra_cflags
if test -n "$sysroot"; then
arch="arm"
;;
mips*|IP*)
+ case "$arch" in
+ *el)
+ add_cppflags -EL
+ add_ldflags -EL
+ ;;
+ *eb)
+ add_cppflags -EB
+ add_ldflags -EB
+ ;;
+ esac
arch="mips"
;;
parisc*|hppa*)
}
probe_arm_arch() {
- if check_arm_arch 4; then echo armv4;
- elif check_arm_arch 4T; then echo armv4t;
- elif check_arm_arch 5; then echo armv5;
- elif check_arm_arch 5E; then echo armv5e;
- elif check_arm_arch 5T; then echo armv5t;
- elif check_arm_arch 5TE; then echo armv5te;
- elif check_arm_arch 5TEJ; then echo armv5te;
- elif check_arm_arch 6; then echo armv6;
- elif check_arm_arch 6J; then echo armv6j;
- elif check_arm_arch 6K; then echo armv6k;
- elif check_arm_arch 6Z; then echo armv6z;
- elif check_arm_arch 6ZK; then echo armv6zk;
- elif check_arm_arch 6T2; then echo armv6t2;
- elif check_arm_arch 7; then echo armv7;
- elif check_arm_arch 7A 7_A; then echo armv7-a;
- elif check_arm_arch 7S; then echo armv7-a;
- elif check_arm_arch 7R 7_R; then echo armv7-r;
- elif check_arm_arch 7M 7_M; then echo armv7-m;
- elif check_arm_arch 7EM 7E_M; then echo armv7-m;
- elif check_arm_arch 8A 8_A; then echo armv8-a;
+ if check_arm_arch 4; then echo armv4
+ elif check_arm_arch 4T; then echo armv4t
+ elif check_arm_arch 5; then echo armv5
+ elif check_arm_arch 5E; then echo armv5e
+ elif check_arm_arch 5T; then echo armv5t
+ elif check_arm_arch 5TE; then echo armv5te
+ elif check_arm_arch 5TEJ; then echo armv5te
+ elif check_arm_arch 6; then echo armv6
+ elif check_arm_arch 6J; then echo armv6j
+ elif check_arm_arch 6K; then echo armv6k
+ elif check_arm_arch 6Z; then echo armv6z
+ elif check_arm_arch 6ZK; then echo armv6zk
+ elif check_arm_arch 6T2; then echo armv6t2
+ elif check_arm_arch 7; then echo armv7
+ elif check_arm_arch 7A 7_A; then echo armv7-a
+ elif check_arm_arch 7S; then echo armv7-a
+ elif check_arm_arch 7R 7_R; then echo armv7-r
+ elif check_arm_arch 7M 7_M; then echo armv7-m
+ elif check_arm_arch 7EM 7E_M; then echo armv7-m
+ elif check_arm_arch 8A 8_A; then echo armv8-a
fi
}
enable section_data_rel_ro
SLIB_INSTALL_NAME='$(SLIBNAME)'
SLIB_INSTALL_LINKS=
- # soname not set on purpose
- SHFLAGS=-shared
+ SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
;;
haiku)
prefix_default="/boot/common"
enabled x86_64 && objformat="macho64"
enabled_any pic shared ||
{ check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
+ check_header dispatch/dispatch.h &&
+ add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore'
;;
- mingw32*)
+ msys*)
+ die "Native MSYS builds are discouraged, please use the MINGW environment."
+ ;;
+ mingw32*|mingw64*)
if test $target_os = "mingw32ce"; then
disable network
else
build the shared libraries as well. To only build the shared libraries specify
--disable-static in addition to --enable-shared.
EOF
- exit 1;
+ exit 1
fi
die_license_disabled() {
die_license_disabled gpl libxvid
die_license_disabled gpl x11grab
+die_license_disabled nonfree cuda
die_license_disabled nonfree libfaac
die_license_disabled nonfree libfdk_aac
+die_license_disabled nonfree libnpp
die_license_disabled nonfree nvenc
die_license_disabled nonfree openssl
check_yasm "movbe ecx, [5]" && enable yasm ||
die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
+ check_yasm "vextracti128 xmm0, ymm0, 0" || disable avx2_external
check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
check_yasm "vfmadd132ps ymm0, ymm1, ymm2" || disable fma3_external
check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
+check_type "va/va.h va/va_vpp.h" "VAProcPipelineParameterBuffer"
+check_type "va/va.h va/va_enc_h264.h" "VAEncPictureParameterBufferH264"
+check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
+check_type "va/va.h va/va_enc_jpeg.h" "VAEncPictureParameterBufferJPEG"
+
+check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
+
if ! disabled w32threads && ! enabled pthreads; then
check_func_headers "windows.h process.h" _beginthreadex &&
enable w32threads || disable w32threads
fi
fi
+enabled pthreads &&
+ check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)"
+
disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
enabled avisynth && { check_lib2 "avisynth/avisynth_c.h windows.h" LoadLibrary ||
check_lib2 "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl ||
die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
+enabled cuda && check_lib cuda.h cuInit -lcuda
enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open
check_lib "${gsm_hdr}" gsm_create -lgsm && break;
done || die "ERROR: libgsm not found"; }
enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
-enabled libkvazaar && require_pkg_config "kvazaar >= 0.7.1" kvazaar.h kvz_api_get
+enabled libkvazaar && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
enabled libmfx && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
+enabled libnpp && require libnpp npp.h nppGetLibVersion -lnppi -lnppc
enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
check_lib interface/mmal/mmal.h mmal_port_connect ; }
check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
die "ERROR: mmal not found"; }
-enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
+enabled omx_rpi && enable omx
+enabled omx && { check_header OMX_Core.h ||
+ { ! enabled cross_compile && enabled omx_rpi && {
+ add_cflags -isystem/opt/vc/include/IL ; }
+ check_header OMX_Core.h ; } ||
+ die "ERROR: OpenMAX IL headers not found"; }
+enabled openssl && { check_pkg_config openssl openssl/ssl.h SSL_library_init && {
+ add_cflags $openssl_cflags && add_extralibs $openssl_libs; }||
+ check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
die "ERROR: openssl not found"; }
fi
if enabled nvenc; then
- check_header cuda.h || die "ERROR: cuda.h not found.";
- check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found.";
+ enabled cuda || check_header cuda.h || die "ERROR: cuda.h not found."
+ check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."
check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
- die "ERROR: NVENC API version 4 or older is not supported";
+ die "ERROR: NVENC API version 4 or older is not supported"
fi
if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
check_header linux/videodev2.h
check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete
+check_header AVFoundation/AVFoundation.h &&
+ check_objcflags -fobjc-arc &&
+ add_extralibs -framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia ||
+ disable AVFoundation_AVFoundation_h
+
check_header sys/videoio.h
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
fi
-enabled vaapi && enabled xlib &&
+enabled vaapi &&
+ check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" ||
+ disable vaapi
+
+if enabled vaapi ; then
+ enabled xlib &&
check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
enable vaapi_x11
+ check_lib2 "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm &&
+ enable vaapi_drm
+fi
+
enabled vdpau &&
check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
disable vdpau
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
-check_cflags -Wcast-qual
check_cflags -Wwrite-strings
check_cflags -Wtype-limits
check_cflags -Wundef
check_cflags -Wmissing-prototypes
check_cflags -Wstrict-prototypes
enabled extra_warnings && check_cflags -Winline
+enabled extra_warnings && check_cflags -Wcast-qual
check_disable_warning(){
warning_flag=-W${1#-Wno-}
print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
echo
+echo "Libraries:"
+print_enabled '' $LIBRARY_LIST | print_3_columns
+echo
+
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
echo "Enabled ${type}s:"
eval list=\$$(toupper $type)_LIST
echo
done
+echo "Enabled Hardware-accelerated codecs:"
+print_enabled '' $HW_CODECS_LIST | print_3_columns
+echo
+
license="LGPL version 2.1 or later"
if enabled nonfree; then
license="nonfree and unredistributable"
ARCH=$arch
INTRINSICS=$intrinsics
CC=$cc
+OBJCC=$cc
AS=$as
+OBJCC=$objcc
LD=$ld
DEPCC=$dep_cc
DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
LN_S=$ln_s
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
+OBJCFLAGS=$OBJCFLAGS
ASFLAGS=$ASFLAGS
AS_C=$AS_C
AS_O=$AS_O
+OBJCC_C=$OBJCC_C
+OBJCC_E=$OBJCC_E
+OBJCC_O=$OBJCC_O
CC_C=$CC_C
CC_E=$CC_E
CC_O=$CC_O
test -n "$WARNINGS" && printf "\n$WARNINGS"
+# generate the lists of enabled components
+print_enabled_components(){
+ file=$1
+ struct_name=$2
+ name=$3
+ shift 3
+ echo "static const $struct_name *$name[] = {" > $TMPH
+ for c in $*; do
+ enabled $c && printf " &ff_%s,\n" $c >> $TMPH
+ done
+ echo " NULL };" >> $TMPH
+ cp_if_changed $TMPH $file
+}
+
+print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST
+print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST
+
# build pkg-config files
lib_version(){