Removed another pixSort() and improved two places (#3346)
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
#include "rtengine.h"
|
||||
#include "rawimagesource.h"
|
||||
#include "rt_math.h"
|
||||
#include "median.h"
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -106,14 +107,6 @@ bool LinEqSolve(int nDim, double* pfMatr, double* pfVect, double* pfSolution)
|
||||
//end of linear equation solver
|
||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
inline void pixSort(float &a, float &b) {
|
||||
if (a > b) {
|
||||
float temp = a;
|
||||
a = b;
|
||||
b = temp;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
using namespace std;
|
||||
@@ -630,36 +623,18 @@ void RawImageSource::CA_correct_RT(const double cared, const double cablue, cons
|
||||
float bstemp[2];
|
||||
for (int dir = 0; dir < 2; dir++) {
|
||||
//temporary storage for median filter
|
||||
float p[9];
|
||||
p[0] = blockshifts[(vblock - 1) * hblsz + hblock - 1][c][dir];
|
||||
p[1] = blockshifts[(vblock - 1) * hblsz + hblock][c][dir];
|
||||
p[2] = blockshifts[(vblock - 1) * hblsz + hblock + 1][c][dir];
|
||||
p[3] = blockshifts[(vblock) * hblsz + hblock - 1][c][dir];
|
||||
p[4] = blockshifts[(vblock) * hblsz + hblock][c][dir];
|
||||
p[5] = blockshifts[(vblock) * hblsz + hblock + 1][c][dir];
|
||||
p[6] = blockshifts[(vblock + 1) * hblsz + hblock - 1][c][dir];
|
||||
p[7] = blockshifts[(vblock + 1) * hblsz + hblock][c][dir];
|
||||
p[8] = blockshifts[(vblock + 1) * hblsz + hblock + 1][c][dir];
|
||||
pixSort(p[1], p[2]);
|
||||
pixSort(p[4], p[5]);
|
||||
pixSort(p[7], p[8]);
|
||||
pixSort(p[0], p[1]);
|
||||
pixSort(p[3], p[4]);
|
||||
pixSort(p[6], p[7]);
|
||||
pixSort(p[1], p[2]);
|
||||
pixSort(p[4], p[5]);
|
||||
pixSort(p[7], p[8]);
|
||||
pixSort(p[0], p[3]);
|
||||
pixSort(p[5], p[8]);
|
||||
pixSort(p[4], p[7]);
|
||||
pixSort(p[3], p[6]);
|
||||
pixSort(p[1], p[4]);
|
||||
pixSort(p[2], p[5]);
|
||||
pixSort(p[4], p[7]);
|
||||
pixSort(p[4], p[2]);
|
||||
pixSort(p[6], p[4]);
|
||||
pixSort(p[4], p[2]);
|
||||
bstemp[dir] = p[4];
|
||||
const std::array<float, 9> p = {
|
||||
blockshifts[(vblock - 1) * hblsz + hblock - 1][c][dir],
|
||||
blockshifts[(vblock - 1) * hblsz + hblock][c][dir],
|
||||
blockshifts[(vblock - 1) * hblsz + hblock + 1][c][dir],
|
||||
blockshifts[(vblock) * hblsz + hblock - 1][c][dir],
|
||||
blockshifts[(vblock) * hblsz + hblock][c][dir],
|
||||
blockshifts[(vblock) * hblsz + hblock + 1][c][dir],
|
||||
blockshifts[(vblock + 1) * hblsz + hblock - 1][c][dir],
|
||||
blockshifts[(vblock + 1) * hblsz + hblock][c][dir],
|
||||
blockshifts[(vblock + 1) * hblsz + hblock + 1][c][dir]
|
||||
};
|
||||
bstemp[dir] = median(p);
|
||||
}
|
||||
|
||||
//now prepare coefficient matrix; use only data points within caautostrength/2 std devs of zero
|
||||
|
||||
@@ -1768,36 +1768,39 @@ SSEFUNCTION void RawImageSource::lmmse_interpolate_omp(int winw, int winh, int i
|
||||
rix[c] = qix[c] + rr * cc1 + cc;
|
||||
rix[1] = qix[1] + rr * cc1 + cc;
|
||||
// Assign 3x3 differential color values
|
||||
const __m128 p1v = LVFU(rix[c][-w1 - 1]) - LVFU(rix[1][-w1 - 1]);
|
||||
const __m128 p2v = LVFU(rix[c][-w1]) - LVFU(rix[1][-w1]);
|
||||
const __m128 p3v = LVFU(rix[c][-w1 + 1]) - LVFU(rix[1][-w1 + 1]);
|
||||
const __m128 p4v = LVFU(rix[c][ -1]) - LVFU(rix[1][ -1]);
|
||||
const __m128 p5v = LVFU(rix[c][ 0]) - LVFU(rix[1][ 0]);
|
||||
const __m128 p6v = LVFU(rix[c][ 1]) - LVFU(rix[1][ 1]);
|
||||
const __m128 p7v = LVFU(rix[c][ w1 - 1]) - LVFU(rix[1][ w1 - 1]);
|
||||
const __m128 p8v = LVFU(rix[c][ w1]) - LVFU(rix[1][ w1]);
|
||||
const __m128 p9v = LVFU(rix[c][ w1 + 1]) - LVFU(rix[1][ w1 + 1]);
|
||||
_mm_storeu_ps(&rix[d][0], median(p1v, p2v, p3v, p4v, p5v, p6v, p7v, p8v, p9v));
|
||||
const std::array<vfloat, 9> p = {
|
||||
LVFU(rix[c][-w1 - 1]) - LVFU(rix[1][-w1 - 1]),
|
||||
LVFU(rix[c][-w1]) - LVFU(rix[1][-w1]),
|
||||
LVFU(rix[c][-w1 + 1]) - LVFU(rix[1][-w1 + 1]),
|
||||
LVFU(rix[c][ -1]) - LVFU(rix[1][ -1]),
|
||||
LVFU(rix[c][ 0]) - LVFU(rix[1][ 0]),
|
||||
LVFU(rix[c][ 1]) - LVFU(rix[1][ 1]),
|
||||
LVFU(rix[c][ w1 - 1]) - LVFU(rix[1][ w1 - 1]),
|
||||
LVFU(rix[c][ w1]) - LVFU(rix[1][ w1]),
|
||||
LVFU(rix[c][ w1 + 1]) - LVFU(rix[1][ w1 + 1])
|
||||
};
|
||||
_mm_storeu_ps(&rix[d][0], median(p));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
for (; cc < cc1 - 1; cc++) {
|
||||
float temp;
|
||||
rix[d] = qix[d] + rr * cc1 + cc;
|
||||
rix[c] = qix[c] + rr * cc1 + cc;
|
||||
rix[1] = qix[1] + rr * cc1 + cc;
|
||||
// Assign 3x3 differential color values
|
||||
const float p1 = rix[c][-w1 - 1] - rix[1][-w1 - 1];
|
||||
const float p2 = rix[c][-w1] - rix[1][-w1];
|
||||
const float p3 = rix[c][-w1 + 1] - rix[1][-w1 + 1];
|
||||
const float p4 = rix[c][ -1] - rix[1][ -1];
|
||||
const float p5 = rix[c][ 0] - rix[1][ 0];
|
||||
const float p6 = rix[c][ 1] - rix[1][ 1];
|
||||
const float p7 = rix[c][ w1 - 1] - rix[1][ w1 - 1];
|
||||
const float p8 = rix[c][ w1] - rix[1][ w1];
|
||||
const float p9 = rix[c][ w1 + 1] - rix[1][ w1 + 1];
|
||||
rix[d][0] = median(p1, p2, p3, p4, p5, p6, p7, p8, p9);
|
||||
const std::array<float, 9> p = {
|
||||
rix[c][-w1 - 1] - rix[1][-w1 - 1],
|
||||
rix[c][-w1] - rix[1][-w1],
|
||||
rix[c][-w1 + 1] - rix[1][-w1 + 1],
|
||||
rix[c][ -1] - rix[1][ -1],
|
||||
rix[c][ 0] - rix[1][ 0],
|
||||
rix[c][ 1] - rix[1][ 1],
|
||||
rix[c][ w1 - 1] - rix[1][ w1 - 1],
|
||||
rix[c][ w1] - rix[1][ w1],
|
||||
rix[c][ w1 + 1] - rix[1][ w1 + 1]
|
||||
};
|
||||
rix[d][0] = median(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user