Vectorize 49 and 81 in ImProcFunctions::Median_Denoise() (#3346)
This commit is contained in:
@@ -376,10 +376,21 @@ void ImProcFunctions::Median_Denoise( float **src, float **dst, const int width,
|
|||||||
medianOut[i][j] = medianIn[i][j];
|
medianOut[i][j] = medianIn[i][j];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; j < width - border; ++j) {
|
#ifdef __SSE2__
|
||||||
int kk = 0;
|
std::array<vfloat, 49> vpp ALIGNED16;
|
||||||
|
for (; j < width - border - 3; j += 4) {
|
||||||
|
for (int kk = 0, ii = -border; ii <= border; ++ii) {
|
||||||
|
for (int jj = -border; jj <= border; ++jj, ++kk) {
|
||||||
|
vpp[kk] = LVFU(medianIn[i + ii][j + jj]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (int ii = -border; ii <= border; ++ii) {
|
STVFU(medianOut[i][j], median(vpp));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (; j < width - border; ++j) {
|
||||||
|
for (int kk = 0, ii = -border; ii <= border; ++ii) {
|
||||||
for (int jj = -border; jj <= border; ++jj, ++kk) {
|
for (int jj = -border; jj <= border; ++jj, ++kk) {
|
||||||
pp[kk] = medianIn[i + ii][j + jj];
|
pp[kk] = medianIn[i + ii][j + jj];
|
||||||
}
|
}
|
||||||
@@ -399,10 +410,21 @@ void ImProcFunctions::Median_Denoise( float **src, float **dst, const int width,
|
|||||||
medianOut[i][j] = medianIn[i][j];
|
medianOut[i][j] = medianIn[i][j];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; j < width - border; ++j) {
|
#ifdef __SSE2__
|
||||||
int kk = 0;
|
std::array<vfloat, 81> vpp ALIGNED16;
|
||||||
|
for (; j < width - border - 3; j += 4) {
|
||||||
|
for (int kk = 0, ii = -border; ii <= border; ++ii) {
|
||||||
|
for (int jj = -border; jj <= border; ++jj, ++kk) {
|
||||||
|
vpp[kk] = LVFU(medianIn[i + ii][j + jj]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (int ii = -border; ii <= border; ++ii) {
|
STVFU(medianOut[i][j], median(vpp));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (; j < width - border; ++j) {
|
||||||
|
for (int kk = 0, ii = -border; ii <= border; ++ii) {
|
||||||
for (int jj = -border; jj <= border; ++jj, ++kk) {
|
for (int jj = -border; jj <= border; ++jj, ++kk) {
|
||||||
pp[kk] = medianIn[i + ii][j + jj];
|
pp[kk] = medianIn[i + ii][j + jj];
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user