X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=qdc.cpp;h=41ef04df00f95f3714e1617326fb4d4c4f5ddefa;hb=79aa73c43af43f8f497e5920c83459f3e94d3612;hp=094f3b6b7e0e80b451b288bcce4d458cbcabde45;hpb=447dce35641fc3ae6194cfe0221577281b04ae5b;p=narabu 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 }