]> git.sesse.net Git - vlc/commitdiff
* audio_output/audio_output.c :
authorMichel Kaempf <maxx@videolan.org>
Mon, 24 Jan 2000 02:07:29 +0000 (02:07 +0000)
committerMichel Kaempf <maxx@videolan.org>
Mon, 24 Jan 2000 02:07:29 +0000 (02:07 +0000)
- impl�mentation de la synkro (qui punit m�chant) ;

* audio_decoder/audio_decoder.c, ac3_decoder/ac3_decoder.c :
- rajout de vlc_cond_signal() afin de pr�venir l'audio_output que de
nouveaux samples ont �t� d�cod�s ;

* Makefile :
- rajout de l'options de compilation -g ;
- utilisation du old decoder (synkro) ;

* include/config.h :
- suppression des messages de debug ;

Makefile
include/config.h
src/ac3_decoder/ac3_decoder.c
src/audio_decoder/audio_decoder.c
src/audio_output/audio_output.c

index f115b4e7249091ecc045c601799dd233be9f12d2..797b9f5935bad2411c37a8d49e7cb5f78531a0c1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -27,8 +27,8 @@ ARCH=MMX
 #ARCH=SPARC
 
 # Decoder choice - ?? old decoder will be removed soon
-#DECODER=old
-DECODER=new
+DECODER=old
+#DECODER=new
 # !!! don't forget to run this command after changing decoder type !!!
 # touch input/input.c input/input_ctrl.c include/vlc.h include/video_decoder.h
 
@@ -90,7 +90,7 @@ CCFLAGS += -D_REENTRANT
 CCFLAGS += -D_GNU_SOURCE
 
 # Optimizations : don't compile debug versions with them
-#CCFLAGS += -g
+CCFLAGS += -g
 CCFLAGS += -O6
 CCFLAGS += -ffast-math -funroll-loops -fargument-noalias-global
 CCFLAGS += -fomit-frame-pointer
index 608a381648b06fa384cbb36fb72494d3168897f4..de28cb598aaaf83bb7c385f7ba63ccd37e2d5b83 100644 (file)
@@ -73,7 +73,7 @@
  *******************************************************************************/
 
 /* General debugging support */
-#define DEBUG
+//#define DEBUG
 
 /* Modules specific debugging - this will produce a lot of output, but can be
  * usefull to track a bug */
@@ -85,8 +85,8 @@
 /* Debugging log file - if defined, a file can be used to store all messages. If
  * DEBUG_LOG_ONLY is defined, debug messages will only be printed to the log and
  * will not appear on the screen */
-#define DEBUG_LOG                       "vlc-debug.log"
-#define DEBUG_LOG_ONLY
+//#define DEBUG_LOG                       "vlc-debug.log"
+//#define DEBUG_LOG_ONLY
 
 /*******************************************************************************
  * General configuration
 
 /* Maximal number of commands which can be saved in history list */
 #define INTF_CONSOLE_MAX_HISTORY        20
-
index dc0d0f3971eeaede06b0a45fe09765191586548d..f0cdfdda066b9683d0154ab2c38f52f1f97d1919 100644 (file)
@@ -3,6 +3,15 @@
  * (c)1999 VideoLAN
  *****************************************************************************/
 
+/*
+ * TODO :
+ *
+ * - vérifier l'état de la fifo de sortie avant d'y stocker les samples
+ *   décodés ;
+ * - vlc_cond_signal() / vlc_cond_wait()
+ *
+ */
+
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
index 52870a1520bbebd777cd85f318ba7c8038fbc96c..2c10b6187573daac8941b670460e796ade8f2f4e 100644 (file)
@@ -5,7 +5,10 @@
 
 /*
  * TODO :
- * - Optimiser les NeedBits() et les GetBits() du code là où c'est possible
+ *
+ * - optimiser les NeedBits() et les GetBits() du code là où c'est possible ;
+ * - vlc_cond_signal() / vlc_cond_wait() ;
+ *
  */
 
 /******************************************************************************
@@ -855,6 +858,7 @@ static void RunThread( adec_thread_t * p_adec )
                     if ( adec_Layer2_Stereo(p_adec) )
                     {
                         vlc_mutex_lock( &p_adec->p_aout_fifo->data_lock );
+
                         /* Frame 1 */
                         p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
                         /* Frame 2 */
@@ -872,6 +876,9 @@ static void RunThread( adec_thread_t * p_adec )
                         /* Frame 6 */
                         p_adec->p_aout_fifo->date[p_adec->p_aout_fifo->l_end_frame] = LAST_MDATE;
                         p_adec->p_aout_fifo->l_end_frame = (p_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE;
+
+                        vlc_cond_signal( &p_adec->p_aout_fifo->data_wait );
+
                         vlc_mutex_unlock( &p_adec->p_aout_fifo->data_lock );
                     }
                 }
index 62f029706299b80ec9ea5d964390142adb97f16f..2a06575150a2abd2bf56187e39691465b5c212f1 100644 (file)
@@ -12,7 +12,6 @@
  *     à chaque boucle
  *   = Utiliser des tables pour les gros calculs
  * - Faire une structure différente pour intf/adec fifo
- * - Rajouter des vlc_cond_signal ?
  *
  */
 
@@ -158,7 +157,7 @@ static int aout_SpawnThread( aout_thread_t * p_aout )
      * AOUT_BUFFER_DURATION is given in microseconds, the output rate is given
      * in Hz, that's why we need to divide by 10^6 microseconds (1 second) */
     p_aout->l_units = (long)( ((s64)p_aout->dsp.l_rate * AOUT_BUFFER_DURATION) / 1000000 );
-    p_aout->l_msleep = ((s64)p_aout->l_units * 1000000) / (s64)p_aout->dsp.l_rate;
+    p_aout->l_msleep = (long)( ((s64)p_aout->l_units * 1000000) / (s64)p_aout->dsp.l_rate );
 
     /* Make aout_thread point to the right thread function, and compute the
      * byte size of the audio output buffer */
@@ -465,134 +464,52 @@ static __inline__ int NextFrame( aout_thread_t * p_aout, aout_fifo_t * p_fifo, m
         }
     }
 
-#if 0
-    if ( aout_date < p_fifo->date[p_fifo->l_start_frame] - 100000 )
-    {
-        fprintf( stderr, "-" );
-       p_fifo->l_dr = 0;
-        vlc_mutex_unlock( &p_fifo->data_lock );
-        return( -1 );
-    }
-#endif
-
     /* We are looking for the next dated frame */
     while ( 1 )
     {
-    while ( p_fifo->l_next_frame != p_fifo->l_end_frame )
-    {
-        if ( p_fifo->date[p_fifo->l_next_frame] != LAST_MDATE )
+        while ( p_fifo->l_next_frame != p_fifo->l_end_frame )
         {
-#if 0
-               if ( p_fifo->date[p_fifo->l_start_frame] >= p_fifo->date[p_fifo->l_next_frame] )
-               {
-                       fprintf( stderr, "aout debug: %lli >= %lli\n", p_fifo->date[p_fifo->l_start_frame], p_fifo->date[p_fifo->l_next_frame] );
-                       p_fifo->date[p_fifo->l_start_frame] = p_fifo->date[p_fifo->l_next_frame] - ((1000000 * ((mtime_t)(p_fifo->l_frame_size * ((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE))) >> p_fifo->b_stereo) / ((mtime_t)p_fifo->l_rate));
-                       
-               }
-               else if ( (p_fifo->date[p_fifo->l_next_frame] - p_fifo->date[p_fifo->l_start_frame]) > 1000000 )
-               {
-                       fprintf( stderr, "aout debug: (%lli - %lli) > 1000000\n", p_fifo->date[p_fifo->l_next_frame], p_fifo->date[p_fifo->l_start_frame] );
-                       p_fifo->date[p_fifo->l_start_frame] = p_fifo->date[p_fifo->l_next_frame] - ((1000000 * ((mtime_t)(p_fifo->l_frame_size * ((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE))) >> p_fifo->b_stereo) / ((mtime_t)p_fifo->l_rate));
-               }
-#endif
-#if 0
-            if ( aout_date < p_fifo->date[p_fifo->l_next_frame] + 100000 )
+            if ( p_fifo->date[p_fifo->l_next_frame] != LAST_MDATE )
             {
-#endif
                 p_fifo->b_next_frame = 1;
                 break;
-#if 0
             }
             else
             {
-                fprintf( stderr, "+" );
-//                p_fifo->b_next_frame = 1;
-//                break;
-                p_fifo->l_start_frame = p_fifo->l_next_frame;
-                p_fifo->l_unit = p_fifo->l_start_frame * (p_fifo->l_frame_size >> p_fifo->b_stereo);
-                p_fifo->l_dr = 0;
+                p_fifo->l_next_frame = (p_fifo->l_next_frame + 1) & AOUT_FIFO_SIZE;
             }
-#endif
         }
-        p_fifo->l_next_frame = (p_fifo->l_next_frame + 1) & AOUT_FIFO_SIZE;
-    }
-        if ( p_fifo->l_next_frame == p_fifo->l_end_frame )
-       {
-        if ( (((p_fifo->l_end_frame + 1) - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) == 0 )
+
+        if ( p_fifo->b_next_frame == 1 )
         {
-        fprintf( stderr, "aout debug: synkro suxx rocks;\n" );
-            p_fifo->l_start_frame = 0;
-            p_fifo->b_start_frame = 0;
-            /* p_fifo->l_next_frame = 0; */
-            /* p_fifo->b_next_frame = 0; */
-            p_fifo->l_end_frame = 0;
-        vlc_mutex_unlock( &p_fifo->data_lock );
-        return( -1 );
-       }
-       while ( p_fifo->l_next_frame == p_fifo->l_end_frame )
-       {
-               vlc_cond_wait(&p_fifo->data_wait, &p_fifo->data_lock);
-       }
-       }
-       else
-       {
-               break;
-       }
-    }
-#if 0
-    if ( p_fifo->l_next_frame == p_fifo->l_end_frame )
-    {
-        fprintf( stderr, "aout debug: synkro suxx rocks (%li);\n", p_fifo->l_dr );
-        if ( (((p_fifo->l_end_frame + 1) - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) == 0 )
+            break;
+        }
+        else
         {
-            p_fifo->l_start_frame = 0;
-            p_fifo->b_start_frame = 0;
-            /* p_fifo->l_next_frame = 0; */
-            /* p_fifo->b_next_frame = 0; */
-            p_fifo->l_end_frame = 0;
+            if ( (((p_fifo->l_end_frame + 1) - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) == 0 )
+            {
+                p_fifo->l_start_frame = 0;
+                p_fifo->b_start_frame = 0;
+                /* p_fifo->l_next_frame = 0; */
+                /* p_fifo->b_next_frame = 0; */
+                p_fifo->l_end_frame = 0;
+                vlc_mutex_unlock( &p_fifo->data_lock );
+                return( -1 );
+            }
+            else
+            {
+                while ( p_fifo->l_next_frame == p_fifo->l_end_frame )
+                {
+                    vlc_cond_wait( &p_fifo->data_wait, &p_fifo->data_lock );
+                }
+            }
         }
-        vlc_mutex_unlock( &p_fifo->data_lock );
-        return( -1 );
     }
-#endif
 
     l_units = ((p_fifo->l_next_frame - p_fifo->l_start_frame) & AOUT_FIFO_SIZE) * (p_fifo->l_frame_size >> p_fifo->b_stereo);
-//    fprintf( stderr, "%li", p_fifo->l_unit - (p_fifo->l_start_frame * (p_fifo->l_frame_size >> p_fifo->b_stereo)) );
 
-#if 0
-//    fprintf( stderr, "aout debug: %lli;\n", aout_date - p_fifo->date[p_fifo->l_start_frame] );
-    if ( /*(p_fifo->date[p_fifo->l_start_frame] < aout_date) &&*/ (aout_date < p_fifo->date[p_fifo->l_next_frame]) )
-    {
-        fprintf( stderr, "*" );
-        l_rate = (long)(((mtime_t)l_units * 1000000) / (p_fifo->date[p_fifo->l_next_frame] - aout_date));
-    }
-    else
-    {
-        l_rate = (long)(((mtime_t)l_units * 1000000) / (p_fifo->date[p_fifo->l_next_frame] - p_fifo->date[p_fifo->l_start_frame]));
-    }
-#endif
-//    l_rate = (long)( ((mtime_t)l_units * 1000000) / (p_fifo->date[p_fifo->l_next_frame] - ((p_fifo->date[p_fifo->l_start_frame] + aout_date) / 2)) );
-//    fprintf( stderr, "aout debug: l_rate == %li;\n", l_rate );
-//    fprintf( stderr, "aout debug: %li;\n", l_rate );
-//    fprintf( stderr, "aout debug: %lli, %li, %lli;\n", aout_date - p_fifo->date[p_fifo->l_start_frame], p_fifo->l_unit - (p_fifo->l_start_frame * (p_fifo->l_frame_size >> p_fifo->b_stereo)), p_fifo->date[p_fifo->l_next_frame] - aout_date );
-
-    /*
-    if ( aout_date < p_fifo->date[p_fifo->l_start_frame] )
-    {
-           p_fifo->l_dr -= 1;
-    }
-    else if ( p_fifo->date[p_fifo->l_start_frame] < aout_date )
-    {
-           p_fifo->l_dr += 1;
-    }
-    */
     l_rate = p_fifo->l_rate + ((aout_date - p_fifo->date[p_fifo->l_start_frame]) / 8);
-//    l_rate = (long)(((mtime_t)l_units * 1000000) / (p_fifo->date[p_fifo->l_next_frame] - p_fifo->date[p_fifo->l_start_frame])) + p_fifo->l_dr;
-//    fprintf( stderr, "aout debug: l_rate == %li (%lli);\n", l_rate /*+ p_fifo->l_dr*/, aout_date - p_fifo->date[p_fifo->l_start_frame] );
-
-//    p_fifo->delta += aout_date - p_fifo->date[p_fifo->l_start_frame];
-//    p_fifo->n += 1;
-//    fprintf( stderr, "aout debug: %lli, %lli, %li;\n", aout_date - p_fifo->date[p_fifo->l_start_frame], p_fifo->delta/p_fifo->n, l_rate );
+//    fprintf( stderr, "aout debug: %lli;\n", aout_date - p_fifo->date[p_fifo->l_start_frame] );
 
     InitializeIncrement( &p_fifo->unit_increment, l_rate, p_aout->dsp.l_rate );
 
@@ -884,28 +801,6 @@ void aout_Thread_S16_Stereo( aout_thread_t * p_aout )
         {
             msleep( p_aout->l_msleep );
         }
-#if 0
-        if ( p_aout->dsp.buf_info.fragments == p_aout->dsp.buf_info.fragstotal ) /* ?? */
-       {
-            p_aout->date = mdate();
-            aout_dspPlaySamples( &p_aout->dsp, (byte_t *)p_aout->buffer, sizeof(s16) * l_buffer_limit );
-        }
-        else if ( p_aout->dsp.buf_info.bytes >=
-            ((p_aout->dsp.buf_info.fragsize * p_aout->dsp.buf_info.fragstotal) -
-            (sizeof(s16) * l_buffer_limit)) )
-       {
-            aout_dspPlaySamples( &p_aout->dsp, (byte_t *)p_aout->buffer, sizeof(s16) * l_buffer_limit );
-        }
-        else
-       {
-            fprintf( stderr, "%lli\n", mdate() - date );
-           date = mdate();
-            aout_dspPlaySamples( &p_aout->dsp, (byte_t *)p_aout->buffer, sizeof(s16) * l_buffer_limit );
-//            fprintf( stderr, "%lli\n", (date + ((((mtime_t)((p_aout->dsp.buf_info.fragstotal * p_aout->dsp.buf_info.fragsize - p_aout->dsp.buf_info.bytes) / 4)) * 1000000)/((mtime_t)p_aout->dsp.l_rate))) - p_aout->date );
-            msleep( p_aout->date_increment.l_euclidean_integer );
-        }
-        UPDATE_INCREMENT( p_aout->date_increment, p_aout->date )
-#endif
     }
 
     vlc_mutex_lock( &p_aout->fifos_lock );