1
mirror of https://code.videolan.org/videolan/vlc synced 2024-07-21 07:24:15 +02:00
vlc/modules
Thomas Guillem 6c9f07a9ed pulse: calculate the start time from the last date played
stream_latency_cb() is needed to re-calculate the new derrered time (or start
late in the worst case scenario) when the audio device latency changes.

This callback called stream_start() with the first played system date. The
problem is that the delta calculated from stream_start was always late. Using
the last system date seems more logical. Indeed, the delta need to be
calculated from values using the same reference point (and vlc_pa_get_latency()
is calculated from the amount of buffers played).

This issue could be easily reproduced when the first played date was more than
100ms in the future, by using --audio-desync 100 for example.

This issue was not visible in most cases, because the deferred time is small by
default (10ms) and because the stream_latency_cb is often triggered after this
time.

Here are some logs to illustrate this (I added logs that print the played block
pts, the delay since the first play and when the stream_latency_cb is called).

 * Logs without this patch when running vlc with "--audio-desync 100":

Play @110959, first play since 0us
[0000617000008d50] pulse audio output warning: cannot synchronize start
[0000617000008d50] pulse audio output warning: deferring start (110903 us)
Play @142466, first play since 493us
[0000617000008d50] pulse audio output warning: deferring start (110460 us)
Play @174193, first play since 766us
[0000617000008d50] pulse audio output warning: deferring start (110188 us)
Play @205943, first play since 1016us
[0000617000008d50] pulse audio output warning: deferring start (109937 us)
Play @237698, first play since 1261us
[0000617000008d50] pulse audio output warning: deferring start (109692 us)
Play @269435, first play since 1524us
[0000617000008d50] pulse audio output warning: deferring start (109430 us)
Play @301150, first play since 1809us
[0000617000008d50] pulse audio output warning: deferring start (109144 us)
Play @332900, first play since 2059us
[0000617000008d50] pulse audio output warning: deferring start (108895 us)
Play @364648, first play since 2311us
[0000617000008d50] pulse audio output warning: deferring start (108643 us)
Play @396354, first play since 2605us
[0000617000008d50] pulse audio output warning: deferring start (108349 us)
Play @428076, first play since 2883us
[0000617000008d50] pulse audio output warning: deferring start (108069 us)
Play @459788, first play since 3171us
[0000617000008d50] pulse audio output warning: deferring start (107783 us)
Play @491531, first play since 3428us
[0000617000008d50] pulse audio output warning: deferring start (107526 us)
Play @523276, first play since 3683us
[0000617000008d50] pulse audio output warning: deferring start (107271 us)
Play @555026, first play since 3933us
[0000617000008d50] pulse audio output warning: deferring start (107020 us)
stream_latency_cb
[0000617000008d50] pulse audio output warning: starting late (-396346 us)
starting since: 27318
[0000617000008d50] pulse audio output warning: started
[0000617000008d50] main audio output warning: playback too early (-78075): down-sampling

 * Logs with this patch when running vlc with "--audio-desync 100":

Play @110978, first play since 0us
[000055e7c506d030] pulse audio output warning: cannot synchronize start
[000055e7c506d030] pulse audio output warning: deferring start (110952 us)
Play @142708, first play since 270us
[000055e7c506d030] pulse audio output warning: deferring start (110699 us)
Play @174601, first play since 377us
[000055e7c506d030] pulse audio output warning: deferring start (110597 us)
Play @206446, first play since 532us
[000055e7c506d030] pulse audio output warning: deferring start (110443 us)
Play @238302, first play since 676us
[000055e7c506d030] pulse audio output warning: deferring start (110298 us)
Play @270173, first play since 805us
[000055e7c506d030] pulse audio output warning: deferring start (110151 us)
Play @302008, first play since 970us
[000055e7c506d030] pulse audio output warning: deferring start (110005 us)
Play @333914, first play since 1064us
[000055e7c506d030] pulse audio output warning: deferring start (109911 us)
Play @365818, first play since 1160us
[000055e7c506d030] pulse audio output warning: deferring start (109814 us)
Play @397712, first play since 1266us
[000055e7c506d030] pulse audio output warning: deferring start (109708 us)
Play @429588, first play since 1390us
[000055e7c506d030] pulse audio output warning: deferring start (109584 us)
Play @461489, first play since 1489us
[000055e7c506d030] pulse audio output warning: deferring start (109485 us)
Play @493351, first play since 1627us
[000055e7c506d030] pulse audio output warning: deferring start (109347 us)
Play @525261, first play since 1717us
[000055e7c506d030] pulse audio output warning: deferring start (109257 us)
Play @557173, first play since 1805us
[000055e7c506d030] pulse audio output warning: deferring start (109169 us)
stream_latency_cb
[000055e7c506d030] pulse audio output warning: deferring start (74793 us)
Play @555762, first play since 35216us
[000055e7c506d030] pulse audio output warning: deferring start (75748 us)
Play @587642, first play since 35336us
[000055e7c506d030] pulse audio output warning: deferring start (75637 us)
Play @619520, first play since 35458us
[000055e7c506d030] pulse audio output warning: deferring start (75516 us)
Play @651428, first play since 35550us
[000055e7c506d030] pulse audio output warning: deferring start (75425 us)
Play @683305, first play since 35673us
[000055e7c506d030] pulse audio output warning: deferring start (75302 us)
Play @715187, first play since 35791us
[000055e7c506d030] pulse audio output warning: deferring start (75183 us)
Play @747067, first play since 35911us
[000055e7c506d030] pulse audio output warning: deferring start (75063 us)
Play @778930, first play since 36048us
[000055e7c506d030] pulse audio output warning: deferring start (74926 us)
stream_latency_cb
[000055e7c506d030] pulse audio output warning: deferring start (34708 us)
[000055e7c506d030] pulse audio output warning: starting deferred
starting since: 79393
[000055e7c506d030] pulse audio output warning: started

You can see, with this patch, that the resampler is not triggered anymore and
that the stream really start after 100ms (79393 + pulse latency).

In both case, audio and video have the same delay, but in the first case,
the core had to correct it (by playing silence or with the resampler).
2019-01-23 15:31:58 +01:00
..
access access: bluray: fix PG range 2019-01-21 19:18:41 +01:00
access_output remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
arm_neon arm_neon: typo 2018-12-11 22:44:39 +02:00
audio_filter remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
audio_mixer remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
audio_output pulse: calculate the start time from the last date played 2019-01-23 15:31:58 +01:00
codec remove stray $Id 2019-01-17 15:37:36 +01:00
control remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
demux demux: dash: handle infinite repeat in timeline 2019-01-23 13:14:02 +01:00
gui remove stray $Id 2019-01-17 15:37:36 +01:00
hw hw: vaapi: fix a few warnings 2019-01-18 08:36:34 +01:00
keystore keychain: Remove compatibility code for macOS < 10.9 2018-09-24 09:33:38 +02:00
logger console: avoid integer to pointer conversion 2018-11-20 21:52:20 +02:00
lua remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
meta_engine remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
misc medialibrary: Fix TOCTOU when accesing mrls 2019-01-23 11:05:16 +01:00
mux remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
notify remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
packetizer remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
services_discovery sd: avahi: Fix potential use after free 2019-01-23 10:01:17 +01:00
spu remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
stream_extractor remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
stream_filter remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
stream_out aout: remove useless parameter to aout_FiltersNew() 2019-01-18 23:04:19 +02:00
text_renderer remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
video_chroma remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
video_filter aarch64: Use the asm.S header and function macro for merge_sve.S 2019-01-18 22:29:48 +02:00
video_output direct3d11: move the windowed/windowless output format selection in a functions 2019-01-22 13:21:19 +01:00
video_splitter remove the $Id$ in the source code 2019-01-17 12:21:18 +01:00
visualization visual: use vout_Close() directly 2019-01-18 23:09:21 +02:00
.gitignore
common.am modules: common: use full name as MODULE_NAME 2018-10-27 19:09:50 +02:00
list.sh Remove Modules.am support 2017-01-22 16:48:09 +02:00
Makefile.am Makefile: generate Wayland code as private 2018-05-20 20:49:12 +03:00
module.rc.in Fix Malformed Windows VERSIONINFO structures. (#17090) 2016-06-24 18:37:58 +02:00
MODULES_LIST dlna: add a DLNA stream out 2019-01-10 17:14:00 +01:00