]> git.sesse.net Git - vlc/commitdiff
aout: only (directly) access output FIFO from output functions
authorRémi Denis-Courmont <remi@remlab.net>
Mon, 1 Aug 2011 20:25:43 +0000 (23:25 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Mon, 1 Aug 2011 20:30:02 +0000 (23:30 +0300)
src/audio_output/dec.c
src/audio_output/input.c
src/audio_output/output.c

index 21edfca3a3681af0a1bc71f3a91d063becd58d46..bbbf7f07776d0a04968d8ebf68cb17056a30d9b7 100644 (file)
@@ -225,6 +225,8 @@ void aout_DecChangePause( audio_output_t *p_aout, aout_input_t *p_input, bool b_
     aout_lock( p_aout );
     assert( p_aout->p_input == p_input );
 
+    aout_OutputPause( p_aout, b_paused, i_date );
+
     if( b_paused )
     {
         p_input->i_pause_date = i_date;
@@ -236,10 +238,7 @@ void aout_DecChangePause( audio_output_t *p_aout, aout_input_t *p_input, bool b_
         mtime_t i_duration = i_date - p_input->i_pause_date;
         p_input->i_pause_date = VLC_TS_INVALID;
         aout_FifoMoveDates( &p_input->fifo, i_duration );
-        aout_FifoMoveDates( &p_aout->fifo, i_duration );
     }
-
-    aout_OutputPause( p_aout, b_paused, i_date );
     aout_unlock( p_aout );
 }
 
@@ -247,7 +246,6 @@ void aout_DecFlush( audio_output_t *p_aout, aout_input_t *p_input )
 {
     aout_lock( p_aout );
     aout_FifoReset( &p_input->fifo );
-    aout_FifoReset( &p_aout->fifo );
     aout_OutputFlush( p_aout, false );
     aout_unlock( p_aout );
 }
index 70c581a7beed83f19e7ae28aa9ed433b77b0a0b4..1ef4c70b1737da190422380645775ba88ab7f906 100644 (file)
@@ -548,7 +548,7 @@ 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 );
@@ -579,7 +579,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_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 );
index 9258fc927559d77409365349848bf9ddc4422641..6f63222b452621ce3e94b777e4cd5af8882344dd 100644 (file)
@@ -250,6 +250,12 @@ void aout_OutputPause( audio_output_t *aout, bool pause, mtime_t date )
 
     if( aout->pf_pause != NULL )
         aout->pf_pause( aout, pause, date );
+    if( !pause )
+    {
+        mtime_t duration = date - aout->p_input->i_pause_date;
+        /* XXX: ^ onk onk! gruik! ^ */
+        aout_FifoMoveDates( &aout->fifo, duration );
+    }
 }
 
 /**
@@ -264,6 +270,7 @@ void aout_OutputFlush( audio_output_t *aout, bool wait )
 
     if( aout->pf_flush != NULL )
         aout->pf_flush( aout, wait );
+    aout_FifoReset( &aout->fifo );
 }