Temperature corellation - crash with some 5D mark III - issue 7162 (#7164)

* Bad behavior with blackwhite and gamma - after change avoid color shift

* Fixed crash in itcwb issue 7162

* Appimage and windows yml

* Clean code

* Various suggested changes

* Remove unused code

* Remove appimage and windows yml
This commit is contained in:
Desmis 2024-08-04 20:07:54 +02:00 committed by GitHub
parent ab1d773d36
commit 79279bc42c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -59,6 +59,16 @@
namespace namespace
{ {
float clipitc(float x)
{
if (std::isnan(x)) {
x = 0.1f;
} else {
x = rtengine::LIM(x, 0.1f, 65534.9f);//White balance Itcwb - limit values
}
return x;
}
void rotateLine(const float* const line, rtengine::PlanarPtr<float> &channel, const int tran, const int i, const int w, const int h) void rotateLine(const float* const line, rtengine::PlanarPtr<float> &channel, const int tran, const int i, const int w, const int h)
{ {
switch (tran & TR_ROT) { switch (tran & TR_ROT) {
@ -6221,12 +6231,20 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double
} }
if (oldsampling == false) { if (oldsampling == false) {
if (settings->verbose) {
printf("size rgb loc - bfh=%i bfw=%i repref=%i\n", bfh, bfw, repref);
}
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif #endif
for (int y = 0; y < bfh ; ++y) { for (int y = 0; y < bfh ; ++y) {
for (int x = 0; x < bfw ; ++x) { for (int x = 0; x < bfw ; ++x) {
redloc[y][x] = clipitc(redloc[y][x]);
greenloc[y][x] = clipitc(greenloc[y][x]);
blueloc[y][x] = clipitc(blueloc[y][x]);
const float RR = rmm[repref] * redloc[y][x]; const float RR = rmm[repref] * redloc[y][x];
const float GG = gmm[repref] * greenloc[y][x]; const float GG = gmm[repref] * greenloc[y][x];
const float BB = bmm[repref] * blueloc[y][x]; const float BB = bmm[repref] * blueloc[y][x];
@ -7451,17 +7469,11 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int
const int bfw = W / precision + ((W % precision) > 0 ? 1 : 0);// 5 arbitrary value can be change to 3 or 9 ; const int bfw = W / precision + ((W % precision) > 0 ? 1 : 0);// 5 arbitrary value can be change to 3 or 9 ;
const int bfh = H / precision + ((H % precision) > 0 ? 1 : 0); const int bfh = H / precision + ((H % precision) > 0 ? 1 : 0);
if (! greenloc) {
greenloc(bfw, bfh); greenloc(bfw, bfh);
}
if (! redloc) {
redloc(bfw, bfh); redloc(bfw, bfh);
}
if (! blueloc) {
blueloc(bfw, bfh); blueloc(bfw, bfh);
}
double avgL = 0.0; double avgL = 0.0;
//center data on normal values //center data on normal values
@ -7496,8 +7508,10 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int
} }
const float sig = std::sqrt(vari / mm); const float sig = std::sqrt(vari / mm);
const float multip = 60000.f / (avgL + 2.f * sig); float multip = 60000.f / (avgL + 2.f * sig);
//multip to put red, blue, green in a good range if(std::isnan(multip)) {//if very bad datas with avgl and sig
multip = 1.f;
}
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel for #pragma omp parallel for
#endif #endif
@ -7506,7 +7520,7 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int
const int ii = i * precision; const int ii = i * precision;
if (ii < H) { if (ii < H) {
for (int j = 0, jj = 0; j < bfw; ++j, jj += precision) { for (int j = 0, jj = 0; j < bfw; ++j, jj += precision) {//isnan and <0 and > 65535 in case of
redloc[i][j] = red[ii][jj] * multip; redloc[i][j] = red[ii][jj] * multip;
greenloc[i][j] = green[ii][jj] * multip; greenloc[i][j] = green[ii][jj] * multip;
blueloc[i][j] = blue[ii][jj] * multip; blueloc[i][j] = blue[ii][jj] * multip;
@ -7722,9 +7736,6 @@ void RawImageSource::getAutoWBMultipliersitc(bool extra, double & tempref, doubl
WBauto(extra, tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw, hrp); WBauto(extra, tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw, hrp);
} }
redloc(0, 0);
greenloc(0, 0);
blueloc(0, 0);
if (settings->verbose && wbpar.method != "autitcgreen") { if (settings->verbose && wbpar.method != "autitcgreen") {
printf("RGB grey AVG: %g %g %g\n", avg_r / std::max(1, rn), avg_g / std::max(1, gn), avg_b / std::max(1, bn)); printf("RGB grey AVG: %g %g %g\n", avg_r / std::max(1, rn), avg_g / std::max(1, gn), avg_b / std::max(1, bn));