From 9b196c6333e8973ba3704af22b1d8b9d600bbd6f Mon Sep 17 00:00:00 2001 From: Tristan Matthews Date: Sat, 27 Sep 2014 13:47:06 -0400 Subject: [PATCH] twolame: add error checking --- modules/codec/twolame.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/codec/twolame.c b/modules/codec/twolame.c index 20ef952b14..3257b76e5f 100644 --- a/modules/codec/twolame.c +++ b/modules/codec/twolame.c @@ -274,6 +274,8 @@ static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf ) return NULL; p_block = block_Alloc( i_used ); + if( !p_block ) + return NULL; memcpy( p_block->p_buffer, p_sys->p_out_buffer, i_used ); p_block->i_length = CLOCK_FREQ * (mtime_t)MPEG_FRAME_SIZE / (mtime_t)p_enc->fmt_out.audio.i_rate; @@ -302,8 +304,21 @@ static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf ) i_used = twolame_encode_buffer_interleaved( p_sys->p_twolame, p_sys->p_buffer, MPEG_FRAME_SIZE, p_sys->p_out_buffer, MAX_CODED_FRAME_SIZE ); + /* On error, buffer samples and return what was already encoded */ + if( i_used < 0 ) + { + msg_Err( p_enc, "encoder error: %d", i_used ); + break; + } + p_sys->i_nb_samples = 0; p_block = block_Alloc( i_used ); + if( !p_block ) + { + if( p_chain ) + block_Release( p_chain ); + return NULL; + } memcpy( p_block->p_buffer, p_sys->p_out_buffer, i_used ); p_block->i_length = CLOCK_FREQ * (mtime_t)MPEG_FRAME_SIZE / (mtime_t)p_enc->fmt_out.audio.i_rate; -- 2.39.5