Commit 9269acf9 authored by Laurent Aimar's avatar Laurent Aimar

* mpeg_audio.c: fix segfault caused by free bitrate and padding set.

 (the stream isn't free bitrate) SyncInfo think it's free bitrate but
return a frame size of 1. Now, I test bitrate.
parent b8e299a7
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* mpeg_audio.c: parse MPEG audio sync info and packetize the stream * mpeg_audio.c: parse MPEG audio sync info and packetize the stream
***************************************************************************** *****************************************************************************
* Copyright (C) 2001-2003 VideoLAN * Copyright (C) 2001-2003 VideoLAN
* $Id: mpeg_audio.c,v 1.15 2003/05/04 10:46:28 fenrir Exp $ * $Id: mpeg_audio.c,v 1.16 2003/06/25 00:40:41 fenrir Exp $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Eric Petit <titer@videolan.org> * Eric Petit <titer@videolan.org>
...@@ -217,10 +217,7 @@ static int RunDecoder( decoder_fifo_t *p_fifo ) ...@@ -217,10 +217,7 @@ static int RunDecoder( decoder_fifo_t *p_fifo )
&i_original_channels, &i_rate, &i_original_channels, &i_rate,
&i_bit_rate, &i_frame_length, &i_bit_rate, &i_frame_length,
&i_frame_size, &i_new_layer ); &i_frame_size, &i_new_layer );
if ( !i_current_frame_size ) if( i_current_frame_size == -1 )
i_current_frame_size = i_free_frame_size;
if ( i_current_frame_size == -1 )
{ {
msg_Warn( p_dec->p_fifo, "syncinfo failed" ); msg_Warn( p_dec->p_fifo, "syncinfo failed" );
/* This is probably an emulated startcode, drop the first byte /* This is probably an emulated startcode, drop the first byte
...@@ -229,6 +226,13 @@ static int RunDecoder( decoder_fifo_t *p_fifo ) ...@@ -229,6 +226,13 @@ static int RunDecoder( decoder_fifo_t *p_fifo )
p_sync[MAD_BUFFER_GUARD - 1] = GetBits( &p_dec->bit_stream, 8 ); p_sync[MAD_BUFFER_GUARD - 1] = GetBits( &p_dec->bit_stream, 8 );
continue; continue;
} }
if( i_bit_rate == 0 )
{
/* free birate, but 99% emulated startcode :( */
i_current_frame_size = i_free_frame_size;
}
if ( (unsigned int)i_current_frame_size > i_frame_size ) if ( (unsigned int)i_current_frame_size > i_frame_size )
{ {
msg_Warn( p_dec->p_fifo, "frame too big %d > %d", msg_Warn( p_dec->p_fifo, "frame too big %d > %d",
......
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