static void lowpass_prediction(int16_t *dst, int16_t *pred, int width, int height, ptrdiff_t stride)
{
- int16_t *next, val;
+ int16_t val;
int i, j;
memset(pred, 0, width * sizeof(*pred));
for (i = 0; i < height; i++) {
- val = pred[0] + dst[0];
- dst[0] = val;
- pred[0] = val;
- next = dst + 2;
- for (j = 1; j < width; j++, next++) {
- val = pred[j] + next[-1];
- next[-1] = val;
- pred[j] = val;
- next[-1] += next[-2];
+ val = pred[0] + dst[0];
+ dst[0] = pred[0] = val;
+ for (j = 1; j < width; j++) {
+ val = pred[j] + dst[j];
+ dst[j] = pred[j] = val;
+ dst[j] += dst[j-1];
}
dst += stride;
}
int i, ret;
for (i = ctx->levels - 1; i >= 0; i--) {
- ctx->scaling[plane][H][i] = 1000000.0f / sign_extend(bytestream2_get_be32(&ctx->gb), 32);
- ctx->scaling[plane][V][i] = 1000000.0f / sign_extend(bytestream2_get_be32(&ctx->gb), 32);
+ int32_t h = sign_extend(bytestream2_get_be32(&ctx->gb), 32);
+ int32_t v = sign_extend(bytestream2_get_be32(&ctx->gb), 32);
+
+ if (!h || !v)
+ return AVERROR_INVALIDDATA;
+
+ ctx->scaling[plane][H][i] = 1000000.0f / h;
+ ctx->scaling[plane][V][i] = 1000000.0f / v;
}
bytestream2_skip(&ctx->gb, 4);