//double last_cb_cfl_fac = 0.0;
//double last_cr_cfl_fac = 0.0;
+ int max_val_x[8] = {0}, min_val_x[8] = {0};
+ int max_val_y[8] = {0}, min_val_y[8] = {0};
+
// DCT and quantize luma
for (unsigned yb = 0; yb < HEIGHT; yb += 8) {
for (unsigned xb = 0; xb < WIDTH; xb += 8) {
int k = quantize(in_y[coeff_idx], coeff_idx);
coeff_y[(yb + y) * WIDTH + (xb + x)] = k;
+ max_val_x[x] = std::max(max_val_x[x], k);
+ min_val_x[x] = std::min(min_val_x[x], k);
+ max_val_y[y] = std::max(max_val_y[y], k);
+ min_val_y[y] = std::min(min_val_y[y], k);
+
// Store back for reconstruction / PSNR calculation
in_y[coeff_idx] = unquantize(k, coeff_idx);
}
extra_bits,
extra_bits / 8,
tot_bytes);
+
+#if 0
+ printf("Max coefficient ranges (as a function of x):\n\n");
+ for (unsigned x = 0; x < 8; ++x) {
+ int range = std::max(max_val_x[x], -min_val_x[x]);
+ printf(" [%4d, %4d] (%.2f bits)\n", min_val_x[x], max_val_x[x], log2(range * 2 + 1));
+ }
+
+ printf("Max coefficient ranges (as a function of y):\n\n");
+ for (unsigned y = 0; y < 8; ++y) {
+ int range = std::max(max_val_y[y], -min_val_y[y]);
+ printf(" [%4d, %4d] (%.2f bits)\n", min_val_y[y], max_val_y[y], log2(range * 2 + 1));
+ }
+#endif
}