]> git.sesse.net Git - vlc/blobdiff - src/audio_output/input.c
aout: privatize some attributes
[vlc] / src / audio_output / input.c
index 8ed95ceabbdf84e29f0e3a931f53042506df856b..fcacdbf45ba11f34a0c4f61228b2254716cf32c4 100644 (file)
@@ -70,6 +70,7 @@ static vout_thread_t *RequestVout( void *,
  *****************************************************************************/
 int aout_InputNew( audio_output_t * p_aout, aout_input_t * p_input, const aout_request_vout_t *p_request_vout )
 {
+    aout_owner_t *owner = aout_owner (p_aout);
     audio_sample_format_t chain_input_format;
     audio_sample_format_t chain_output_format;
     vlc_value_t val, text;
@@ -81,7 +82,7 @@ int aout_InputNew( audio_output_t * p_aout, aout_input_t * p_input, const aout_r
     p_input->i_nb_resamplers = p_input->i_nb_filters = 0;
 
     /* Prepare FIFO. */
-    aout_FifoInit( p_aout, &p_input->fifo, p_aout->mixer_format.i_rate );
+    aout_FifoInit (p_aout, &p_input->fifo, owner->mixer_format.i_rate);
 
     /* */
     if( p_request_vout )
@@ -96,7 +97,7 @@ int aout_InputNew( audio_output_t * p_aout, aout_input_t * p_input, const aout_r
 
     /* Prepare format structure */
     chain_input_format  = p_input->input;
-    chain_output_format = p_aout->mixer_format;
+    chain_output_format = owner->mixer_format;
     chain_output_format.i_rate = p_input->input.i_rate;
     aout_FormatPrepare( &chain_output_format );
 
@@ -384,20 +385,20 @@ int aout_InputNew( audio_output_t * p_aout, aout_input_t * p_input, const aout_r
     }
 
     /* Create resamplers. */
-    if ( !AOUT_FMT_NON_LINEAR( &p_aout->mixer_format ) )
+    if (!AOUT_FMT_NON_LINEAR(&owner->mixer_format))
     {
         chain_output_format.i_rate = (__MAX(p_input->input.i_rate,
-                                            p_aout->mixer_format.i_rate)
+                                            owner->mixer_format.i_rate)
                                  * (100 + AOUT_MAX_RESAMPLING)) / 100;
-        if ( chain_output_format.i_rate == p_aout->mixer_format.i_rate )
+        if ( chain_output_format.i_rate == owner->mixer_format.i_rate )
         {
             /* Just in case... */
             chain_output_format.i_rate++;
         }
-        if ( aout_FiltersCreatePipeline( p_aout, p_input->pp_resamplers,
-                                         &p_input->i_nb_resamplers,
-                                         &chain_output_format,
-                                         &p_aout->mixer_format ) < 0 )
+        if (aout_FiltersCreatePipeline (p_aout, p_input->pp_resamplers,
+                                        &p_input->i_nb_resamplers,
+                                        &chain_output_format,
+                                        &owner->mixer_format) < 0)
         {
             inputFailure( p_aout, p_input, "couldn't set a resampler pipeline");
             return -1;
@@ -458,6 +459,7 @@ int aout_InputDelete( audio_output_t * p_aout, aout_input_t * p_input )
  *****************************************************************************/
 void aout_InputCheckAndRestart( audio_output_t * p_aout, aout_input_t * p_input )
 {
+    aout_owner_t *owner = aout_owner (p_aout);
     AOUT_ASSERT_LOCKED;
 
     if( !p_input->b_restart )
@@ -466,16 +468,14 @@ void aout_InputCheckAndRestart( audio_output_t * p_aout, aout_input_t * p_input
     /* A little trick to avoid loosing our input fifo and properties */
 
     aout_fifo_t fifo = p_input->fifo;
-    bool b_paused = p_input->b_paused;
     mtime_t i_pause_date = p_input->i_pause_date;
 
-    aout_FifoInit( p_aout, &p_input->fifo, p_aout->mixer_format.i_rate );
+    aout_FifoInit (p_aout, &p_input->fifo, owner->mixer_format.i_rate);
 
     aout_InputDelete( p_aout, p_input );
 
     aout_InputNew( p_aout, p_input, &p_input->request_vout );
     p_input->fifo = fifo;
-    p_input->b_paused = b_paused;
     p_input->i_pause_date = i_pause_date;
 
     p_input->b_restart = false;
@@ -487,8 +487,8 @@ void aout_InputCheckAndRestart( audio_output_t * p_aout, aout_input_t * p_input
  *****************************************************************************/
 /* XXX Do not activate it !! */
 //#define AOUT_PROCESS_BEFORE_CHEKS
-void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
-                     aout_buffer_t * p_buffer, int i_input_rate )
+block_t *aout_InputPlay( audio_output_t *p_aout, aout_input_t *p_input,
+                         block_t *p_buffer, int i_input_rate )
 {
     mtime_t start_date;
     AOUT_ASSERT_LOCKED;
@@ -496,7 +496,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
     if( i_input_rate != INPUT_RATE_DEFAULT && p_input->p_playback_rate_filter == NULL )
     {
         inputDrop( p_input, p_buffer );
-        return;
+        return NULL;
     }
 
 #ifdef AOUT_PROCESS_BEFORE_CHEKS
@@ -504,7 +504,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
     aout_FiltersPlay( p_aout, p_input->pp_filters, p_input->i_nb_filters,
                       &p_buffer );
     if( !p_buffer )
-        return;
+        return NULL;
 
     /* Actually run the resampler now. */
     if ( p_input->i_nb_resamplers > 0 )
@@ -516,11 +516,11 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
     }
 
     if( !p_buffer )
-        return;
+        return NULL;
     if( p_buffer->i_nb_samples <= 0 )
     {
         block_Release( p_buffer );
-        return;
+        return NULL;
     }
 #endif
 
@@ -542,7 +542,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
      * with the next incoming buffer. */
     start_date = aout_FifoNextStart( &p_input->fifo );
 
-    if ( start_date != 0 && start_date < now )
+    if ( start_date != VLC_TS_INVALID && start_date < now )
     {
         /* The decoder is _very_ late. This can only happen if the user
          * pauses the stream (or if the decoder is buggy, which cannot
@@ -550,12 +550,12 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
         msg_Warn( p_aout, "computed PTS is out of range (%"PRId64"), "
                   "clearing out", now - start_date );
         aout_FifoReset( &p_input->fifo );
-        aout_FifoReset( &p_aout->fifo );
+        aout_OutputFlush( p_aout, false );
         if ( p_input->i_resampling_type != AOUT_RESAMPLING_NONE )
             msg_Warn( p_aout, "timing screwed, stopping resampling" );
         inputResamplingStop( p_input );
         p_buffer->i_flags |= BLOCK_FLAG_DISCONTINUITY;
-        start_date = 0;
+        start_date = VLC_TS_INVALID;
     }
 
     if ( p_buffer->i_pts < now + AOUT_MIN_PREPARE_TIME )
@@ -566,12 +566,12 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
                   now - p_buffer->i_pts );
         inputDrop( p_input, p_buffer );
         inputResamplingStop( p_input );
-        return;
+        return NULL;
     }
 
     /* If the audio drift is too big then it's not worth trying to resample
      * the audio. */
-    if( !start_date )
+    if( start_date == VLC_TS_INVALID )
         start_date = p_buffer->i_pts;
 
     mtime_t drift = start_date - p_buffer->i_pts;
@@ -581,6 +581,7 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
         msg_Warn( p_aout, "buffer way too early (%"PRId64"), clearing queue",
                   drift );
         aout_FifoReset( &p_input->fifo );
+        aout_OutputFlush( p_aout, false );
         if ( p_input->i_resampling_type != AOUT_RESAMPLING_NONE )
             msg_Warn( p_aout, "timing screwed, stopping resampling" );
         inputResamplingStop( p_input );
@@ -594,14 +595,14 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
         msg_Warn( p_aout, "buffer way too late (%"PRId64"), dropping buffer",
                   drift );
         inputDrop( p_input, p_buffer );
-        return;
+        return NULL;
     }
 
 #ifndef AOUT_PROCESS_BEFORE_CHEKS
     /* Run pre-filters. */
     aout_FiltersPlay( p_input->pp_filters, p_input->i_nb_filters, &p_buffer );
     if( !p_buffer )
-        return;
+        return NULL;
 #endif
 
     /* Run the resampler if needed.
@@ -683,17 +684,17 @@ void aout_InputPlay( audio_output_t * p_aout, aout_input_t * p_input,
     }
 
     if( !p_buffer )
-        return;
+        return NULL;
     if( p_buffer->i_nb_samples <= 0 )
     {
         block_Release( p_buffer );
-        return;
+        return NULL;
     }
 #endif
 
     /* Adding the start date will be managed by aout_FifoPush(). */
     p_buffer->i_pts = start_date;
-    aout_FifoPush( &p_input->fifo, p_buffer );
+    return p_buffer;
 }
 
 /*****************************************************************************
@@ -857,12 +858,13 @@ static int ReplayGainCallback( vlc_object_t *p_this, char const *psz_cmd,
 {
     VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval);
     VLC_UNUSED(newval); VLC_UNUSED(p_data);
-    audio_output_t *p_aout = (audio_output_t *)p_this;
+    audio_output_t *aout = (audio_output_t *)p_this;
+    aout_owner_t *owner = aout_owner (aout);
 
-    aout_lock( p_aout );
-    if( p_aout->p_input != NULL )
-        ReplayGainSelect( p_aout, p_aout->p_input );
-    aout_unlock( p_aout );
+    aout_lock (aout);
+    if (owner->input != NULL)
+        ReplayGainSelect (aout, owner->input);
+    aout_unlock (aout);
 
     return VLC_SUCCESS;
 }