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;
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;
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;
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;
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;
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 )
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 )