diff options
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | common/av_log.c | 11 | ||||
-rw-r--r-- | common/av_log.h | 5 | ||||
-rw-r--r-- | player/main.c | 12 |
4 files changed, 21 insertions, 10 deletions
@@ -148,6 +148,9 @@ The reason for not supporting this is because it creates far too much complexity with little to no benefit, coupled with absurd and unusable FFmpeg API artifacts. +Newer mpv versiosn will refuse to start if runtime and compile time FFmpeg +library versions mismatch. + ## Release cycle Every other month, an arbitrary git snapshot is made, and is assigned diff --git a/common/av_log.c b/common/av_log.c index 804972889f..64ce26d853 100644 --- a/common/av_log.c +++ b/common/av_log.c @@ -189,7 +189,7 @@ struct lib { unsigned runv; }; -void print_libav_versions(struct mp_log *log, int v) +bool print_libav_versions(struct mp_log *log, int v) { const struct lib libs[] = { {"libavutil", LIBAVUTIL_VERSION_INT, avutil_version()}, @@ -222,14 +222,7 @@ void print_libav_versions(struct mp_log *log, int v) mp_msg(log, v, "%s version: %s\n", LIB_PREFIX, av_version_info()); #endif - if (mismatch) { - // Using mismatched libraries can be legitimate, but even then it's - // a bad idea. We don't acknowledge its usefulness and stability. - mp_warn(log, "Warning: mpv was compiled against a different version of " - "%s than the shared\nlibrary it is linked against. This is " - "most likely a broken build\nand misbehavior and crashes are " - "to be expected.\n", LIB_PREFIX); - } + return !mismatch; } #undef V diff --git a/common/av_log.h b/common/av_log.h index 17326b609f..18f7fc9d82 100644 --- a/common/av_log.h +++ b/common/av_log.h @@ -1,8 +1,11 @@ #ifndef MP_AV_LOG_H #define MP_AV_LOG_H + +#include <stdbool.h> + struct mpv_global; struct mp_log; void init_libav(struct mpv_global *global); void uninit_libav(struct mpv_global *global); -void print_libav_versions(struct mp_log *log, int v); +bool print_libav_versions(struct mp_log *log, int v); #endif diff --git a/player/main.c b/player/main.c index 21c273338c..7c06b5fed0 100644 --- a/player/main.c +++ b/player/main.c @@ -418,6 +418,18 @@ int mp_initialize(struct MPContext *mpctx, char **options) if (handle_help_options(mpctx)) return -2; + if (!print_libav_versions(mp_null_log, 0)) { + // Using mismatched libraries can be legitimate, but even then it's + // a bad idea. We don't acknowledge its usefulness and stability. + print_libav_versions(mpctx->log, MSGL_FATAL); + MP_FATAL(mpctx, "\nmpv was compiled against a different version of " + "FFmpeg/Libav than the shared\nlibrary it is linked against. " + "This is most likely a broken build and could\nresult in " + "misbehavior and crashes.\n\nmpv does not support this" + "configuration and will not run - rebuild mpv instead.\n"); + return -1; + } + if (opts->dump_stats && opts->dump_stats[0]) { if (mp_msg_open_stats_file(mpctx->global, opts->dump_stats) < 0) MP_ERR(mpctx, "Failed to open stats file '%s'\n", opts->dump_stats); |