My bad, libvlc_time_t is in ms. The timer API should use the sane unit
than libvlc_clock(), that is us in int64_t.
Also add missing vlc_tick_t <-> us conversion (no harm since 1 tick = 1
us for now).
Any LibVLC users could request a timer from the player. This Media Player
timer has its own event API since:
- It is only used to receive time update points:
- The timer is not locked by the player lock. Indeed the player lock can be
too "slow" (it can be recursive, it is used by the playlist, and is it held
when sending all events). So it's not a good idea to hold this lock for
every frame/sample updates.
- The minimum delay between each updates can be configured: it avoids to flood
the UI when playing a media file with very high fps or very low audio sample
size.
The libvlc_media_player_time_point struct is used by timer update
callbacks. This public struct hold all the informations to interpolate a
time at a given date. It can be done with the
libvlc_media_player_time_point_interpolate() helper. That way, it is
now possible to get the last player time without holding any locks.
There is only one type of timer (for now):
libvlc_media_player_watch_time(): update are sent only when a frame or a
sample is outputted. Users of this timer should take into account that
the delay between each updates is not regular and can be up to 1seconds
(depending of the input). In that case, they should use their own timer
(from their mainloop) and use
libvlc_media_player_time_point_interpolate() to get the last time.
As discussed on vlc-devel a few years back, it is desirable, if not
sometimes necessary, for media objects to be independent from any given
instance.
A typical reason would be to preparse media in one instance but play
them in another.
Media parsing can occur on any instance, and in all likelihood, a freed
media is not being parsed by any instance.
Note: to cancel parsing, libvlc_media_parse_stop() can be used.
Core/LibVLC code should only inherit values from core variables.
Defaults cannot be inherited from variables that may not exist as
configuration items.
Fixes#26881.