@ -40,6 +40,7 @@
# define BACKSTEP_SIZE 512
# define BACKSTEP_SIZE 512
# define EXTRABYTES 24
# define EXTRABYTES 24
# define LAST_BUF_SIZE 2 * BACKSTEP_SIZE + EXTRABYTES
/* layer 3 "granule" */
/* layer 3 "granule" */
typedef struct GranuleDef {
typedef struct GranuleDef {
@ -63,7 +64,7 @@ typedef struct GranuleDef {
typedef struct MPADecodeContext {
typedef struct MPADecodeContext {
MPA_DECODE_HEADER
MPA_DECODE_HEADER
uint8_t last_buf [ 2 * BACKSTEP_SIZE + EXTRABYTES ] ;
uint8_t last_buf [ LAST_BUF_SIZE ] ;
int last_buf_size ;
int last_buf_size ;
/* next header (used in free format parsing) */
/* next header (used in free format parsing) */
uint32_t free_format_next_header ;
uint32_t free_format_next_header ;
@ -1378,7 +1379,8 @@ static int mp_decode_layer3(MPADecodeContext *s)
if ( ! s - > adu_mode ) {
if ( ! s - > adu_mode ) {
int skip ;
int skip ;
const uint8_t * ptr = s - > gb . buffer + ( get_bits_count ( & s - > gb ) > > 3 ) ;
const uint8_t * ptr = s - > gb . buffer + ( get_bits_count ( & s - > gb ) > > 3 ) ;
int extrasize = av_clip ( get_bits_left ( & s - > gb ) > > 3 , 0 , EXTRABYTES ) ;
int extrasize = av_clip ( get_bits_left ( & s - > gb ) > > 3 , 0 ,
FFMAX ( 0 , LAST_BUF_SIZE - s - > last_buf_size ) ) ;
assert ( ( get_bits_count ( & s - > gb ) & 7 ) = = 0 ) ;
assert ( ( get_bits_count ( & s - > gb ) & 7 ) = = 0 ) ;
/* now we get bits from the main_data_begin offset */
/* now we get bits from the main_data_begin offset */
av_dlog ( s - > avctx , " seekback: %d \n " , main_data_begin ) ;
av_dlog ( s - > avctx , " seekback: %d \n " , main_data_begin ) ;