|
|
@@ -40,6 +40,7 @@ |
|
|
|
|
|
|
|
#define BACKSTEP_SIZE 512 |
|
|
|
#define EXTRABYTES 24 |
|
|
|
#define LAST_BUF_SIZE 2 * BACKSTEP_SIZE + EXTRABYTES |
|
|
|
|
|
|
|
/* layer 3 "granule" */ |
|
|
|
typedef struct GranuleDef { |
|
|
@@ -63,7 +64,7 @@ typedef struct GranuleDef { |
|
|
|
|
|
|
|
typedef struct MPADecodeContext { |
|
|
|
MPA_DECODE_HEADER |
|
|
|
uint8_t last_buf[2 * BACKSTEP_SIZE + EXTRABYTES]; |
|
|
|
uint8_t last_buf[LAST_BUF_SIZE]; |
|
|
|
int last_buf_size; |
|
|
|
/* next header (used in free format parsing) */ |
|
|
|
uint32_t free_format_next_header; |
|
|
@@ -1378,7 +1379,8 @@ static int mp_decode_layer3(MPADecodeContext *s) |
|
|
|
if (!s->adu_mode) { |
|
|
|
int skip; |
|
|
|
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); |
|
|
|
/* now we get bits from the main_data_begin offset */ |
|
|
|
av_dlog(s->avctx, "seekback: %d\n", main_data_begin); |
|
|
|