lib/media_player: add the vlc_player Timer API
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 time updated is the output time, unlike libvlc_media_player_get_position()/libvlc_media_player_get_time() that use the input time. It can fixes a very big delay between the UI time widgets and the outputted content (depending on the audio output module, this delay could be close to 2seconds).
The libvlc_media_player_timer_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_timer_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_add_timer(): 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_timer_point_interpolate() to get the last time.