Commit 4ffdf05c authored by Michel Kaempf's avatar Michel Kaempf

* ac3_decoder/ac3_decoder.c, audio_decoder/audio_decoder.c :

- 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) ;
parent dfc77d2c
......@@ -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;
......
......@@ -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;
......
......@@ -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 )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment