|
|
|
@ -63,7 +63,6 @@ typedef struct RALFContext { |
|
|
|
|
|
|
|
|
|
unsigned bias[2]; ///< a constant value added to channel data after filtering
|
|
|
|
|
|
|
|
|
|
int num_blocks; ///< number of blocks inside the frame
|
|
|
|
|
int sample_offset; |
|
|
|
|
int block_size[1 << 12]; ///< size of the blocks
|
|
|
|
|
int block_pts[1 << 12]; ///< block start time (in milliseconds)
|
|
|
|
@ -418,7 +417,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, |
|
|
|
|
int16_t *samples1; |
|
|
|
|
int ret; |
|
|
|
|
GetBitContext gb; |
|
|
|
|
int table_size, table_bytes, i; |
|
|
|
|
int table_size, table_bytes, num_blocks; |
|
|
|
|
const uint8_t *src, *block_pointer; |
|
|
|
|
int src_size; |
|
|
|
|
int bytes_left; |
|
|
|
@ -462,17 +461,17 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
} |
|
|
|
|
init_get_bits(&gb, src + 2, table_size); |
|
|
|
|
ctx->num_blocks = 0; |
|
|
|
|
num_blocks = 0; |
|
|
|
|
while (get_bits_left(&gb) > 0) { |
|
|
|
|
if (ctx->num_blocks >= FF_ARRAY_ELEMS(ctx->block_size)) |
|
|
|
|
if (num_blocks >= FF_ARRAY_ELEMS(ctx->block_size)) |
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
ctx->block_size[ctx->num_blocks] = get_bits(&gb, 13 + avctx->ch_layout.nb_channels); |
|
|
|
|
ctx->block_size[num_blocks] = get_bits(&gb, 13 + avctx->ch_layout.nb_channels); |
|
|
|
|
if (get_bits1(&gb)) { |
|
|
|
|
ctx->block_pts[ctx->num_blocks] = get_bits(&gb, 9); |
|
|
|
|
ctx->block_pts[num_blocks] = get_bits(&gb, 9); |
|
|
|
|
} else { |
|
|
|
|
ctx->block_pts[ctx->num_blocks] = 0; |
|
|
|
|
ctx->block_pts[num_blocks] = 0; |
|
|
|
|
} |
|
|
|
|
ctx->num_blocks++; |
|
|
|
|
num_blocks++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
frame->nb_samples = ctx->max_frame_size; |
|
|
|
@ -483,7 +482,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, |
|
|
|
|
block_pointer = src + table_bytes + 2; |
|
|
|
|
bytes_left = src_size - table_bytes - 2; |
|
|
|
|
ctx->sample_offset = 0; |
|
|
|
|
for (i = 0; i < ctx->num_blocks; i++) { |
|
|
|
|
for (int i = 0; i < num_blocks; i++) { |
|
|
|
|
if (bytes_left < ctx->block_size[i]) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "I'm pedaling backwards\n"); |
|
|
|
|
break; |
|
|
|
|