static int Open( vlc_object_t *p_this )
{
decoder_t *p_dec = (decoder_t*)p_this;
- decoder_sys_t *p_sys = p_dec->p_sys;
+ decoder_sys_t *p_sys;
faacDecConfiguration *cfg;
if( p_dec->fmt_in.i_codec != VLC_CODEC_MP4A )
p_dec->fmt_out.i_cat = AUDIO_ES;
p_dec->fmt_out.i_codec = HAVE_FPU ? VLC_CODEC_FL32 : VLC_CODEC_S16N;
- p_dec->pf_decode_audio = DecodeBlock;
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels = 0;
p_dec->b_need_packetized = true;
p_sys->b_sbr = p_sys->b_ps = false;
+
+ p_dec->pf_decode_audio = DecodeBlock;
return VLC_SUCCESS;
}
}
/* Decode all data */
- if( p_sys->i_buffer )
+ if( p_sys->i_buffer > 1)
{
void *samples;
faacDecFrameInfo frame;
/* Flush the buffer */
p_sys->i_buffer -= frame.bytesconsumed;
- if( p_sys->i_buffer > 0 )
+ if( p_sys->i_buffer > 1 )
{
memmove( p_sys->p_buffer,&p_sys->p_buffer[frame.bytesconsumed],
p_sys->i_buffer );
}
+ else
+ {
+ /* Drop byte of padding */
+ p_sys->i_buffer = 0;
+ }
block_Release( p_block );
return NULL;
}
return p_out;
}
+ else
+ {
+ /* Drop byte of padding */
+ p_sys->i_buffer = 0;
+ }
block_Release( p_block );
return NULL;