]> git.sesse.net Git - vlc/commitdiff
* ac3_decoder/ac3_decoder.c, audio_decoder/audio_decoder.c :
authorMichel Kaempf <maxx@videolan.org>
Fri, 21 Jan 2000 04:52:32 +0000 (04:52 +0000)
committerMichel Kaempf <maxx@videolan.org>
Fri, 21 Jan 2000 04:52:32 +0000 (04:52 +0000)
- correction d'un bug dans la fonction d'initialisation des d�codeurs
(freeze lorsqu'aucun paquet PES n'est envoy� aux d�codeurs) ;

* audio_output/audio_output.c :
- correction d'un bug dans l'initialisation du flag b_die des fifos des
d�codeurs ;
- correction d'un bug dans la lecture des flags b_die des fifos des
d�codeurs (les fifos n'�taient pas d�truites avant la mort du thread
audio_output) ;

src/ac3_decoder/ac3_decoder.c
src/audio_decoder/audio_decoder.c
src/audio_output/audio_output.c

index 3122846c62623faab2dd0bae85934a8a7d893d3b..17ed908b0aaec8c44e80bed144d47566f7b3b66d 100644 (file)
@@ -175,6 +175,11 @@ static int InitThread( ac3dec_thread_t * p_ac3dec )
     while ( DECODER_FIFO_ISEMPTY(p_ac3dec->fifo) )
     {
         vlc_cond_wait( &p_ac3dec->fifo.data_wait, &p_ac3dec->fifo.data_lock );
+        if ( p_ac3dec->bit_stream.p_input->b_die )
+        {
+            vlc_mutex_unlock( &p_ac3dec->fifo.data_lock );
+            return( -1 );
+        }
     }
     p_ac3dec->bit_stream.p_ts = DECODER_FIFO_START( p_ac3dec->fifo )->p_first_ts;
     p_ac3dec->bit_stream.i_byte = p_ac3dec->bit_stream.p_ts->i_payload_start;
index fba0b7fc4b55ebb905a0b474a2c2c809b701b5d6..52870a1520bbebd777cd85f318ba7c8038fbc96c 100644 (file)
@@ -710,6 +710,11 @@ static int InitThread( adec_thread_t * p_adec )
     while ( DECODER_FIFO_ISEMPTY(p_adec->fifo) )
     {
         vlc_cond_wait( &p_adec->fifo.data_wait, &p_adec->fifo.data_lock );
+        if ( p_adec->bit_stream.p_input->b_die )
+        {
+            vlc_mutex_unlock( &p_adec->fifo.data_lock );
+            return( -1 );
+        }
     }
     p_adec->bit_stream.p_ts = DECODER_FIFO_START( p_adec->fifo )->p_first_ts;
     p_adec->bit_stream.i_byte = p_adec->bit_stream.p_ts->i_payload_start;
index f7d144e9dc8b2d29880596ea639f5165f06b4b58..dc65daf321a2b76ba2dac0995d795fcfc2cb328f 100644 (file)
@@ -353,7 +353,7 @@ aout_fifo_t * aout_CreateFifo( aout_thread_t * p_aout, aout_fifo_t * p_fifo )
 
         case AOUT_ADEC_MONO_FIFO:
         case AOUT_ADEC_STEREO_FIFO:
-            p_aout->b_die = 0;
+            p_aout->fifo[i_fifo].b_die = 0;
 
             p_aout->fifo[i_fifo].b_stereo = p_fifo->b_stereo;
             p_aout->fifo[i_fifo].l_rate = p_fifo->l_rate;
@@ -602,6 +602,14 @@ void aout_Thread_S16_Stereo( aout_thread_t * p_aout )
                     break;
 
                case AOUT_INTF_MONO_FIFO:
+                    if ( p_aout->fifo[i_fifo].b_die )
+                    {
+                        free( p_aout->fifo[i_fifo].buffer ); /* !! */
+                        p_aout->fifo[i_fifo].i_type = AOUT_EMPTY_FIFO; /* !! */
+                        intf_DbgMsg("aout debug: audio output fifo (%p) destroyed\n", &p_aout->fifo[i_fifo]);
+                        continue;
+                    }
+
                     if ( p_aout->fifo[i_fifo].l_units > p_aout->l_units )
                    {
                         l_buffer = 0;
@@ -633,6 +641,14 @@ void aout_Thread_S16_Stereo( aout_thread_t * p_aout )
                     break;
 
                 case AOUT_INTF_STEREO_FIFO:
+                    if ( p_aout->fifo[i_fifo].b_die )
+                    {
+                        free( p_aout->fifo[i_fifo].buffer ); /* !! */
+                        p_aout->fifo[i_fifo].i_type = AOUT_EMPTY_FIFO; /* !! */
+                        intf_DbgMsg("aout debug: audio output fifo (%p) destroyed\n", &p_aout->fifo[i_fifo]);
+                        continue;
+                    }
+
                     if ( p_aout->fifo[i_fifo].l_units > p_aout->l_units )
                    {
                         l_buffer = 0;
@@ -664,6 +680,15 @@ void aout_Thread_S16_Stereo( aout_thread_t * p_aout )
                     break;
 
                 case AOUT_ADEC_MONO_FIFO:
+                    if ( p_aout->fifo[i_fifo].b_die )
+                    {
+                        free( p_aout->fifo[i_fifo].buffer );
+                        free( p_aout->fifo[i_fifo].date );
+                        p_aout->fifo[i_fifo].i_type = AOUT_EMPTY_FIFO; /* !! */
+                        intf_DbgMsg("aout debug: audio output fifo (%p) destroyed\n", &p_aout->fifo[i_fifo]);
+                        continue;
+                    }
+
                     l_units = p_aout->l_units;
                     l_buffer = 0;
                     while ( l_units > 0 )
@@ -732,6 +757,15 @@ void aout_Thread_S16_Stereo( aout_thread_t * p_aout )
                     break;
 
                 case AOUT_ADEC_STEREO_FIFO:
+                    if ( p_aout->fifo[i_fifo].b_die )
+                    {
+                        free( p_aout->fifo[i_fifo].buffer );
+                        free( p_aout->fifo[i_fifo].date );
+                        p_aout->fifo[i_fifo].i_type = AOUT_EMPTY_FIFO; /* !! */
+                        intf_DbgMsg("aout debug: audio output fifo (%p) destroyed\n", &p_aout->fifo[i_fifo]);
+                        continue;
+                    }
+
                     l_units = p_aout->l_units;
                     l_buffer = 0;
                     while ( l_units > 0 )