return false;
#endif
+ // cv::minMaxIdx problem with index positions on AVX
+#if IPP_VERSION_X100 < 201810
+ if(!mask.empty() && _maxIdx && ipp::getIppFeatures()&ippCPUID_AVX)
+ return false;
+#endif
+
IppStatus status;
IppDataType dataType = ippiGetDataType(src.depth());
float minVal = 0;
size.width *= src.channels();
status = ippMinMaxFun(src.ptr(), (int)src.step, size, dataType, pMinVal, pMaxVal, pMinIdx, pMaxIdx, (Ipp8u*)mask.ptr(), (int)mask.step);
- if(status < 0 || status == ippStsNoOperation)
+ if(status < 0)
return false;
if(_minVal)
*_minVal = minVal;
*_maxVal = maxVal;
if(_minIdx)
{
- if(!mask.empty() && !minIdx.y && !minIdx.x)
+ // Should be just ippStsNoOperation check, but there is a bug in the function so we need additional checks
+ if(status == ippStsNoOperation && !mask.empty() && !pMinIdx->x && !pMinIdx->y)
{
_minIdx[0] = -1;
_minIdx[1] = -1;
}
if(_maxIdx)
{
- if(!mask.empty() && !maxIdx.y && !maxIdx.x)
+ // Should be just ippStsNoOperation check, but there is a bug in the function so we need additional checks
+ if(status == ippStsNoOperation && !mask.empty() && !pMaxIdx->x && !pMaxIdx->y)
{
_maxIdx[0] = -1;
_maxIdx[1] = -1;