diff options
author | Martin Herkt <lachs0r@srsfckn.biz> | 2016-06-09 01:34:18 +0200 |
---|---|---|
committer | Martin Herkt <lachs0r@srsfckn.biz> | 2016-06-09 01:41:53 +0200 |
commit | b51957fab59fd5a2fde824e1946befd29ed172c1 (patch) | |
tree | 91192c301650a525a08432e129245a7c8de32f77 /wscript | |
parent | 4123c9642d2cef03963f6802e32b9748c362c116 (diff) | |
download | mpv-b51957fab59fd5a2fde824e1946befd29ed172c1.tar.bz2 mpv-b51957fab59fd5a2fde824e1946befd29ed172c1.tar.xz |
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.
Diffstat (limited to 'wscript')
-rw-r--r-- | wscript | 69 |
1 files changed, 45 insertions, 24 deletions
@@ -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) |