Merged revision(s) 8484 from trunk:

fixed some bugs in gpu module under Windows:
* convertTo alignment error
........
This commit is contained in:
Vladislav Vinogradov 2012-05-30 17:06:39 +00:00
parent 4ddcc31edc
commit 4e4b96e3d9
3 changed files with 14 additions and 2 deletions

View File

@ -1037,6 +1037,11 @@ namespace
}
};
template <typename T> static inline bool isAligned(const T* ptr, size_t size)
{
return reinterpret_cast<size_t>(ptr) % size == 0;
}
//////////////////////////////////////////////////////////////////////////
// CudaFuncTable
@ -1165,6 +1170,13 @@ namespace
CV_Error(CV_StsUnsupportedFormat, "The device doesn't support double");
}
bool aligned = isAligned(src.data, 16) && isAligned(dst.data, 16);
if (!aligned)
{
cv::gpu::convertTo(src, dst);
return;
}
const func_t func = funcs[src.depth()][dst.depth()][src.channels() - 1];
CV_DbgAssert(func != 0);

View File

@ -850,7 +850,7 @@ TEST_P(Divide_Array, WithScale)
cv::Mat dst_gold;
cv::divide(mat1, mat2, dst_gold, scale, depth.second);
EXPECT_MAT_NEAR(dst_gold, dst, depth.first >= CV_32F || depth.second >= CV_32F ? 1e-4 : 1.0);
EXPECT_MAT_NEAR(dst_gold, dst, depth.first >= CV_32F || depth.second >= CV_32F ? 1e-2 : 1.0);
}
}

View File

@ -334,7 +334,7 @@ TEST_P(Laplacian, Accuracy)
cv::Mat dst_gold;
cv::Laplacian(src, dst_gold, -1, ksize.width);
EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
EXPECT_MAT_NEAR(dst_gold, dst, src.depth() < CV_32F ? 0.0 : 1e-3);
}
INSTANTIATE_TEST_CASE_P(GPU_Filter, Laplacian, testing::Combine(