vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sat May 5 17:43:02 2018 +0300| [5476c7280dfb70a62b24786bccbc9cb781fba107] | committer: Rémi Denis-Courmont
aout: always provide pause > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5476c7280dfb70a62b24786bccbc9cb781fba107 --- include/vlc_aout.h | 25 ++++++++++++++++++++++++- modules/audio_output/sndio.c | 2 +- modules/video_output/decklink.cpp | 2 +- src/audio_output/dec.c | 7 +------ 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/include/vlc_aout.h b/include/vlc_aout.h index 9363532dc9..f03b26d4fb 100644 --- a/include/vlc_aout.h +++ b/include/vlc_aout.h @@ -195,7 +195,15 @@ struct audio_output */ void (*pause)( audio_output_t *, bool pause, mtime_t date); - /**< Pauses or resumes playback (optional, may be NULL). + /**< Pauses or resumes playback (mandatory, cannot be NULL). + * + * This callback pauses or resumes audio playback as quickly as possible. + * When pausing, it is desirable to stop producing sound immediately, but + * retain already queued audio samples in the buffer to play when later + * when resuming. + * + * If pausing is impossible, then aout_PauseDefault() can provide a + * fallback implementation of this callback. * * \param pause pause if true, resume from pause if false * \param date timestamp when the pause or resume was requested @@ -436,6 +444,21 @@ static inline int aout_TimeGetDefault(audio_output_t *aout, return -1; } +/** + * Default implementation for audio_output_t.pause + * + * \warning This default callback implementation is suboptimal as it will + * discard some audio samples. + * Do not use this unless there are really no possible better alternatives. + */ +static inline void aout_PauseDefault(audio_output_t *aout, bool paused, + mtime_t date) +{ + if (paused && aout->flush != NULL) + aout->flush(aout, false); + (void) date; +} + /* Audio output filters */ typedef struct diff --git a/modules/audio_output/sndio.c b/modules/audio_output/sndio.c index c240f505c4..fedcda53ad 100644 --- a/modules/audio_output/sndio.c +++ b/modules/audio_output/sndio.c @@ -180,7 +180,7 @@ static int Start (audio_output_t *aout, audio_sample_format_t *restrict fmt) aout->time_get = TimeGet; aout->play = Play; - aout->pause = NULL; + aout->pause = aout_PauseDefault; aout->flush = Flush; if (sio_onvol(sys->hdl, VolumeChanged, aout)) { diff --git a/modules/video_output/decklink.cpp b/modules/video_output/decklink.cpp index d4cb4aef9f..3d785b9cf8 100644 --- a/modules/video_output/decklink.cpp +++ b/modules/video_output/decklink.cpp @@ -1171,7 +1171,7 @@ static int OpenAudio(vlc_object_t *p_this) aout->flush = Flush; aout->time_get = TimeGet; - aout->pause = NULL; + aout->pause = aout_PauseDefault; aout->stop = NULL; aout->mute_set = NULL; aout->volume_set= NULL; diff --git a/src/audio_output/dec.c b/src/audio_output/dec.c index 1bd7b86dde..28d726f1ba 100644 --- a/src/audio_output/dec.c +++ b/src/audio_output/dec.c @@ -432,12 +432,7 @@ void aout_DecChangePause (audio_output_t *aout, bool paused, mtime_t date) } if (owner->mixer_format.i_format) - { - if (aout->pause != NULL) - aout->pause(aout, paused, date); - else if (paused) - aout->flush(aout, false); - } + aout->pause(aout, paused, date); } void aout_DecChangeRate(audio_output_t *aout, float rate) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
