vlc | branch: master | Thomas Guillem <[email protected]> | Wed Jul 27 17:08:30 2016 +0200| [594d5b26275a88237b23e7d837ef3e9cc57c843a] | committer: Thomas Guillem
audio_output: aout_DecPlay: signal if the aout changed or failed > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=594d5b26275a88237b23e7d837ef3e9cc57c843a --- src/audio_output/aout_internal.h | 6 +++++- src/audio_output/dec.c | 11 +++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/audio_output/aout_internal.h b/src/audio_output/aout_internal.h index 4990597..c6edf8e 100644 --- a/src/audio_output/aout_internal.h +++ b/src/audio_output/aout_internal.h @@ -134,10 +134,14 @@ bool aout_ChangeFilterString( vlc_object_t *manager, vlc_object_t *aout, const char *var, const char *name, bool b_add ); /* From dec.c */ +#define AOUT_DEC_SUCCESS 0 +#define AOUT_DEC_CHANGED 1 +#define AOUT_DEC_FAILED VLC_EGENERIC + int aout_DecNew(audio_output_t *, const audio_sample_format_t *, const audio_replay_gain_t *, const aout_request_vout_t *); void aout_DecDelete(audio_output_t *); -void aout_DecPlay(audio_output_t *, block_t *, int i_input_rate); +int aout_DecPlay(audio_output_t *, block_t *, int i_input_rate); void aout_DecGetResetStats(audio_output_t *, unsigned *, unsigned *); void aout_DecChangePause(audio_output_t *, bool b_paused, mtime_t i_date); void aout_DecFlush(audio_output_t *, bool wait); diff --git a/src/audio_output/dec.c b/src/audio_output/dec.c index 84c2f60..c1cc1db 100644 --- a/src/audio_output/dec.c +++ b/src/audio_output/dec.c @@ -135,6 +135,7 @@ static int aout_CheckReady (audio_output_t *aout) { aout_owner_t *owner = aout_owner (aout); + int status = AOUT_DEC_SUCCESS; int restart = atomic_exchange (&owner->restart, 0); if (unlikely(restart)) { @@ -151,6 +152,7 @@ static int aout_CheckReady (audio_output_t *aout) owner->mixer_format.i_format = 0; aout_volume_SetFormat (owner->volume, owner->mixer_format.i_format); + status = AOUT_DEC_CHANGED; } msg_Dbg (aout, "restarting filters..."); @@ -172,7 +174,7 @@ static int aout_CheckReady (audio_output_t *aout) * left over by an audio visualization: input_resource_TerminatVout(MAGIC HERE); */ } - return (owner->mixer_format.i_format) ? 0 : -1; + return (owner->mixer_format.i_format) ? status : AOUT_DEC_FAILED; } /** @@ -339,7 +341,7 @@ static void aout_DecSynchronize (audio_output_t *aout, mtime_t dec_pts, /***************************************************************************** * aout_DecPlay : filter & mix the decoded buffer *****************************************************************************/ -void aout_DecPlay (audio_output_t *aout, block_t *block, int input_rate) +int aout_DecPlay (audio_output_t *aout, block_t *block, int input_rate) { aout_owner_t *owner = aout_owner (aout); @@ -351,7 +353,8 @@ void aout_DecPlay (audio_output_t *aout, block_t *block, int input_rate) / owner->input_format.i_rate; aout_OutputLock (aout); - if (unlikely(aout_CheckReady (aout))) + int ret = aout_CheckReady (aout); + if (unlikely(ret == AOUT_DEC_FAILED)) goto drop; /* Pipeline is unrecoverably broken :-( */ const mtime_t now = mdate (), advance = block->i_pts - now; @@ -388,7 +391,7 @@ void aout_DecPlay (audio_output_t *aout, block_t *block, int input_rate) atomic_fetch_add(&owner->buffers_played, 1); out: aout_OutputUnlock (aout); - return; + return ret; drop: owner->sync.discontinuity = true; block_Release (block); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
