|
|
|
@ -1154,6 +1154,30 @@ TEST(UMat, map_unmap_counting) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void process_with_async_cleanup(Mat& frame) |
|
|
|
|
{ |
|
|
|
|
UMat blurResult; |
|
|
|
|
{ |
|
|
|
|
UMat umat_buffer = frame.getUMat(ACCESS_READ); |
|
|
|
|
cv::blur(umat_buffer, blurResult, Size(3, 3)); // UMat doesn't support inplace, this call is not synchronized
|
|
|
|
|
} |
|
|
|
|
Mat result; |
|
|
|
|
blurResult.copyTo(result); |
|
|
|
|
swap(result, frame); |
|
|
|
|
// umat_buffer cleanup is done asynchronously, silence warning about original 'frame' cleanup here (through 'result')
|
|
|
|
|
// - release input 'frame' (as 'result')
|
|
|
|
|
// - release 'umat_buffer' asynchronously and silence warning about "parent" buffer (in debug builds)
|
|
|
|
|
} |
|
|
|
|
TEST(UMat, async_cleanup_without_call_chain_warning) |
|
|
|
|
{ |
|
|
|
|
Mat frame(Size(640, 480), CV_8UC1, Scalar::all(128)); |
|
|
|
|
for (int i = 0; i < 10; i++) |
|
|
|
|
{ |
|
|
|
|
process_with_async_cleanup(frame); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////// oclCleanupCallback threadsafe check (#5062) /////////////////////
|
|
|
|
|
|
|
|
|
|
// Case 1: reuse of old src Mat in OCL pipe. Hard to catch!
|
|
|
|
|