summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rw-r--r--common/av_log.c11
-rw-r--r--common/av_log.h5
-rw-r--r--player/main.c12
4 files changed, 21 insertions, 10 deletions
diff --git a/README.md b/README.md
index 5d43c682df..0cac74341c 100644
--- a/README.md
+++ b/README.md
@@ -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);