int interstride,
uint8_t *intrapred,
int intrastride) {
- static const int scale_bits = 8;
- static const int scale_max = 256;
- static const int scale_round = 127;
+ const int scale_bits = 8;
+ const int scale_max = (1 << scale_bits);
const int bw = 4 * num_4x4_blocks_wide_lookup[plane_bsize];
const int bh = 4 * num_4x4_blocks_high_lookup[plane_bsize];
const int size_scale = ii_size_scales[plane_bsize];
for (j = 0; j < bw; ++j) {
int scale = ii_weights1d[i * size_scale];
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
for (j = 0; j < bw; ++j) {
int scale = ii_weights1d[j * size_scale];
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
int scale = (ii_weights1d[i * size_scale] * 3 +
ii_weights1d[j * size_scale]) >> 2;
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
int scale = (ii_weights1d[j * size_scale] * 3 +
ii_weights1d[i * size_scale]) >> 2;
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
for (j = 0; j < bw; ++j) {
int scale = ii_weights1d[(i < j ? i : j) * size_scale];
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
int scale = (ii_weights1d[i * size_scale] +
ii_weights1d[j * size_scale]) >> 1;
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
default:
for (i = 0; i < bh; ++i) {
for (j = 0; j < bw; ++j) {
- comppred[i * compstride + j] = (interpred[i * interstride + j] +
- intrapred[i * intrastride + j]) >> 1;
+ comppred[i * compstride + j] =
+ ROUND_POWER_OF_TWO(
+ interpred[i * interstride + j] +
+ intrapred[i * intrastride + j],
+ 1);
}
}
break;
int interstride,
uint8_t *intrapred8,
int intrastride, int bd) {
- static const int scale_bits = 8;
- static const int scale_max = 256;
- static const int scale_round = 127;
+ const int scale_bits = 8;
+ const int scale_max = (1 << scale_bits);
const int bw = 4 * num_4x4_blocks_wide_lookup[plane_bsize];
const int bh = 4 * num_4x4_blocks_high_lookup[plane_bsize];
const int size_scale = ii_size_scales[plane_bsize];
for (j = 0; j < bw; ++j) {
int scale = ii_weights1d[i * size_scale];
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
for (j = 0; j < bw; ++j) {
int scale = ii_weights1d[j * size_scale];
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
int scale = (ii_weights1d[i * size_scale] * 3 +
ii_weights1d[j * size_scale]) >> 2;
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
int scale = (ii_weights1d[j * size_scale] * 3 +
ii_weights1d[i * size_scale]) >> 2;
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
for (j = 0; j < bw; ++j) {
int scale = ii_weights1d[(i < j ? i : j) * size_scale];
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
int scale = (ii_weights1d[i * size_scale] +
ii_weights1d[j * size_scale]) >> 1;
comppred[i * compstride + j] =
- ((scale_max - scale) * interpred[i * interstride + j] +
- scale * intrapred[i * intrastride + j] + scale_round)
- >> scale_bits;
+ ROUND_POWER_OF_TWO(
+ (scale_max - scale) * interpred[i * interstride + j] +
+ scale * intrapred[i * intrastride + j],
+ scale_bits);
}
}
break;
default:
for (i = 0; i < bh; ++i) {
for (j = 0; j < bw; ++j) {
- comppred[i * compstride + j] = (interpred[i * interstride + j] +
- intrapred[i * intrastride + j]) >> 1;
+ comppred[i * compstride + j] =
+ ROUND_POWER_OF_TWO(
+ interpred[i * interstride + j] +
+ intrapred[i * intrastride + j],
+ 1);
}
}
break;