+ if(autolevel)
+ {
+ Sys_Printf( "\n--- MiniMapAutoLevel (%d) ---\n", minimap.height );
+ float mi = 1, ma = 0;
+ float s, o;
+
+ // TODO threads!
+ for(y = 0; y < minimap.height; ++y)
+ for(x = 0; x < minimap.width; ++x)
+ {
+ float v = *q++;
+ if(v < mi)
+ mi = v;
+ if(v > ma)
+ ma = v;
+ }
+ s = 1 / (ma - mi);
+ o = mi / (ma - mi);
+
+ // equations:
+ // brightness + contrast * v
+ // after autolevel:
+ // brightness + contrast * (v * s - o)
+ // =
+ // (brightness - contrast * o) + (contrast * s) * v
+ minimap.brightness = minimap.brightness - minimap.contrast * o;
+ minimap.contrast *= s;
+
+ Sys_Printf( "Auto level: Brightness changed to %f\n", minimap.boost );
+ Sys_Printf( "Auto level: Contrast changed to %f\n", minimap.contrast );
+ }
+
+ if(minimap.brightness != 0 || minimap.contrast != 1)
+ {
+ Sys_Printf( "\n--- MiniMapBrightnessContrast (%d) ---\n", minimap.height );
+ RunThreadsOnIndividual(minimap.height, qtrue, MiniMapBrightnessContrast);
+ }
+