mirror of
https://github.com/mpv-player/mpv
synced 2025-03-21 10:51:51 +00:00
wscript: Require recent FFmpeg by default
Distros and users alike should be made aware of the fact that old FFmpeg versions are bad. When users come to us with FFmpeg-related trouble, the answer is “update FFmpeg” more often than not (and no further support will be provided until they have done so), so instead we just nag them about it here.
This commit is contained in:
parent
4123c9642d
commit
b51957fab5
69
wscript
69
wscript
@ -389,6 +389,14 @@ iconv support use --disable-iconv.",
|
||||
}
|
||||
]
|
||||
|
||||
ffmpeg_pkg_config_checks = [
|
||||
'libavutil', '>= 55.17.103',
|
||||
'libavcodec', '>= 57.24.102',
|
||||
'libavformat', '>= 57.25.100',
|
||||
'libswscale', '>= 4.0.100'
|
||||
]
|
||||
ffmpeg_versions_string = "FFmpeg 3.0.2"
|
||||
|
||||
libav_pkg_config_checks = [
|
||||
'libavutil', '>= 54.02.0',
|
||||
'libavcodec', '>= 56.1.0',
|
||||
@ -397,14 +405,27 @@ libav_pkg_config_checks = [
|
||||
]
|
||||
libav_versions_string = "FFmpeg 2.4 or Libav 11"
|
||||
|
||||
libav_dependencies = [
|
||||
ffmpeg_dependencies = [
|
||||
{
|
||||
'name': 'libav',
|
||||
'desc': 'libav/ffmpeg',
|
||||
'name': 'recent-ffmpeg',
|
||||
'desc': 'recent ffmpeg',
|
||||
'func': check_pkg_config(*ffmpeg_pkg_config_checks),
|
||||
}, {
|
||||
'name': '--unsupported-ffmpeg',
|
||||
'desc': 'old libav/ffmpeg',
|
||||
'func': check_pkg_config(*libav_pkg_config_checks),
|
||||
'default': 'disable',
|
||||
}, {
|
||||
'name': 'ffmpeg',
|
||||
'desc': 'ffmpeg',
|
||||
'deps_any': [ 'recent-ffmpeg', 'unsupported-ffmpeg' ],
|
||||
'func': check_true,
|
||||
'req': True,
|
||||
'fmsg': "Unable to find development files for some of the required \
|
||||
FFmpeg/Libav libraries. You need at least {0}. Aborting.".format(libav_versions_string)
|
||||
FFmpeg/Libav libraries. Only {0} or newer is supported.\nIf you wish to build \
|
||||
mpv with older versions (at least {1}), use --enable-unsupported-ffmpeg.\n\
|
||||
This is NOT SUPPORTED, and some player features will not work correctly. \
|
||||
Aborting.".format(ffmpeg_versions_string, libav_versions_string),
|
||||
}, {
|
||||
'name': '--libswresample',
|
||||
'desc': 'libswresample',
|
||||
@ -435,79 +456,79 @@ FFmpeg/Libav libraries. You need at least {0}. Aborting.".format(libav_versions_
|
||||
'desc': 'libavcodec avcodec_enum_to_chroma_pos API',
|
||||
'func': check_statement('libavcodec/avcodec.h', """int x, y;
|
||||
avcodec_enum_to_chroma_pos(&x, &y, AVCHROMA_LOC_UNSPECIFIED)""",
|
||||
use='libav')
|
||||
use='ffmpeg')
|
||||
}, {
|
||||
'name': 'avframe-metadata',
|
||||
'desc': 'libavutil AVFrame metadata',
|
||||
'func': check_statement('libavutil/frame.h',
|
||||
'av_frame_get_metadata(NULL)',
|
||||
use='libav')
|
||||
use='ffmpeg')
|
||||
}, {
|
||||
'name': 'avframe-skip-samples',
|
||||
'desc': 'libavutil AVFrame skip samples metadata',
|
||||
'func': check_statement('libavutil/frame.h',
|
||||
'enum AVFrameSideDataType type = AV_FRAME_DATA_SKIP_SAMPLES',
|
||||
use='libav')
|
||||
use='ffmpeg')
|
||||
}, {
|
||||
'name': 'av-pix-fmt-mmal',
|
||||
'desc': 'libavutil AV_PIX_FMT_MMAL',
|
||||
'func': check_statement('libavutil/pixfmt.h',
|
||||
'int x = AV_PIX_FMT_MMAL',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': 'av-version-info',
|
||||
'desc': 'libavtuil av_version_info()',
|
||||
'func': check_statement('libavutil/avutil.h',
|
||||
'const char *x = av_version_info()',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': 'av-new-pixdesc',
|
||||
'desc': 'libavutil new pixdesc fields',
|
||||
'func': check_statement('libavutil/pixdesc.h',
|
||||
'AVComponentDescriptor d; int x = d.depth',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': 'av-avpacket-int64-duration',
|
||||
'desc': 'libavcodec 64 bit AVPacket.duration',
|
||||
'func': check_statement('libavcodec/avcodec.h',
|
||||
'int x[(int)sizeof(((AVPacket){0}).duration) - 7]',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': 'av-subtitle-nopict',
|
||||
'desc': 'libavcodec AVSubtitleRect AVPicture removal',
|
||||
'func': check_statement('libavcodec/avcodec.h',
|
||||
'AVSubtitleRect r = {.linesize={0}}',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': 'avcodec-profile-name',
|
||||
'desc': 'libavcodec avcodec_profile_name()',
|
||||
'func': check_statement('libavcodec/avcodec.h',
|
||||
'avcodec_profile_name(0,0)',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': 'avcodec-new-codec-api',
|
||||
'desc': 'libavcodec decode/encode API',
|
||||
'func': check_statement('libavcodec/avcodec.h',
|
||||
'avcodec_send_packet(0,0)',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': 'avcodec-has-codecpar',
|
||||
'desc': 'libavcodec AVCodecParameters API',
|
||||
'func': check_statement('libavformat/avformat.h',
|
||||
'(void)offsetof(AVStream, codecpar)',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': 'avutil-has-hwcontext',
|
||||
'desc': 'libavutil AVHWFramesContext API',
|
||||
'func': check_statement('libavutil/frame.h',
|
||||
'(void)offsetof(AVFrame, hw_frames_ctx)',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': 'avutil-st2084',
|
||||
'desc': 'libavutil AVCOL_TRC_SMPTEST2084',
|
||||
'func': check_statement('libavutil/pixfmt.h',
|
||||
'AVCOL_TRC_SMPTEST2084',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}
|
||||
]
|
||||
|
||||
@ -842,7 +863,7 @@ hwaccel_features = [
|
||||
'name': '--vaapi-hwaccel',
|
||||
'desc': 'libavcodec VAAPI hwaccel',
|
||||
'deps': [ 'vaapi' ],
|
||||
'func': check_headers('libavcodec/vaapi.h', use='libav'),
|
||||
'func': check_headers('libavcodec/vaapi.h', use='ffmpeg'),
|
||||
}, {
|
||||
'name': '--videotoolbox-hwaccel',
|
||||
'desc': 'libavcodec videotoolbox hwaccel',
|
||||
@ -851,7 +872,7 @@ hwaccel_features = [
|
||||
check_statement('libavcodec/videotoolbox.h',
|
||||
'av_videotoolbox_alloc_context()',
|
||||
framework='IOSurface',
|
||||
use='libav')),
|
||||
use='ffmpeg')),
|
||||
} , {
|
||||
'name': '--videotoolbox-gl',
|
||||
'desc': 'Videotoolbox with OpenGL',
|
||||
@ -863,14 +884,14 @@ hwaccel_features = [
|
||||
'deps': [ 'vdpau' ],
|
||||
'func': check_statement('libavcodec/vdpau.h',
|
||||
'av_vdpau_bind_context(0,0,0,AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH)',
|
||||
use='libav'),
|
||||
use='ffmpeg'),
|
||||
}, {
|
||||
'name': '--d3d-hwaccel',
|
||||
'desc': 'libavcodec DXVA2 and D3D11VA hwaccel',
|
||||
'deps': [ 'win32' ],
|
||||
'func': compose_checks(
|
||||
check_headers('libavcodec/dxva2.h', use='libav'),
|
||||
check_headers('libavcodec/d3d11va.h', use='libav')),
|
||||
check_headers('libavcodec/dxva2.h', use='ffmpeg'),
|
||||
check_headers('libavcodec/d3d11va.h', use='ffmpeg')),
|
||||
}, {
|
||||
'name': 'sse4-intrinsics',
|
||||
'desc': 'GCC SSE4 intrinsics for GPU memcpy',
|
||||
@ -964,7 +985,7 @@ def options(opt):
|
||||
help = 'variant name for saving configuration and build results')
|
||||
|
||||
opt.parse_features('build and install options', build_options)
|
||||
optional_features = main_dependencies + libav_dependencies
|
||||
optional_features = main_dependencies + ffmpeg_dependencies
|
||||
opt.parse_features('optional features', optional_features)
|
||||
opt.parse_features('audio outputs', audio_output_features)
|
||||
opt.parse_features('video outputs', video_output_features)
|
||||
@ -1025,7 +1046,7 @@ def configure(ctx):
|
||||
ctx.parse_dependencies(main_dependencies)
|
||||
ctx.parse_dependencies(audio_output_features)
|
||||
ctx.parse_dependencies(video_output_features)
|
||||
ctx.parse_dependencies(libav_dependencies)
|
||||
ctx.parse_dependencies(ffmpeg_dependencies)
|
||||
ctx.parse_dependencies(hwaccel_features)
|
||||
ctx.parse_dependencies(radio_and_tv_features)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user