|
|
|
@ -4384,11 +4384,10 @@ static bool ipp_sortIdx( const Mat& src, Mat& dst, int flags ) |
|
|
|
|
{ |
|
|
|
|
CV_INSTRUMENT_REGION_IPP() |
|
|
|
|
|
|
|
|
|
bool sortRows = (flags & 1) == CV_SORT_EVERY_ROW; |
|
|
|
|
bool sortDescending = (flags & CV_SORT_DESCENDING) != 0; |
|
|
|
|
bool sortRows = (flags & 1) == SORT_EVERY_ROW; |
|
|
|
|
bool sortDescending = (flags & SORT_DESCENDING) != 0; |
|
|
|
|
int depth = src.depth(); |
|
|
|
|
IppDataType type = ippiGetDataType(depth); |
|
|
|
|
Ipp32s elemSize = (Ipp32s)src.elemSize1(); |
|
|
|
|
|
|
|
|
|
IppSortIndexFunc ippsSortRadixIndex = getSortIndexFunc(depth, sortDescending); |
|
|
|
|
if(!ippsSortRadixIndex) |
|
|
|
@ -4405,7 +4404,7 @@ static bool ipp_sortIdx( const Mat& src, Mat& dst, int flags ) |
|
|
|
|
|
|
|
|
|
for(int i = 0; i < src.rows; i++) |
|
|
|
|
{ |
|
|
|
|
if(CV_INSTRUMENT_FUN_IPP(ippsSortRadixIndex, (void*)src.ptr(i), elemSize, (Ipp32s*)dst.ptr(i), src.cols, buffer) < 0) |
|
|
|
|
if(CV_INSTRUMENT_FUN_IPP(ippsSortRadixIndex, (const void*)src.ptr(i), (Ipp32s)src.step[1], (Ipp32s*)dst.ptr(i), src.cols, buffer) < 0) |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -4422,13 +4421,13 @@ static bool ipp_sortIdx( const Mat& src, Mat& dst, int flags ) |
|
|
|
|
|
|
|
|
|
buffer.allocate(bufferSize); |
|
|
|
|
|
|
|
|
|
Ipp32s pixStride = elemSize*dst.cols; |
|
|
|
|
Ipp32s srcStep = (Ipp32s)src.step[0]; |
|
|
|
|
for(int i = 0; i < src.cols; i++) |
|
|
|
|
{ |
|
|
|
|
subRect.x = i; |
|
|
|
|
dstSub = Mat(dst, subRect); |
|
|
|
|
|
|
|
|
|
if(CV_INSTRUMENT_FUN_IPP(ippsSortRadixIndex, (void*)src.ptr(0, i), pixStride, (Ipp32s*)dstRow.ptr(), src.rows, buffer) < 0) |
|
|
|
|
if(CV_INSTRUMENT_FUN_IPP(ippsSortRadixIndex, (const void*)src.ptr(0, i), srcStep, (Ipp32s*)dstRow.ptr(), src.rows, buffer) < 0) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
dstRow = dstRow.reshape(1, dstSub.rows); |
|
|
|
|