player: rearrange libav* library check

No need to be nice. Also hopefully breaks idiotic distro patches.
This commit is contained in:
wm4 2020-03-08 18:54:01 +01:00
parent d0d9ace421
commit 62c1d79724
3 changed files with 12 additions and 21 deletions

View File

@ -176,7 +176,7 @@ struct lib {
unsigned runv;
};
bool print_libav_versions(struct mp_log *log, int v)
void check_library_versions(struct mp_log *log, int v)
{
const struct lib libs[] = {
{"libavutil", LIBAVUTIL_VERSION_INT, avutil_version()},
@ -189,21 +189,22 @@ bool print_libav_versions(struct mp_log *log, int v)
mp_msg(log, v, "FFmpeg library versions:\n");
bool mismatch = false;
for (int n = 0; n < MP_ARRAY_SIZE(libs); n++) {
const struct lib *l = &libs[n];
mp_msg(log, v, " %-15s %d.%d.%d", l->name, V(l->buildv));
if (l->buildv != l->runv) {
if (l->buildv != l->runv)
mp_msg(log, v, " (runtime %d.%d.%d)", V(l->runv));
mismatch = l->buildv > l->runv ||
AV_VERSION_MAJOR(l->buildv) != AV_VERSION_MAJOR(l->runv);
}
mp_msg(log, v, "\n");
if (l->buildv > l->runv ||
AV_VERSION_MAJOR(l->buildv) != AV_VERSION_MAJOR(l->runv))
{
fprintf(stderr, "%s: %d.%d.%d -> %d.%d.%d\n",
l->name, V(l->buildv), V(l->runv));
abort();
}
}
mp_msg(log, v, "FFmpeg version: %s\n", av_version_info());
return !mismatch;
}
#undef V

View File

@ -7,5 +7,5 @@ struct mpv_global;
struct mp_log;
void init_libav(struct mpv_global *global);
void uninit_libav(struct mpv_global *global);
bool print_libav_versions(struct mp_log *log, int v);
void check_library_versions(struct mp_log *log, int v);
#endif

View File

@ -144,7 +144,7 @@ void mp_print_version(struct mp_log *log, int always)
int v = always ? MSGL_INFO : MSGL_V;
mp_msg(log, v, "%s %s\n built on %s\n",
mpv_version, mpv_copyright, mpv_builddate);
print_libav_versions(log, v);
check_library_versions(log, v);
mp_msg(log, v, "\n");
// Only in verbose mode.
if (!always) {
@ -371,17 +371,7 @@ int mp_initialize(struct MPContext *mpctx, char **options)
if (handle_help_options(mpctx))
return 1; // help
if (!print_libav_versions(mp_null_log, 0)) {
// This happens only if the runtime FFmpeg version is lower than the
// build version, which will not work according to FFmpeg's ABI rules.
// This does not happen if runtime FFmpeg is newer, which is compatible.
print_libav_versions(mpctx->log, MSGL_FATAL);
MP_FATAL(mpctx, "\nmpv was compiled against an incompatible 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\nThis is a broken build.\n");
return -1;
}
check_library_versions(mp_null_log, 0);
#if HAVE_TESTS
if (opts->test_mode && opts->test_mode[0])