ps->border_position[0] = -1;
if (ps->frame_class) {
- for (e = 1; e <= ps->num_env; e++)
+ for (e = 1; e <= ps->num_env; e++) {
ps->border_position[e] = get_bits(gb, 5);
+ if (ps->border_position[e] < ps->border_position[e-1]) {
+ av_log(avctx, AV_LOG_ERROR, "border_position non monotone.\n");
+ goto err;
+ }
+ }
} else
for (e = 1; e <= ps->num_env; e++)
ps->border_position[e] = (e * numQMFSlots >> ff_log2_tab[ps->num_env]) - 1;
int stop = ps->border_position[e+1];
INTFLOAT width = Q30(1.f) / ((stop - start) ? (stop - start) : 1);
#if USE_FIXED
- width <<= 1;
+ width = FFMIN(2U*width, INT_MAX);
#endif
b = k_to_i[k];
h[0][0] = H11[0][e][b];
h_step[1][2] = AAC_MSUB31_V3(H21[1][e+1][b], h[1][2], width);
h_step[1][3] = AAC_MSUB31_V3(H22[1][e+1][b], h[1][3], width);
}
- ps->dsp.stereo_interpolate[!PS_BASELINE && ps->enable_ipdopd](
- l[k] + 1 + start, r[k] + 1 + start,
- h, h_step, stop - start);
+ if (stop - start)
+ ps->dsp.stereo_interpolate[!PS_BASELINE && ps->enable_ipdopd](
+ l[k] + 1 + start, r[k] + 1 + start,
+ h, h_step, stop - start);
}
}
}