[vlc-devel] [PATCH 04/17] audio_output: aout_DecPlay: signal if the aout changed or failed

Thomas Guillem thomas at gllm.fr
Wed Jul 27 17:27:20 CEST 2016


---
 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);
-- 
2.8.1



More information about the vlc-devel mailing list