The vfr class (understandably) does not like timecode lists with only
one element, so the current default script breaks when opening images.
So to not bloat the default script too much we just ignore
__aegi_timecodes in the provider in these cases.
This happens via VapourSynth's message logger.
Also add wrapper functions for this to aegisub_vs.py and add progress
updates everywhere - both to improve UX and to help with debugging for
when scripts get stuck somewhere.
On Windows, plugins are shipped with Aegisub now and loaded from
aegisub_vs.py, so user plugins installed out of Aegisub are more
likely to just interfere with that (like when the user has an
old version of libvslsmashsource installed).
So this option defaults to off on Windows, but to on everywhere else
since VS plugins aren't shipped with Aegisub there.
Note that this option only disables autoloading of user plugins.
VapourSynth loads system plugins no matter what.
Add a utility library that wraps LWLibavSource and can parse its .lwi
file to obtain timecodes and keyframes. It also contains a function to
generate and save keyframes using WWXD or Scxvid. Update the default
scripts to use these functions.
Unlike the other arguments for the resize function, "range_in" does not
use the same format as in the frame props. A frame prop _Range=1 means
limited, while an argument range_in=1 means full range.
Aegisub will automatically override the YCbCr Matrix field of the
current file's Script Properties with the video's reported color space.
The FFMS2 provider guesses a color space for all videos, but we don't
do this for Vapoursynth. Thus, we now disable this overriding whenever
the colorspace isn't known.
On Windows, Python changes the application's locale upon being called,
which will break wxwidgets, causing various assertion error dialogs or
even crashes (for example when interacting with any sort of float edit
control). Saving the locale and restoring it afterwards seems to be
the only really possible way to remedy this.
Since FileNotFound exceptions don't abort the provider search, opening
an invalid path would show errors such as "vapoursynth not found" when
VapourSynth wasn't installed, even if VapourSynth wasn't selected as the
default video provider.
This default script will be executed to load any file whose file name
extension is not .py or .vpy .
The gui code for setting the default script is still a bit wonky as it
doesn't fit the rest of the preferences pages nicely, but it works for
now.
The previous logic wouldn't compile on linux using clang.
With the meson build requiring c++14, there's no need for platform
specific code. Really, the entire agi::util::sleep_for function could be
removed entirely, but I'll keep the patch minimal for now.