diff options
-rw-r--r-- | DOCS/man/lua.rst | 4 | ||||
-rw-r--r-- | player/loadfile.c | 10 |
2 files changed, 14 insertions, 0 deletions
diff --git a/DOCS/man/lua.rst b/DOCS/man/lua.rst index 1cf6e99576..347292cd7b 100644 --- a/DOCS/man/lua.rst +++ b/DOCS/man/lua.rst @@ -755,3 +755,7 @@ guarantee a stable interface. you could set per-file options with by setting the property ``file-local-options/<option name>``. The player will wait until all hooks are run. + + ``on_unload`` + Run before closing a file, and before actually uninitializing + everything. It's not possible to resume playback in this state. diff --git a/player/loadfile.c b/player/loadfile.c index db032d422c..4f8b512e86 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -808,6 +808,14 @@ static int process_open_hooks(struct MPContext *mpctx) return 0; } +static void process_unload_hooks(struct MPContext *mpctx) +{ + mp_hook_run(mpctx, NULL, "on_unload"); + + while (!mp_hook_test_completion(mpctx, "on_unload")) + mp_idle(mpctx); +} + static void print_timeline(struct MPContext *mpctx) { if (mpctx->timeline) { @@ -1212,6 +1220,8 @@ terminate_playback: goto goto_reopen_demuxer; } + process_unload_hooks(mpctx); + mp_nav_destroy(mpctx); if (mpctx->stop_play == KEEP_PLAYING) |