|
|
@ -471,8 +471,8 @@ static int decode_subframe_length(WMAProDecodeCtx *s, int offset) |
|
|
|
subframe_len = s->samples_per_frame >> frame_len_shift; |
|
|
|
subframe_len = s->samples_per_frame >> frame_len_shift; |
|
|
|
|
|
|
|
|
|
|
|
/** sanity check the length */ |
|
|
|
/** sanity check the length */ |
|
|
|
if (subframe_len < s->min_samples_per_subframe |
|
|
|
if (subframe_len < s->min_samples_per_subframe || |
|
|
|
|| subframe_len > s->samples_per_frame) { |
|
|
|
subframe_len > s->samples_per_frame) { |
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "broken frame: subframe_len %i\n", |
|
|
|
av_log(s->avctx, AV_LOG_ERROR, "broken frame: subframe_len %i\n", |
|
|
|
subframe_len); |
|
|
|
subframe_len); |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
@ -578,7 +578,8 @@ static int decode_tilehdr(WMAProDecodeCtx *s) |
|
|
|
int offset = 0; |
|
|
|
int offset = 0; |
|
|
|
for (i = 0; i < s->channel[c].num_subframes; i++) { |
|
|
|
for (i = 0; i < s->channel[c].num_subframes; i++) { |
|
|
|
dprintf(s->avctx, "frame[%i] channel[%i] subframe[%i]" |
|
|
|
dprintf(s->avctx, "frame[%i] channel[%i] subframe[%i]" |
|
|
|
" len %i\n", s->frame_num, c, i, s->channel[c].subframe_len[i]); |
|
|
|
" len %i\n", s->frame_num, c, i, |
|
|
|
|
|
|
|
s->channel[c].subframe_len[i]); |
|
|
|
s->channel[c].subframe_offset[i] = offset; |
|
|
|
s->channel[c].subframe_offset[i] = offset; |
|
|
|
offset += s->channel[c].subframe_len[i]; |
|
|
|
offset += s->channel[c].subframe_len[i]; |
|
|
|
} |
|
|
|
} |
|
|
@ -1163,8 +1164,7 @@ static int decode_subframe(WMAProDecodeCtx *s) |
|
|
|
s->channel[c].quant_step = quant_step; |
|
|
|
s->channel[c].quant_step = quant_step; |
|
|
|
if (get_bits1(&s->gb)) { |
|
|
|
if (get_bits1(&s->gb)) { |
|
|
|
if (modifier_len) { |
|
|
|
if (modifier_len) { |
|
|
|
s->channel[c].quant_step += |
|
|
|
s->channel[c].quant_step += get_bits(&s->gb, modifier_len) + 1; |
|
|
|
get_bits(&s->gb, modifier_len) + 1; |
|
|
|
|
|
|
|
} else |
|
|
|
} else |
|
|
|
++s->channel[c].quant_step; |
|
|
|
++s->channel[c].quant_step; |
|
|
|
} |
|
|
|
} |
|
|
@ -1410,7 +1410,8 @@ static void save_bits(WMAProDecodeCtx *s, GetBitContext* gb, int len, |
|
|
|
|
|
|
|
|
|
|
|
s->num_saved_bits += len; |
|
|
|
s->num_saved_bits += len; |
|
|
|
if (!append) { |
|
|
|
if (!append) { |
|
|
|
ff_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3), s->num_saved_bits); |
|
|
|
ff_copy_bits(&s->pb, gb->buffer + (get_bits_count(gb) >> 3), |
|
|
|
|
|
|
|
s->num_saved_bits); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
int align = 8 - (get_bits_count(gb) & 7); |
|
|
|
int align = 8 - (get_bits_count(gb) & 7); |
|
|
|
align = FFMIN(align, len); |
|
|
|
align = FFMIN(align, len); |
|
|
|