[vlc-devel] [PATCH 0/8] asynchronous aout stream

Thomas Guillem thomas at gllm.fr
Fri Mar 8 17:24:38 CET 2019


Hello,

This patch set should be applied on top of my clock branch:
https://code.videolan.org/jbk/vlc/commits/clock-core/32

All aout stream commands are now asynchronous.

>From an aout module point view, this mean that play/drain/flush/start/stop are
always executed from the same thread. This was 99.99% the case before this
patch set since we don't have many asynchronous audio decoder (only Android
MediaCodec, that is disabled). Therefore, asynchronous audio decoders can now be
implemented without any races (not sure if many).

This is the first step for gapless playback since the aout can now be
controlled without blocking.

Indeed, my idea for a (very simple) gapless is the following:

- The player can't prevent the aout module to stop or drain if there is next
  media to play

- In that case, aout_Drain() will put a timer corresponding to a little less
  than the aout module delay 

- If no aout_Start() is called before the timer is fired, the aout will drain
  and stop.

- If a new aout_Start() is called before the timer is fired, it will cancel the
  timer, compare the audio_format with the previous one and skip the
  drain/stop/start if it is the same.

This new Aout Async API make the previous much easier.

Indeed, this will work only if the aout delay is bigger than the input
buffering of the next input, but this is a good first step.

Regards,

Thomas Guillem (8):
  aout: always flush from aout_DecDelete
  aout: add Async API
  decoder: use new aout async API
  aout: move dec.c to stream.c
  aout: rename aout_DecGetResetStats to aout_GetResetStats
  aout: rename aout_Dec* to aout_Stream*
  aout: stream: remove atomic
  aout: pass viewpoint via Async API

 src/Makefile.am                      |   3 +-
 src/audio_output/aout_internal.h     |  65 ++++--
 src/audio_output/async.c             | 315 +++++++++++++++++++++++++++
 src/audio_output/output.c            |  27 +--
 src/audio_output/{dec.c => stream.c} |  70 +++---
 src/input/decoder.c                  |  27 ++-
 6 files changed, 425 insertions(+), 82 deletions(-)
 create mode 100644 src/audio_output/async.c
 rename src/audio_output/{dec.c => stream.c} (90%)

-- 
2.20.1



More information about the vlc-devel mailing list