The following libraries provide various hardware acceleration features:
--disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
- --enable-cuda enable dynamically linked Nvidia CUDA code [no]
- --enable-cuvid enable Nvidia CUVID support [autodetect]
+ --disable-cuda disable dynamically linked Nvidia CUDA code [autodetect]
+ --disable-cuvid disable Nvidia CUVID support [autodetect]
--disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
--disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
--enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
EOF
}
+test_cflags_cpp(){
+ log test_cflags_cpp "$@"
+ flags=$1
+ condition=$2
+ shift 2
+ set -- $($cflags_filter "$flags")
+ check_cpp "$@" <<EOF
+#if !($condition)
+#error "unsatisfied condition: $condition"
+#endif
+EOF
+}
+
check_lib(){
log check_lib "$@"
header="$1"
asm_types_h
cdio_paranoia_h
cdio_paranoia_paranoia_h
+ cuda_h
dispatch_dispatch_h
dev_bktr_ioctl_bt848_h
dev_bktr_ioctl_meteor_h
poll_h
sndio_h
soundcard_h
+ stdatomic_h
sys_mman_h
sys_param_h
sys_resource_h
h263dsp
h264chroma
h264dsp
+ h264parse
h264pred
h264qpel
hpeldsp
h263i_decoder_select="h263_decoder"
h263p_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder"
-h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel videodsp"
+h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
h264_decoder_suggest="error_resilience"
hap_decoder_select="snappy texturedsp"
hap_encoder_deps="libsnappy"
sp5x_decoder_select="mjpeg_decoder"
svq1_decoder_select="hpeldsp"
svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
-svq3_decoder_select="golomb h264dsp h264pred hpeldsp tpeldsp videodsp"
+svq3_decoder_select="golomb h264dsp h264parse h264pred hpeldsp tpeldsp videodsp"
svq3_decoder_suggest="zlib"
tak_decoder_select="audiodsp"
tdsc_decoder_select="zlib mjpeg_decoder"
# hardware accelerators
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
+cuda_deps_any="dlopen LoadLibrary"
cuvid_deps="cuda"
d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext"
dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
+dxva2_extralibs="-luser32"
vaapi_deps="va_va_h"
vda_framework_deps="VideoDecodeAcceleration_VDADecoder_h"
vda_framework_extralibs="-framework VideoDecodeAcceleration"
hwupload_cuda_filter_deps="cuda"
scale_npp_filter_deps="cuda libnpp"
+nvenc_deps="cuda"
nvenc_deps_any="dlopen LoadLibrary"
nvenc_encoder_deps="nvenc"
h264_cuvid_decoder_deps="cuda cuvid"
vp9_cuvid_decoder_select="vp9_cuvid_hwaccel"
# parsers
-h264_parser_select="golomb h264dsp"
+h264_parser_select="golomb h264dsp h264parse"
hevc_parser_select="golomb"
mpegvideo_parser_select="mpegvideo"
mpeg4video_parser_select="h263dsp mpegvideo qpeldsp"
delogo_filter_deps="gpl"
deshake_filter_select="pixelutils"
drawtext_filter_deps="libfreetype"
-ebur128_filter_deps="gpl"
eq_filter_deps="gpl"
fftfilt_filter_deps="avcodec"
fftfilt_filter_select="rdft"
enable d3d11va dxva2 vaapi vda vdpau videotoolbox_hwaccel xvmc
enable xlib
-enable nvenc vda_framework videotoolbox videotoolbox_encoder
+enable cuda cuvid nvenc vda_framework videotoolbox videotoolbox_encoder
# build settings
SHFLAGS='-shared -Wl,-soname,$$(@F)'
add_cppflags -D_ISOC99_SOURCE
add_cxxflags -D__STDC_CONSTANT_MACROS
add_cxxflags -std=c++98
-check_cflags -std=c99
+
+# some compilers silently accept -std=c11, so we also need to check that the
+# version macro is defined properly
+if test_cflags_cpp -std=c11 "__STDC_VERSION__ >= 201112L"; then
+ add_cflags -std=c11
+else
+ check_cflags -std=c99
+fi
+
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
#include <stdlib.h>
EOF
die_license_disabled gpl libxvid
die_license_disabled gpl x11grab
-die_license_disabled nonfree cuda
-die_license_disabled nonfree cuvid
die_license_disabled nonfree libnpp
enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
enabled gpl && die_license_disabled_gpl nonfree openssl
fi
avisynth_demuxer_extralibs='$ldl'
+cuda_extralibs='$ldl'
decklink_outdev_extralibs="$decklink_outdev_extralibs $ldl"
decklink_indev_extralibs="$decklink_indev_extralibs $ldl"
frei0r_filter_extralibs='$ldl'
check_header X11/extensions/XvMClib.h
check_header asm/types.h
+# it seems there are versions of clang in some distros that try to use the
+# gcc headers, which explodes for stdatomic
+# so we also check that atomics actually work here
+check_builtin stdatomic_h stdatomic.h "atomic_int foo; atomic_store(&foo, 0)"
+
check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
eval check_complexfunc $func \${${func}_args:-1}
done
-# Enable CUVID by default if CUDA is enabled
-if enabled cuda && ! disabled cuvid; then
- enable cuvid
-fi
-
# these are off by default, so fail if requested and not available
enabled avfoundation_indev && { check_header_objcc AVFoundation/AVFoundation.h || disable avfoundation_indev; }
enabled avfoundation_indev && { check_lib2 CoreGraphics/CoreGraphics.h CGGetActiveDisplayList -framework CoreGraphics ||
check_lib2 ApplicationServices/ApplicationServices.h CGGetActiveDisplayList -framework ApplicationServices; }
-enabled cuda && { check_lib2 cuda.h cuInit -lcuda ||
- die "ERROR: CUDA not found"; }
-enabled cuvid && { add_cflags -I$source_path;
- check_lib2 "compat/cuda/cuviddec.h" cuvidCreateDecoder -lnvcuvid ||
- die "ERROR: CUVID not found"; } &&
- { enabled cuda ||
+enabled cuda && check_header cuda.h # this is not a dependency
+enabled cuvid && { enabled cuda ||
die "ERROR: CUVID requires CUDA"; }
enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
enabled coreimage_filter && { check_header_objcc QuartzCore/CoreImage.h || disable coreimage_filter; }
die "ERROR: libx265 version must be >= 68."; }
enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
-enabled libzimg && require_pkg_config zimg zimg.h zimg_get_api_version
+enabled libzimg && require_pkg_config "zimg >= 2.3.0" zimg.h zimg_get_api_version
enabled libzmq && require_pkg_config libzmq zmq.h zmq_ctx_new
enabled libzvbi && require libzvbi libzvbi.h vbi_decoder_new -lzvbi &&
{ check_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
mingw32*|mingw64*|win32|win64|linux|cygwin*)
;;
*)
- disable nvenc
+ disable cuda cuvid nvenc
;;
esac
else
- disable nvenc
+ disable cuda cuvid nvenc
fi
enabled nvenc &&
fi
enabled_all dxva2 dxva2api_cobj CoTaskMemFree &&
- prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") &&
+ prepend ffmpeg_libs $($ldflags_filter "-lole32") &&
enable dxva2_lib
! enabled_any memalign posix_memalign aligned_malloc &&