]> git.sesse.net Git - vlc/commitdiff
* audio_output/audio_output.c :
authorMichel Kaempf <maxx@videolan.org>
Tue, 5 Oct 1999 23:41:31 +0000 (23:41 +0000)
committerMichel Kaempf <maxx@videolan.org>
Tue, 5 Oct 1999 23:41:31 +0000 (23:41 +0000)
- Suppression totale de la synchro en dates absolues ;
- Rajout de la re-synchro en dates relatives (il est donc d�sormais
possible de couper un flux et de le relancer, ou de changer de flux,
tout en gardant le m�me input, le m�me d�codeur audio... pratique pour
le pseudo-changement de cha�ne pr�vu � la War :-) ;

--
MaXX

src/audio_output/audio_output.c

index 06f9a6dc274c4f1cd03cb3285cdd3aef129f5843..5c9f1047488b6709c3dc11a24467fdf1a6f47d68 100644 (file)
@@ -52,7 +52,7 @@ void aout_Thread_S16_Stereo     ( aout_thread_t * p_aout );
 void aout_Thread_U16_Stereo     ( aout_thread_t * p_aout );
 
 static __inline__ void InitializeIncrement( aout_increment_t * p_increment, long l_numerator, long l_denominator );
-static __inline__ int NextFrame( aout_thread_t * p_aout, aout_fifo_t * p_fifo, mtime_t aout_date );
+static __inline__ int NextFrame( aout_thread_t * p_aout, aout_fifo_t * p_fifo/*, mtime_t aout_date*/ );
 
 /******************************************************************************
  * aout_Open
@@ -426,7 +426,7 @@ static __inline__ void InitializeIncrement( aout_increment_t * p_increment, long
 /******************************************************************************
  * NextFrame
  ******************************************************************************/
-static __inline__ int NextFrame( aout_thread_t * p_aout, aout_fifo_t * p_fifo, mtime_t aout_date )
+static __inline__ int NextFrame( aout_thread_t * p_aout, aout_fifo_t * p_fifo/*, mtime_t aout_date*/ )
 {
     long l_units, l_rate;
 
@@ -469,8 +469,12 @@ static __inline__ int NextFrame( aout_thread_t * p_aout, aout_fifo_t * p_fifo, m
             if ( aout_date < p_fifo->date[p_fifo->l_next_frame] )
             {
 */
-                p_fifo->b_next_frame = 1;
-                break;
+            if ( p_fifo->date[p_fifo->l_next_frame] - p_fifo->date[p_fifo->l_start_frame] > 1000000 )
+            {
+                p_fifo->date[p_fifo->l_start_frame] = p_fifo->date[p_fifo->l_next_frame] - ((1000000 * AOUT_FRAME_SIZE * ((mtime_t)((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE)) >> p_fifo->b_stereo) / ((mtime_t)p_fifo->l_rate));
+            }
+            p_fifo->b_next_frame = 1;
+            break;
 /*
             }
             else
@@ -622,7 +626,7 @@ void aout_Thread_S16_Stereo( aout_thread_t * p_aout )
                     {
                         if ( !p_aout->fifo[i_fifo].b_next_frame )
                         {
-                            if ( NextFrame(p_aout, &p_aout->fifo[i_fifo], p_aout->date + (mtime_t)((l_buffer >> p_aout->dsp.b_stereo) / p_aout->dsp.l_rate)) )
+                            if ( NextFrame(p_aout, &p_aout->fifo[i_fifo]/*, p_aout->date + (mtime_t)((l_buffer >> p_aout->dsp.b_stereo) / p_aout->dsp.l_rate)*/) )
                             {
                                 break;
                             }
@@ -690,7 +694,7 @@ void aout_Thread_S16_Stereo( aout_thread_t * p_aout )
                     {
                         if ( !p_aout->fifo[i_fifo].b_next_frame )
                         {
-                            if ( NextFrame(p_aout, &p_aout->fifo[i_fifo], p_aout->date + (mtime_t)((l_buffer >> p_aout->dsp.b_stereo) / p_aout->dsp.l_rate)) )
+                            if ( NextFrame(p_aout, &p_aout->fifo[i_fifo]/*, p_aout->date + (mtime_t)((l_buffer >> p_aout->dsp.b_stereo) / p_aout->dsp.l_rate)*/) )
                             {
                                 break;
                             }