Commit 17c5e243 authored by Sam Hocevar's avatar Sam Hocevar

* ./plugins/ac3_adec/ac3_adec.c: probably fixed most "crash when changing

    audio track" problems by zeroing the p_ac3dec structure.
  * ./plugins/ac3_adec/ac3_adec.c: fixed a "INPUT_MAX_ALLOCATION reached"
    crash.
parent 168aff53
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ac3_adec.c: ac3 decoder module main file * ac3_adec.c: ac3 decoder module main file
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: ac3_adec.c,v 1.29 2002/04/25 21:52:42 sam Exp $ * $Id: ac3_adec.c,v 1.30 2002/05/15 19:36:04 sam Exp $
* *
* Authors: Michel Lespinasse <walken@zoy.org> * Authors: Michel Lespinasse <walken@zoy.org>
* *
...@@ -119,8 +119,10 @@ static int InitThread( ac3dec_thread_t * p_ac3thread ) ...@@ -119,8 +119,10 @@ static int InitThread( ac3dec_thread_t * p_ac3thread )
* Thread properties * Thread properties
*/ */
p_ac3thread->p_fifo = p_ac3thread->p_config->p_decoder_fifo; p_ac3thread->p_fifo = p_ac3thread->p_config->p_decoder_fifo;
p_ac3thread->ac3_decoder = p_ac3thread->ac3_decoder =
vlc_memalign( &p_ac3thread->ac3_decoder_orig, 16, sizeof(ac3dec_t) ); vlc_memalign( &p_ac3thread->ac3_decoder_orig, 16, sizeof(ac3dec_t) );
memset( p_ac3thread->ac3_decoder, 0, sizeof( ac3dec_t ) );
/* /*
* Choose the best downmix module * Choose the best downmix module
...@@ -213,6 +215,7 @@ static int InitThread( ac3dec_thread_t * p_ac3thread ) ...@@ -213,6 +215,7 @@ static int InitThread( ac3dec_thread_t * p_ac3thread )
16, 32 * sizeof(complex_t) ); 16, 32 * sizeof(complex_t) );
IMDCT->w_64 = vlc_memalign( &IMDCT->w_64_orig, IMDCT->w_64 = vlc_memalign( &IMDCT->w_64_orig,
16, 64 * sizeof(complex_t) ); 16, 64 * sizeof(complex_t) );
#undef IMDCT
_M( ac3_init )( p_ac3thread->ac3_decoder ); _M( ac3_init )( p_ac3thread->ac3_decoder );
...@@ -314,37 +317,14 @@ static int decoder_Run ( decoder_config_t * p_config ) ...@@ -314,37 +317,14 @@ static int decoder_Run ( decoder_config_t * p_config )
} }
/* Creating the audio output fifo if not created yet */ /* Creating the audio output fifo if not created yet */
if (p_ac3thread->p_aout_fifo == NULL ) { if (p_ac3thread->p_aout_fifo == NULL )
{
p_ac3thread->p_aout_fifo = aout_CreateFifo( AOUT_FIFO_PCM, 2, p_ac3thread->p_aout_fifo = aout_CreateFifo( AOUT_FIFO_PCM, 2,
sync_info.sample_rate, AC3DEC_FRAME_SIZE, NULL ); sync_info.sample_rate, AC3DEC_FRAME_SIZE, NULL );
if ( p_ac3thread->p_aout_fifo == NULL ) if ( p_ac3thread->p_aout_fifo == NULL )
{ {
free( IMDCT->w_1_orig ); p_ac3thread->p_fifo->b_error = 1;
free( IMDCT->w_64_orig ); break;
free( IMDCT->w_32_orig );
free( IMDCT->w_16_orig );
free( IMDCT->w_8_orig );
free( IMDCT->w_4_orig );
free( IMDCT->w_2_orig );
free( IMDCT->xcos_sin_sse_orig );
free( IMDCT->xsin2_orig );
free( IMDCT->xcos2_orig );
free( IMDCT->xsin1_orig );
free( IMDCT->xcos1_orig );
free( IMDCT->delay1_orig );
free( IMDCT->delay_orig );
free( IMDCT->buf_orig );
#undef IMDCT
free( p_ac3thread->ac3_decoder->samples_orig );
module_Unneed( p_ac3thread->ac3_decoder->imdct->p_module );
module_Unneed( p_ac3thread->ac3_decoder->downmix.p_module );
free( p_ac3thread->ac3_decoder->imdct_orig );
free( p_ac3thread->ac3_decoder_orig );
return( -1 );
} }
} }
......
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