From 79aa73c43af43f8f497e5920c83459f3e94d3612 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Thu, 5 Oct 2017 20:30:19 +0200 Subject: [PATCH] Add some code for calculating maximum coefficent ranges, for bit allocation. --- qdc.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/qdc.cpp b/qdc.cpp index 094f3b6..41ef04d 100644 --- a/qdc.cpp +++ b/qdc.cpp @@ -507,6 +507,9 @@ int main(int argc, char **argv) //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) { @@ -527,6 +530,11 @@ int main(int argc, char **argv) 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); } @@ -961,4 +969,18 @@ int main(int argc, char **argv) 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 } -- 2.39.2