mpv/TOOLS/lua
wm4 ba70b150fb client API: provide ways to finish property changes on file changes
When the current file changes (or rather, when starting/finishing
playback of a playlist entry), clients tend to have the problem that
it's hard to tell whether a property change notification (via
mpv_observe_property() and mechanisms layered on top of it) is from the
previous or new playlist entry. The previous commit probably helps, but
all the asynchronity is still a bit unhelpful.

Try to make this better by adding new hooks, that are run before/after
playback init/deinit. This is similar to the existing hooks, except
they're outside of "initialized" playback, which excludes that you might
accidentally get an overlap between the current and the previous/next
playlist entry.

That still doesn't seem quite enough, since normally, property change
notifications come after the hook event. So basically a client would
have to explicitly "drain" the event queue within the hook, and make the
hook continue only after that is done. Knowing when property
notifications are done is another asynchronous nightmare (how exactly it
works keeps changing within client.c, and an API user probably can't
tell anymore when all pending properties are truly done). So introduce
another guarantee: properties that were changed before the hook happens
will be returned before the hook event is returned. That means the
client will have received all pending property notifications from the
previous playlist entry (or whatever) before the hook is entered.

As another minor complication, we shouldn't just keep the hook pending
until _all_ property notifications are done, since the client's hook
could produce new ones. (Or just consider things like the demuxer thread
hammering the client with cache update events, while the "on_preloaded"
hook is run.) So there is some extra untested, fragile logic in client.c
to handle this (the waiting_for_hook flag).

This probably works, but was barely tested. Not sure if this helps
anyone, but I think it's fine for my own purposes. (I really hated this
aspect of the API whenever I used it myself.)
2020-03-07 02:52:10 +01:00
..
README.md TOOLS/lua/README: link to list of user scripts on wiki 2016-03-18 22:07:30 +01:00
acompressor.lua acompressor.lua: Convert to use mp.options and lavfi filter bridge 2017-08-07 11:42:20 +02:00
ao-null-reload.lua TOOLS/lua/ao-null-reload.lua: send ao-reload on audio-device-list change 2016-01-28 06:49:36 -08:00
audio-hotplug-test.lua command: drop "audio-out-detected-device" property 2017-10-09 15:48:47 +02:00
autocrop.lua TOOLS/autocrop.lua: fix cropdetect black limit for 10-bit videos 2017-08-17 20:43:25 +01:00
autodeint.lua TOOLS/lua/autodeint: update to lavfi-bridge 2017-08-21 18:12:10 +01:00
autoload.lua TOOLS/lua/autoload.lua: update script comments 2020-02-15 20:41:07 +01:00
command-test.lua player: "subprocess" command should stop immediately in idle mode 2019-10-04 16:30:48 +02:00
cycle-deinterlace-pullup.lua TOOLS/lua: remove tabs from some lua scripts 2014-10-21 00:55:15 +02:00
nan-test.lua vo_gpu, options: don't return NaN through API 2019-10-25 00:25:05 +02:00
observe-all.lua TOOLS/lua/observe-all: explicitly observe all options 2016-09-23 20:49:23 +02:00
ontop-playback.lua TOOLS: add a lua script for a -stay on top only during playback- mode 2015-03-23 20:45:12 +01:00
osd-test.lua command: extend osd-overlay command with bounds reporting 2020-03-06 18:20:11 +01:00
pause-when-minimize.lua w32_common: support the "window-minimized" property 2015-03-09 11:46:06 +01:00
skip-logo.lua skip-logo.lua: remove lua 5.2 warning message 2020-02-29 21:49:14 +01:00
status-line.lua TOOLS/lua/status-line: improve and update 2017-08-04 09:07:37 +01:00
test-hooks.lua client API: provide ways to finish property changes on file changes 2020-03-07 02:52:10 +01:00

README.md

mpv lua scripts

The lua scripts in this folder can be loaded on a one-time basis by adding the option

--script=/path/to/script.lua

to mpv's command line.

Where appropriate, they may also be placed in ~/.config/mpv/scripts/ from where they will be automatically loaded when mpv starts.

This is only a small selection of internally maintained scripts. Some of them are just for testing mpv internals, or serve as examples. An extensive user-edited list of 3rd party scripts is available here:

https://github.com/mpv-player/mpv/wiki/User-Scripts

(Anyone can add their own scripts to that list.)